init
This commit is contained in:
commit
ed50572dc2
90
.gitignore
vendored
Normal file
90
.gitignore
vendored
Normal file
@ -0,0 +1,90 @@
|
||||
### JetBrains template
|
||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||
|
||||
# User-specific stuff
|
||||
.idea/**/workspace.xml
|
||||
.idea/**/tasks.xml
|
||||
.idea/**/usage.statistics.xml
|
||||
.idea/**/dictionaries
|
||||
.idea/**/shelf
|
||||
|
||||
# Generated files
|
||||
.idea/**/contentModel.xml
|
||||
|
||||
# Sensitive or high-churn files
|
||||
.idea/**/dataSources/
|
||||
.idea/**/dataSources.ids
|
||||
.idea/**/dataSources.local.xml
|
||||
.idea/**/sqlDataSources.xml
|
||||
.idea/**/dynamic.xml
|
||||
.idea/**/uiDesigner.xml
|
||||
.idea/**/dbnavigator.xml
|
||||
|
||||
# Gradle
|
||||
.idea/**/gradle.xml
|
||||
.idea/**/libraries
|
||||
|
||||
# Gradle and Maven with auto-import
|
||||
# When using Gradle or Maven with auto-import, you should exclude module files,
|
||||
# since they will be recreated, and may cause churn. Uncomment if using
|
||||
# auto-import.
|
||||
# .idea/artifacts
|
||||
# .idea/compiler.xml
|
||||
# .idea/jarRepositories.xml
|
||||
# .idea/modules.xml
|
||||
# .idea/*.iml
|
||||
# .idea/modules
|
||||
*.iml
|
||||
# *.ipr
|
||||
|
||||
# CMake
|
||||
cmake-build-*/
|
||||
|
||||
# Mongo Explorer plugin
|
||||
.idea/**/mongoSettings.xml
|
||||
|
||||
# File-based project format
|
||||
*.iws
|
||||
|
||||
# IntelliJ
|
||||
out/
|
||||
|
||||
# mpeltonen/sbt-idea plugin
|
||||
.idea_modules/
|
||||
|
||||
# JIRA plugin
|
||||
atlassian-ide-plugin.xml
|
||||
|
||||
# Cursive Clojure plugin
|
||||
.idea/replstate.xml
|
||||
|
||||
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||
com_crashlytics_export_strings.xml
|
||||
crashlytics.properties
|
||||
crashlytics-build.properties
|
||||
fabric.properties
|
||||
|
||||
# Editor-based Rest Client
|
||||
.idea/httpRequests
|
||||
|
||||
# Android studio 3.1+ serialized cache file
|
||||
.idea/caches/build_file_checksums.ser
|
||||
|
||||
### Go template
|
||||
# Binaries for programs and plugins
|
||||
*.exe
|
||||
*.exe~
|
||||
*.dll
|
||||
*.so
|
||||
*.dylib
|
||||
|
||||
# Test binary, built with `go test -c`
|
||||
*.test
|
||||
|
||||
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||
*.out
|
||||
|
||||
# Dependency directories (remove the comment below to include it)
|
||||
# vendor/
|
||||
|
5
go.mod
Normal file
5
go.mod
Normal file
@ -0,0 +1,5 @@
|
||||
module git.caliban.io/martin/go-foursquare
|
||||
|
||||
go 1.22.0
|
||||
|
||||
require github.com/google/go-querystring v1.1.0
|
5
go.sum
Normal file
5
go.sum
Normal file
@ -0,0 +1,5 @@
|
||||
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
|
||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
|
||||
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
290
model.go
Normal file
290
model.go
Normal file
@ -0,0 +1,290 @@
|
||||
package foursquare
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type (
|
||||
Options struct {
|
||||
LatLong string `url:"ll"`
|
||||
Radius int64 `url:"radius"`
|
||||
Category string `url:"categories,omitempty"`
|
||||
Key string `url:"-"`
|
||||
}
|
||||
)
|
||||
|
||||
type CustomTime struct {
|
||||
time.Time
|
||||
}
|
||||
|
||||
type (
|
||||
FoursquarePlaces struct {
|
||||
Results []Results4sqPlaces `json:"results"`
|
||||
}
|
||||
Results4sqPlaces struct {
|
||||
FsqId string `json:"fsq_id"`
|
||||
Categories []Categories4sqPlaces `json:"categories"`
|
||||
Chains []Chains4sqPlaces `json:"chains,omitempty"`
|
||||
ClosedBucket string `json:"closed_bucket,omitempty"`
|
||||
DateClosed CustomTime `json:"date_closed,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Distance int64 `json:"distance,omitempty"`
|
||||
Email string `json:"email,omitempty"`
|
||||
Fax string `json:"fax,omitempty"`
|
||||
Features Features4sqPlaces `json:"features,omitempty"`
|
||||
Geocodes Geocodes4sqPlaces `json:"geocodes,omitempty"`
|
||||
Hours Hours4sqPlaces `json:"hours,omitempty"`
|
||||
HoursPopular []HoursSlots4sqPlaces `json:"hours_popular,omitempty"`
|
||||
Link string `json:"link,omitempty"`
|
||||
Location Location4sqPlaces `json:"location,omitempty"`
|
||||
Photos []Photos4sqPlaces `json:"photos,omitempty"`
|
||||
Popularity int64 `json:"popularity,omitempty"`
|
||||
Price int64 `json:"price,omitempty"`
|
||||
Rating int64 `json:"rating,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
RelatedPlaces struct{} `json:"related_places,omitempty"`
|
||||
SocialMedia SocialMedia4sqPlaces `json:"social_media,omitempty"`
|
||||
Stats Stats4sqPlaces `json:"stats,omitempty"`
|
||||
StoreId string `json:"store_id,omitempty"`
|
||||
Tastes []string `json:"tastes,omitempty"`
|
||||
Tel string `json:"tel,omitempty"`
|
||||
Timezone string `json:"timezone,omitempty"`
|
||||
Tips []Tips4sqPlaces `json:"tips,omitempty"`
|
||||
VenueRealityBucket string `json:"venue_reality_bucket,omitempty"`
|
||||
Verified bool `json:"verified,omitempty"`
|
||||
Website string `json:"website,omitempty"`
|
||||
}
|
||||
)
|
||||
|
||||
type Categories4sqPlaces struct {
|
||||
Id int64 `json:"id"`
|
||||
Name string `json:"name"`
|
||||
ShortName string `json:"short_name,omitempty"`
|
||||
PluralName string `json:"plural_name,omitempty"`
|
||||
Icon Icon4sqPlaces `json:"icon,omitempty"`
|
||||
}
|
||||
|
||||
type Icon4sqPlaces struct {
|
||||
Id string `json:"id,omitempty"`
|
||||
CreateAt CustomTime `json:"create_at,omitempty"`
|
||||
Prefix string `json:"prefix"`
|
||||
Suffix string `json:"suffix"`
|
||||
Width int64 `json:"width,omitempty"`
|
||||
Height int64 `json:"height,omitempty"`
|
||||
Classifications []string `json:"classifications,omitempty"`
|
||||
Tip Tip4sqPlaces `json:"tip,omitempty"`
|
||||
}
|
||||
|
||||
type Chains4sqPlaces struct {
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
type Tip4sqPlaces struct {
|
||||
Id string `json:"id"`
|
||||
CreatedAt CustomTime `json:"created_at,omitempty"`
|
||||
Text string `json:"text"`
|
||||
Url string `json:"url,omitempty"`
|
||||
Lang string `json:"lang,omitempty"`
|
||||
AgreeCount int64 `json:"agree_count,omitempty"`
|
||||
DisagreeCount int64 `json:"disagree_count,omitempty"`
|
||||
}
|
||||
|
||||
type Features4sqPlaces struct {
|
||||
Payment Payment4sqPlaces `json:"payment,omitempty"`
|
||||
FoodAndDrink FoodAndDrink4sqPlaces `json:"food_and_drink,omitempty"`
|
||||
Services Services4sqPlaces `json:"services,omitempty"`
|
||||
Amenities Amenities4sqPlaces `json:"amenities,omitempty"`
|
||||
Attributes Attributes4sqPlaces `json:"attributes,omitempty"`
|
||||
}
|
||||
|
||||
type Payment4sqPlaces struct {
|
||||
CreditCards CreditCards4sqPlaces `json:"credit_cards,omitempty"`
|
||||
DigitalWallet DigitalWallet4sqPlaces `json:"digital_wallet,omitempty"`
|
||||
}
|
||||
|
||||
type CreditCards4sqPlaces struct {
|
||||
AcceptsCreditCards struct{} `json:"accepts_credit_cards,omitempty"`
|
||||
Amex struct{} `json:"amex,omitempty"`
|
||||
Discover struct{} `json:"discover,omitempty"`
|
||||
Visa struct{} `json:"visa,omitempty"`
|
||||
DinersClub struct{} `json:"diners_club,omitempty"`
|
||||
MasterCard struct{} `json:"master_card,omitempty"`
|
||||
UnionPay struct{} `json:"union_pay,omitempty"`
|
||||
}
|
||||
|
||||
type DigitalWallet4sqPlaces struct {
|
||||
AcceptsNfc struct{} `json:"accepts_nfc,omitempty"`
|
||||
}
|
||||
|
||||
type FoodAndDrink4sqPlaces struct {
|
||||
Alcohol Alcohol4sqPlaces `json:"alcohol,omitempty"`
|
||||
Meals Meals4sqPlaces `json:"meals,omitempty"`
|
||||
}
|
||||
|
||||
type Alcohol4sqPlaces struct {
|
||||
BarService struct{} `json:"bar_service,omitempty"`
|
||||
Beer struct{} `json:"beer,omitempty"`
|
||||
Byo struct{} `json:"byo,omitempty"`
|
||||
Cocktails struct{} `json:"cocktails,omitempty"`
|
||||
FullBar struct{} `json:"full_bar,omitempty"`
|
||||
Wine struct{} `json:"wine,omitempty"`
|
||||
}
|
||||
|
||||
type Meals4sqPlaces struct {
|
||||
BarSnacks struct{} `json:"bar_snacks,omitempty"`
|
||||
Breakfast struct{} `json:"breakfast,omitempty"`
|
||||
Brunch struct{} `json:"brunch,omitempty"`
|
||||
Lunch struct{} `json:"lunch,omitempty"`
|
||||
HappyHour struct{} `json:"happy_hour,omitempty"`
|
||||
Dessert struct{} `json:"dessert,omitempty"`
|
||||
Dinner struct{} `json:"dinner,omitempty"`
|
||||
TastingMenu struct{} `json:"tasting_menu,omitempty"`
|
||||
}
|
||||
|
||||
type Services4sqPlaces struct {
|
||||
Delivery struct{} `json:"delivery,omitempty"`
|
||||
Takeout struct{} `json:"takeout,omitempty"`
|
||||
DriveThrough struct{} `json:"drive_through,omitempty"`
|
||||
DineIn DineIn4sqPlaces `json:"dine_in,omitempty"`
|
||||
}
|
||||
|
||||
type DineIn4sqPlaces struct {
|
||||
Reservations struct{} `json:"reservations,omitempty"`
|
||||
OnlineReservations struct{} `json:"online_reservations,omitempty"`
|
||||
GroupsOnlyReservations struct{} `json:"groups_only_reservations,omitempty"`
|
||||
EssentialReservations struct{} `json:"essential_reservations,omitempty"`
|
||||
}
|
||||
|
||||
type Amenities4sqPlaces struct {
|
||||
Restroom struct{} `json:"restroom,omitempty"`
|
||||
Smoking struct{} `json:"smoking,omitempty"`
|
||||
Jukebox struct{} `json:"jukebox,omitempty"`
|
||||
Music struct{} `json:"music,omitempty"`
|
||||
LiveMusic struct{} `json:"live_music,omitempty"`
|
||||
PrivateRoom struct{} `json:"private_room,omitempty"`
|
||||
OutdoorSeating struct{} `json:"outdoor_seating,omitempty"`
|
||||
Tvs struct{} `json:"tvs,omitempty"`
|
||||
Atm struct{} `json:"atm,omitempty"`
|
||||
CoatCheck struct{} `json:"coat_check,omitempty"`
|
||||
WheelchairAccessible struct{} `json:"wheelchair_accessible,omitempty"`
|
||||
Parking Parking4sqPlaces `json:"parking,omitempty"`
|
||||
SitDownDining struct{} `json:"sit_down_dining,omitempty"`
|
||||
Wifi string `json:"wifi,omitempty"`
|
||||
}
|
||||
|
||||
type Parking4sqPlaces struct {
|
||||
Parking struct{} `json:"parking,omitempty"`
|
||||
StreetParking struct{} `json:"street_parking,omitempty"`
|
||||
ValetParking struct{} `json:"valet_parking,omitempty"`
|
||||
PublicLot struct{} `json:"public_lot,omitempty"`
|
||||
PrivateLot struct{} `json:"private_lot,omitempty"`
|
||||
}
|
||||
|
||||
type Attributes4sqPlaces struct {
|
||||
BusinessMeeting string `json:"business_meeting,omitempty"`
|
||||
Clean string `json:"clean,omitempty"`
|
||||
Crowded string `json:"crowded,omitempty"`
|
||||
DatesPopular string `json:"dates_popular,omitempty"`
|
||||
FamiliesPopular string `json:"families_popular,omitempty"`
|
||||
GlutenFreeDiet string `json:"gluten_free_diet,omitempty"`
|
||||
GoodForDogs string `json:"good_for_dogs,omitempty"`
|
||||
GroupsPopular string `json:"groups_popular,omitempty"`
|
||||
HealthyDiet string `json:"healthy_diet,omitempty"`
|
||||
LateNight string `json:"late_night,omitempty"`
|
||||
Noisy string `json:"noisy,omitempty"`
|
||||
QuickBite string `json:"quick_bite,omitempty"`
|
||||
Romantic string `json:"romantic,omitempty"`
|
||||
ServiceQuality string `json:"service_quality,omitempty"`
|
||||
SinglesPopular string `json:"singles_popular,omitempty"`
|
||||
SpecialOccasion string `json:"special_occasion,omitempty"`
|
||||
Trendy string `json:"trendy,omitempty"`
|
||||
ValueForMoney string `json:"value_for_money,omitempty"`
|
||||
VeganDiet string `json:"vegan_diet,omitempty"`
|
||||
VegetarianDiet string `json:"vegetarian_diet,omitempty"`
|
||||
}
|
||||
|
||||
type Geocodes4sqPlaces struct {
|
||||
DropOff LatLong4sqPlaces `json:"drop_off,omitempty"`
|
||||
FrontDoor LatLong4sqPlaces `json:"front_door,omitempty"`
|
||||
Main LatLong4sqPlaces `json:"main,omitempty"`
|
||||
Road LatLong4sqPlaces `json:"road,omitempty"`
|
||||
Roof LatLong4sqPlaces `json:"roof,omitempty"`
|
||||
}
|
||||
|
||||
type LatLong4sqPlaces struct {
|
||||
Latitude float64 `json:"latitude,omitempty"`
|
||||
Longitude float64 `json:"longitude,omitempty"`
|
||||
}
|
||||
|
||||
type Hours4sqPlaces struct {
|
||||
Display string `json:"display,omitempty"`
|
||||
IsLocalHoliday bool `json:"is_local_holiday,omitempty"`
|
||||
OpenNow bool `json:"open_now,omitempty"`
|
||||
Regular []HoursSlots4sqPlaces `json:"regular,omitempty"`
|
||||
}
|
||||
|
||||
type HoursSlots4sqPlaces struct {
|
||||
Close string `json:"close,omitempty"`
|
||||
Day int64 `json:"day,omitempty"`
|
||||
Open string `json:"open,omitempty"`
|
||||
}
|
||||
|
||||
type Location4sqPlaces struct {
|
||||
Address string `json:"address,omitempty"`
|
||||
AddressExtended string `json:"address_extended,omitempty"`
|
||||
AdminRegion string `json:"admin_region,omitempty"`
|
||||
CensusBlock string `json:"census_block,omitempty"`
|
||||
Country string `json:"country,omitempty"`
|
||||
CrossStreet string `json:"cross_street,omitempty"`
|
||||
Dma string `json:"dma,omitempty"`
|
||||
FormattedAddress string `json:"formatted_address,omitempty"`
|
||||
Locality string `json:"locality,omitempty"`
|
||||
Neighborhood []string `json:"neighborhood,omitempty"`
|
||||
PoBox string `json:"po_box,omitempty"`
|
||||
PostTown string `json:"post_town,omitempty"`
|
||||
Region string `json:"region,omitempty"`
|
||||
}
|
||||
|
||||
type Photos4sqPlaces struct {
|
||||
Id string `json:"id,omitempty"`
|
||||
CreatedAt CustomTime `json:"created_at,omitempty"`
|
||||
Prefix string `json:"prefix,omitempty"`
|
||||
Suffix string `json:"suffix,omitempty"`
|
||||
Width int64 `json:"width,omitempty"`
|
||||
Height int64 `json:"height,omitempty"`
|
||||
Classifications []string `json:"classifications,omitempty"`
|
||||
Tip PhotosTip4sqPlaces `json:"tip,omitempty"`
|
||||
}
|
||||
|
||||
type PhotosTip4sqPlaces struct {
|
||||
Id string `json:"id,omitempty"`
|
||||
CreatedAt string `json:"created_at,omitempty"`
|
||||
Text string `json:"text,omitempty"`
|
||||
Url string `json:"url,omitempty"`
|
||||
Lang string `json:"lang,omitempty"`
|
||||
AgreeCount int64 `json:"agree_count,omitempty"`
|
||||
DisagreeCount int64 `json:"disagree_count,omitempty"`
|
||||
}
|
||||
|
||||
type SocialMedia4sqPlaces struct {
|
||||
FacebookId string `json:"facebook_id,omitempty"`
|
||||
Instagram string `json:"instagram,omitempty"`
|
||||
Twitter string `json:"twitter,omitempty"`
|
||||
}
|
||||
|
||||
type Stats4sqPlaces struct {
|
||||
TotalPhotos int64 `json:"total_photos,omitempty"`
|
||||
TotalRatings int64 `json:"total_ratings,omitempty"`
|
||||
TotalTips int64 `json:"total_tips,omitempty"`
|
||||
}
|
||||
|
||||
type Tips4sqPlaces struct {
|
||||
Id string `json:"id,omitempty"`
|
||||
CreatedAt CustomTime `json:"created_at,omitempty"`
|
||||
Text string `json:"text,omitempty"`
|
||||
Url string `json:"url,omitempty"`
|
||||
Lang string `json:"lang,omitempty"`
|
||||
AgreeCount int64 `json:"agree_count,omitempty"`
|
||||
DisagreeCount int64 `json:"disagree_count,omitempty"`
|
||||
}
|
213
modelv2.go
Normal file
213
modelv2.go
Normal file
@ -0,0 +1,213 @@
|
||||
package foursquare
|
||||
|
||||
type (
|
||||
FoursquarePlacesv2 struct {
|
||||
Results []struct {
|
||||
FsqId string `json:"fsq_id"`
|
||||
Categories []Categories4sqPlaces `json:"categories"`
|
||||
Chains []struct {
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
} `json:"chains,omitempty"`
|
||||
ClosedBucket string `json:"closed_bucket,omitempty"`
|
||||
DateClosed CustomTime `json:"date_closed,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Distance int64 `json:"distance,omitempty"`
|
||||
Email string `json:"email,omitempty"`
|
||||
Fax string `json:"fax,omitempty"`
|
||||
Features struct {
|
||||
Payment struct {
|
||||
CreditCards struct {
|
||||
AcceptsCreditCards struct{} `json:"accepts_credit_cards,omitempty"`
|
||||
Amex struct{} `json:"amex,omitempty"`
|
||||
Discover struct{} `json:"discover,omitempty"`
|
||||
Visa struct{} `json:"visa,omitempty"`
|
||||
DinersClub struct{} `json:"diners_club,omitempty"`
|
||||
MasterCard struct{} `json:"master_card,omitempty"`
|
||||
UnionPay struct{} `json:"union_pay,omitempty"`
|
||||
} `json:"credit_cards,omitempty"`
|
||||
DigitalWallet struct {
|
||||
AcceptsNfc struct{} `json:"accepts_nfc,omitempty"`
|
||||
} `json:"digital_wallet,omitempty"`
|
||||
} `json:"payment,omitempty"`
|
||||
FoodAndDrink struct {
|
||||
Alcohol struct {
|
||||
BarService struct{} `json:"bar_service,omitempty"`
|
||||
Beer struct{} `json:"beer,omitempty"`
|
||||
Byo struct{} `json:"byo,omitempty"`
|
||||
Cocktails struct{} `json:"cocktails,omitempty"`
|
||||
FullBar struct{} `json:"full_bar,omitempty"`
|
||||
Wine struct{} `json:"wine,omitempty"`
|
||||
} `json:"alcohol,omitempty"`
|
||||
Meals struct {
|
||||
BarSnacks struct{} `json:"bar_snacks,omitempty"`
|
||||
Breakfast struct{} `json:"breakfast,omitempty"`
|
||||
Brunch struct{} `json:"brunch,omitempty"`
|
||||
Lunch struct{} `json:"lunch,omitempty"`
|
||||
HappyHour struct{} `json:"happy_hour,omitempty"`
|
||||
Dessert struct{} `json:"dessert,omitempty"`
|
||||
Dinner struct{} `json:"dinner,omitempty"`
|
||||
TastingMenu struct{} `json:"tasting_menu,omitempty"`
|
||||
} `json:"meals,omitempty"`
|
||||
} `json:"food_and_drink,omitempty"`
|
||||
Services struct {
|
||||
Delivery struct{} `json:"delivery,omitempty"`
|
||||
Takeout struct{} `json:"takeout,omitempty"`
|
||||
DriveThrough struct{} `json:"drive_through,omitempty"`
|
||||
DineIn struct {
|
||||
Reservations struct{} `json:"reservations,omitempty"`
|
||||
OnlineReservations struct{} `json:"online_reservations,omitempty"`
|
||||
GroupsOnlyReservations struct{} `json:"groups_only_reservations,omitempty"`
|
||||
EssentialReservations struct{} `json:"essential_reservations,omitempty"`
|
||||
} `json:"dine_in,omitempty"`
|
||||
} `json:"services,omitempty"`
|
||||
Amenities struct {
|
||||
Restroom struct{} `json:"restroom,omitempty"`
|
||||
Smoking struct{} `json:"smoking,omitempty"`
|
||||
Jukebox struct{} `json:"jukebox,omitempty"`
|
||||
Music struct{} `json:"music,omitempty"`
|
||||
LiveMusic struct{} `json:"live_music,omitempty"`
|
||||
PrivateRoom struct{} `json:"private_room,omitempty"`
|
||||
OutdoorSeating struct{} `json:"outdoor_seating,omitempty"`
|
||||
Tvs struct{} `json:"tvs,omitempty"`
|
||||
Atm struct{} `json:"atm,omitempty"`
|
||||
CoatCheck struct{} `json:"coat_check,omitempty"`
|
||||
WheelchairAccessible struct{} `json:"wheelchair_accessible,omitempty"`
|
||||
Parking struct {
|
||||
Parking struct{} `json:"parking,omitempty"`
|
||||
StreetParking struct{} `json:"street_parking,omitempty"`
|
||||
ValetParking struct{} `json:"valet_parking,omitempty"`
|
||||
PublicLot struct{} `json:"public_lot,omitempty"`
|
||||
PrivateLot struct{} `json:"private_lot,omitempty"`
|
||||
} `json:"parking,omitempty"`
|
||||
SitDownDining struct{} `json:"sit_down_dining,omitempty"`
|
||||
Wifi string `json:"wifi,omitempty"`
|
||||
} `json:"amenities,omitempty"`
|
||||
Attributes struct {
|
||||
BusinessMeeting string `json:"business_meeting,omitempty"`
|
||||
Clean string `json:"clean,omitempty"`
|
||||
Crowded string `json:"crowded,omitempty"`
|
||||
DatesPopular string `json:"dates_popular,omitempty"`
|
||||
FamiliesPopular string `json:"families_popular,omitempty"`
|
||||
GlutenFreeDiet string `json:"gluten_free_diet,omitempty"`
|
||||
GoodForDogs string `json:"good_for_dogs,omitempty"`
|
||||
GroupsPopular string `json:"groups_popular,omitempty"`
|
||||
HealthyDiet string `json:"healthy_diet,omitempty"`
|
||||
LateNight string `json:"late_night,omitempty"`
|
||||
Noisy string `json:"noisy,omitempty"`
|
||||
QuickBite string `json:"quick_bite,omitempty"`
|
||||
Romantic string `json:"romantic,omitempty"`
|
||||
ServiceQuality string `json:"service_quality,omitempty"`
|
||||
SinglesPopular string `json:"singles_popular,omitempty"`
|
||||
SpecialOccasion string `json:"special_occasion,omitempty"`
|
||||
Trendy string `json:"trendy,omitempty"`
|
||||
ValueForMoney string `json:"value_for_money,omitempty"`
|
||||
VeganDiet string `json:"vegan_diet,omitempty"`
|
||||
VegetarianDiet string `json:"vegetarian_diet,omitempty"`
|
||||
} `json:"attributes,omitempty"`
|
||||
} `json:"features,omitempty"`
|
||||
Geocodes struct {
|
||||
DropOff struct {
|
||||
Latitude float64 `json:"latitude,omitempty"`
|
||||
Longitude float64 `json:"longitude,omitempty"`
|
||||
} `json:"drop_off,omitempty"`
|
||||
FrontDoor struct {
|
||||
Latitude float64 `json:"latitude,omitempty"`
|
||||
Longitude float64 `json:"longitude,omitempty"`
|
||||
} `json:"front_door,omitempty"`
|
||||
Main struct {
|
||||
Latitude float64 `json:"latitude,omitempty"`
|
||||
Longitude float64 `json:"longitude,omitempty"`
|
||||
} `json:"main,omitempty"`
|
||||
Road struct {
|
||||
Latitude float64 `json:"latitude,omitempty"`
|
||||
Longitude float64 `json:"longitude,omitempty"`
|
||||
} `json:"road,omitempty"`
|
||||
Roof struct {
|
||||
Latitude float64 `json:"latitude,omitempty"`
|
||||
Longitude float64 `json:"longitude,omitempty"`
|
||||
} `json:"roof,omitempty"`
|
||||
} `json:"geocodes,omitempty"`
|
||||
Hours struct {
|
||||
Display string `json:"display,omitempty"`
|
||||
IsLocalHoliday bool `json:"is_local_holiday,omitempty"`
|
||||
OpenNow bool `json:"open_now,omitempty"`
|
||||
Regular []struct {
|
||||
Close string `json:"close,omitempty"`
|
||||
Day int64 `json:"day,omitempty"`
|
||||
Open string `json:"open,omitempty"`
|
||||
} `json:"regular,omitempty"`
|
||||
} `json:"hours,omitempty"`
|
||||
HoursPopular []struct {
|
||||
Close string `json:"close,omitempty"`
|
||||
Day int64 `json:"day,omitempty"`
|
||||
Open string `json:"open,omitempty"`
|
||||
} `json:"hours_popular,omitempty"`
|
||||
Link string `json:"link,omitempty"`
|
||||
Location struct {
|
||||
Address string `json:"address,omitempty"`
|
||||
AddressExtended string `json:"address_extended,omitempty"`
|
||||
AdminRegion string `json:"admin_region,omitempty"`
|
||||
CensusBlock string `json:"census_block,omitempty"`
|
||||
Country string `json:"country,omitempty"`
|
||||
CrossStreet string `json:"cross_street,omitempty"`
|
||||
Dma string `json:"dma,omitempty"`
|
||||
FormattedAddress string `json:"formatted_address,omitempty"`
|
||||
Locality string `json:"locality,omitempty"`
|
||||
Neighborhood []string `json:"neighborhood,omitempty"`
|
||||
PoBox string `json:"po_box,omitempty"`
|
||||
PostTown string `json:"post_town,omitempty"`
|
||||
Region string `json:"region,omitempty"`
|
||||
} `json:"location,omitempty"`
|
||||
Photos []struct {
|
||||
Id string `json:"id,omitempty"`
|
||||
CreatedAt CustomTime `json:"created_at,omitempty"`
|
||||
Prefix string `json:"prefix,omitempty"`
|
||||
Suffix string `json:"suffix,omitempty"`
|
||||
Width int64 `json:"width,omitempty"`
|
||||
Height int64 `json:"height,omitempty"`
|
||||
Classifications []string `json:"classifications,omitempty"`
|
||||
Tip struct {
|
||||
Id string `json:"id,omitempty"`
|
||||
CreatedAt string `json:"created_at,omitempty"`
|
||||
Text string `json:"text,omitempty"`
|
||||
Url string `json:"url,omitempty"`
|
||||
Lang string `json:"lang,omitempty"`
|
||||
AgreeCount int64 `json:"agree_count,omitempty"`
|
||||
DisagreeCount int64 `json:"disagree_count,omitempty"`
|
||||
} `json:"tip,omitempty"`
|
||||
} `json:"photos,omitempty"`
|
||||
Popularity int64 `json:"popularity,omitempty"`
|
||||
Price int64 `json:"price,omitempty"`
|
||||
Rating int64 `json:"rating,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
RelatedPlaces struct{} `json:"related_places,omitempty"`
|
||||
SocialMedia struct {
|
||||
FacebookId string `json:"facebook_id,omitempty"`
|
||||
Instagram string `json:"instagram,omitempty"`
|
||||
Twitter string `json:"twitter,omitempty"`
|
||||
} `json:"social_media,omitempty"`
|
||||
Stats struct {
|
||||
TotalPhotos int64 `json:"total_photos,omitempty"`
|
||||
TotalRatings int64 `json:"total_ratings,omitempty"`
|
||||
TotalTips int64 `json:"total_tips,omitempty"`
|
||||
} `json:"stats,omitempty"`
|
||||
StoreId string `json:"store_id,omitempty"`
|
||||
Tastes []string `json:"tastes,omitempty"`
|
||||
Tel string `json:"tel,omitempty"`
|
||||
Timezone string `json:"timezone,omitempty"`
|
||||
Tips []struct {
|
||||
Id string `json:"id,omitempty"`
|
||||
CreatedAt CustomTime `json:"created_at,omitempty"`
|
||||
Text string `json:"text,omitempty"`
|
||||
Url string `json:"url,omitempty"`
|
||||
Lang string `json:"lang,omitempty"`
|
||||
AgreeCount int64 `json:"agree_count,omitempty"`
|
||||
DisagreeCount int64 `json:"disagree_count,omitempty"`
|
||||
} `json:"tips,omitempty"`
|
||||
VenueRealityBucket string `json:"venue_reality_bucket,omitempty"`
|
||||
Verified bool `json:"verified,omitempty"`
|
||||
Website string `json:"website,omitempty"`
|
||||
} `json:"results"`
|
||||
}
|
||||
)
|
29
nearbyModel.go
Normal file
29
nearbyModel.go
Normal file
@ -0,0 +1,29 @@
|
||||
package foursquare
|
||||
|
||||
type (
|
||||
ReduceResponse struct {
|
||||
Response struct {
|
||||
Groups []ReduceGroup `json:"groups"`
|
||||
} `json:"response"`
|
||||
}
|
||||
)
|
||||
|
||||
type (
|
||||
ReduceVenue struct {
|
||||
Id string `json:"id,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
Category []Categories4sqPlaces `json:"category,omitempty"`
|
||||
Location struct {
|
||||
Distance int64 `json:"distance,omitempty"`
|
||||
} `json:"location,omitempty"`
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
type ReduceItems struct {
|
||||
Venue ReduceVenue `json:"venue,omitempty"`
|
||||
}
|
||||
|
||||
type ReduceGroup struct {
|
||||
Items []ReduceItems `json:"items,omitempty"`
|
||||
}
|
89
query.go
Normal file
89
query.go
Normal file
@ -0,0 +1,89 @@
|
||||
package foursquare
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/google/go-querystring/query"
|
||||
"io"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type Query struct {
|
||||
APIKey string
|
||||
Query string
|
||||
Categories string
|
||||
Chains string
|
||||
|
||||
}
|
||||
|
||||
/*func NewQueryForLocation(apiKey string, lat string, lon string, modifierType string, modifier string) Query {
|
||||
category := ""
|
||||
chain := ""
|
||||
|
||||
if modifierType == "chain" {
|
||||
chain = modifier
|
||||
}
|
||||
|
||||
if modifierType == "category" {
|
||||
category = modifier
|
||||
}
|
||||
|
||||
return Query{
|
||||
APIKey: apiKey,
|
||||
Query: lat + "," + lon,
|
||||
Categories: category,
|
||||
Chains: chain,
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// go run main.go -key "fsq3ksL8PkGBLhDJ6Bydixoa9Lah6djwvm5a5LIWrtmFexc=" -ll "51.507351,-0.1277" -category "13303"
|
||||
|
||||
|
||||
func (options *Options) NewQueryForLocation() (*FoursquarePlacesv2, error) {
|
||||
|
||||
fmt.Println("Foursquare")
|
||||
|
||||
//url := "https://api.foursquare.com/v3/places/search?ll=51.507351%2C-0.127758&radius=800&categories=13303"
|
||||
|
||||
v, _ := query.Values(options)
|
||||
|
||||
fmt.Println(v.Encode())
|
||||
url := "https://api.foursquare.com/v3/places/search?" + v.Encode()
|
||||
|
||||
fmt.Println(url)
|
||||
|
||||
req, err := http.NewRequest("GET", url, nil)
|
||||
|
||||
req.Header.Add("accept", "application/json")
|
||||
req.Header.Add("Authorization",options.Key )
|
||||
|
||||
res, err := http.DefaultClient.Do(req)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Http failed")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
defer res.Body.Close()
|
||||
body, err := io.ReadAll(res.Body)
|
||||
|
||||
fmt.Println(string(body))
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("io readall failed")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
dataPtr := &FoursquarePlacesv2{}
|
||||
|
||||
err = json.Unmarshal(body, dataPtr)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Unmarshal failed")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return dataPtr, err
|
||||
|
||||
}
|
20
query_test.go
Normal file
20
query_test.go
Normal file
@ -0,0 +1,20 @@
|
||||
package foursquare
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
|
||||
func TestNewQueryForLocation(t *testing.T) {
|
||||
apiKey := "key"
|
||||
lat := "54.000"
|
||||
lon := "-4.000"
|
||||
modifierType := "chain"
|
||||
modifier := "ab4bee40"
|
||||
|
||||
q := NewQueryForLocation(apiKey, lat, lon, modifierType, modifier)
|
||||
|
||||
if q.APIKey != apiKey {
|
||||
t.Fatalf("Something broke")
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user