这个 Swift 封装涵盖了 Yelp Fusion API 所有可能的网络端点和响应。
要演示 CDYelpFusionKit 的功能;克隆存储库后,运行 iOS 示例项目。
特性
- 认证
- API 端点
- 搜索
- 电话搜索
- 交易搜索
- 业务
- 业务匹配
- 评论
- 自动完成
- 事件查找
- 事件搜索
- 特色活动
- 所有分类
- 分类详情
- 深度链接
- 网络链接
- 品牌资产
- 颜色
- 徽标
- 平台支持
- iOS
- macOS
- tvOS
- watchOS
- 文档
要求
- iOS 10.0+ / macOS 10.12+ / tvOS 10.0+ / watchOS 3.0+
- Swift 5.3+
- Yelp API 访问
依赖
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。有关使用和安装说明,请访问他们的网站。要使用 CocoaPods 将 CDYelpFusionKit 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它。
pod 'CDYelpFusionKit', '3.2.0'
Carthage
Carthage 是一个去中心化的依赖管理器,它构建您的依赖项并为您提供二进制框架。要使用 Carthage 将 CDYelpFusionKit 集成到您的 Xcode 项目中,请在您的 Cartfile
中指定它。
github "chrisdhaan/CDYelpFusionKit" == 3.2.0
Swift Package Manager
Swift Package Manager 是一个自动化 Swift 代码分发的工具,它是集成到 swift
编译器中的。
一旦您设置了 Swift 包,将 CDYelpFusionKit 添加为依赖项就像将它添加到您的 Package.swift
中的 dependencies
值一样简单。
dependencies: [
.package(url: "https://github.com/chrisdhaan/CDYelpFusionKit.git", .upToNextMajor(from: "3.2.0"))
]
Git 子模块
如果您不愿意使用上述任何依赖管理器,您可以手动将 CDYelpFusionKit 集成到项目中。
- 打开终端,
cd
到您的顶级项目目录,并运行以下命令(如果您的项目尚未作为 git 仓库初始化)
$ git init
- 通过运行以下命令将 CDYelpFusionKit 添加为 git 子模块
git submodule add https://github.com/chrisdhaan/CDYelpFusionKit.git
-
打开新的
CDYelpFusionKit
文件夹,并将CDYelpFusionKit.xcodeproj
拖到您的应用 Xcode 项目的 Project Navigator 中。它应出现在您的应用程序蓝色项目图标下面。它是在所有其他Xcode组之上还是之下并不重要。
-
在项目导航器中选择《CDYelpFusionKit.xcodeproj》,并验证部署目标是否与应用程序目标一致。
-
接下来,在项目导航器中选择您的应用程序项目(蓝色项目图标),以导航到目标配置窗口,并在侧边栏的“目标”标题下选择应用程序目标。
-
在窗口顶部的选项卡栏中,打开“常规”面板。
-
在“已嵌入的二进制文件”部分下点击“+”按钮。
-
您将看到两个不同的《CDYelpFusionKit.xcodeproj》文件夹,每个文件夹内都有一个不同的《CDYelpFusionKit.framework》版本,都嵌套在《Products》文件夹中。
您选择哪个《Products》文件夹都无所谓,但您选择哪个《CDYelpFusionKit.framework》就很重要。
-
选择iOS的上《CDYelpFusionKit.framework》和macOS的下《CDYelpFusionKit.framework》。
您可以通过检查您的项目构建日志来验证您选择了哪个。构建目标《CDYelpFusionKit》将列出为《CDYelpFusionKit iOS》、《CDYelpFusionKit macOS》、《CDYelpFusionKit tvOS》或《CDYelpFusionKit watchOS》。
-
就这样!
《CDYelpFusionKit.framework》将自动作为目标依赖项,链接框架和嵌入框架添加到复制文件构建阶段中,这就是您在模拟器和设备上构建所需要的一切。
贡献
在向CDYelpFusionKit贡献之前,请阅读我们贡献指南中的详细说明。
使用方法
初始化
let yelpAPIClient = CDYelpAPIClient(apiKey: "YOUR_API_KEY")
一旦创建了CDYelpAPIClient对象,您就可以使用它通过以下任一方法查询Yelp Fusion API。
- 参数中带有《// Optional》的可以取nil值。
- 参数中带有《// Required》的,在传递nil值时会抛出异常。
搜索端点
public func searchBusinesses(byTerm term: String?, // Optional
location: String?, // Optional
latitude: Double?, // Optional
longitude: Double?, // Optional
radius: Int?, // Optional - Max = 40000
categories: [CDYelpCategoryAlias]?, // Optional
locale: CDYelpLocale?, // Optional
limit: Int?, // Optional - Default = 20, Max = 50
offset: Int?, // Optional
sortBy: CDYelpBusinessSortType?, // Optional - Default = .bestMatch
priceTiers: [CDYelpPriceTier]?, // Optional
openNow: Bool?, // Optional - Default = false
openAt: Int?, // Optional
attributes: [CDYelpAttributeFilter]?, // Optional
completion: @escaping (CDYelpSearchResponse.Business?) -> Void);
搜索端点有一个categories
参数,允许多种类别的查询结果返回,具体有一千四百六十一种类别。完整类别列表可以在CDYelpEnums.swift
中找到。以下代码段展示了可以传递到categories
参数中的一个示例类别。
CDYelpCategoryAlias.activeLife
搜索端点有一个locale
参数,允许多种语言和国家代码的查询结果返回。以下代码段展示了可以传递到locale
参数中的各个区域。
CDYelpLocale.chinese_hongKong
CDYelpLocale.chinese_taiwan
CDYelpLocale.czech_czechRepublic
CDYelpLocale.danish_denmark
CDYelpLocale.dutch_belgium
CDYelpLocale.dutch_theNetherlands
CDYelpLocale.english_australia
CDYelpLocale.english_belgium
CDYelpLocale.english_canada
CDYelpLocale.english_hongKong
CDYelpLocale.english_malaysia
CDYelpLocale.english_newZealand
CDYelpLocale.english_philippines
CDYelpLocale.english_republicOfIreland
CDYelpLocale.english_singapore
CDYelpLocale.english_switzerland
CDYelpLocale.english_unitedKingdom
CDYelpLocale.english_unitedStates
CDYelpLocale.filipino_philippines
CDYelpLocale.finnish_finland
CDYelpLocale.french_belgium
CDYelpLocale.french_canada
CDYelpLocale.french_france
CDYelpLocale.french_switzerland
CDYelpLocale.german_austria
CDYelpLocale.german_germany
CDYelpLocale.german_switzerland
CDYelpLocale.italian_italy
CDYelpLocale.italian_switzerland
CDYelpLocale.japanese_japan
CDYelpLocale.malay_malaysia
CDYelpLocale.norwegian_norway
CDYelpLocale.polish_poland
CDYelpLocale.portuguese_brazil
CDYelpLocale.portuguese_portugal
CDYelpLocale.spanish_argentina
CDYelpLocale.spanish_chile
CDYelpLocale.spanish_mexico
CDYelpLocale.spanish_spain
CDYelpLocale.swedish_finland
CDYelpLocale.swedish_sweden
CDYelpLocale.turkish_turkey
搜索端点有一个sortBy
参数,允许根据四种不同的标准对查询结果进行筛选。以下代码段展示了可以传递到sortBy
参数中的各种排序类型。
CDYelpBusinessSortType.bestMatch // Default
CDYelpBusinessSortType.rating
CDYelpBusinessSortType.reviewCount
CDYelpBusinessSortType.distance
搜索端点有一个price
参数,允许根据四种标准筛选查询结果。以下代码段展示了可以传递到priceTiers
参数中的各种价格级别。
CDYelpPriceTier.oneDollarSign
CDYelpPriceTier.twoDollarSigns
CDYelpPriceTier.threeDollarSigns
CDYelpPriceTier.fourDollarSigns
搜索端点有一个attributes
参数,允许根据五种标准筛选查询结果。以下代码段展示了可以传递到attributes
参数中的各种属性。
CDYelpAttributeFilter.hotAndNew
CDYelpAttributeFilter.requestAQuote
CDYelpAttributeFilter.reservation
CDYelpAttributeFilter.waitlistReservation
CDYelpAttributeFilter.deals
CDYelpAttributeFilter.genderNeutralRestrooms
CDYelpAttributeFilter.openToAll
CDYelpAttributeFilter.wheelchairAccessible
以下代码段展示了调用搜索端点的示例查询。
// Cancel any API requests previously made
yelpAPIClient.cancelAllPendingAPIRequests()
// Query Yelp Fusion API for business results
yelpAPIClient.searchBusinesses(byTerm: "Food",
location: "San Francisco",
latitude: nil,
longitude: nil,
radius: 10000,
categories: [.activeLife, .food],
locale: .english_unitedStates,
limit: 5,
offset: 0,
sortBy: .rating,
priceTiers: [.oneDollarSign, .twoDollarSigns],
openNow: true,
openAt: nil,
attributes: nil) { (response) in
if let response = response,
let businesses = response.businesses,
businesses.count > 0 {
print(businesses)
}
}
电话搜索端点
public func searchBusinesses(byPhoneNumber phoneNumber: String!, // Required
completion: @escaping (CDYelpSearchResponse.Phone?) -> Void)
以下代码段展示了调用电话搜索端点的示例查询。
yelpAPIClient.searchBusinesses(byPhoneNumber: "+14157492060") { (response) in
if let response = response,
let businesses = response.businesses,
businesses.count > 0 {
print(businesses)
}
}
交易搜索端点
public func searchTransactions(byType type: CDYelpTransactionType!, // Required
location: String?, // Optional
latitude: Double?, // Optional
longitude: Double?, // Optional
completion: @escaping (CDYelpSearchResponse.Transaction?) -> Void)
交易搜索端点有一个type
参数,允许根据一种标准筛选查询结果。以下代码段展示了可以传递到byType
参数中的各种交易类型。
CDYelpTransactionType.foodDelivery
以下代码段展示了调用交易搜索端点的示例查询。
yelpAPIClient.searchTransactions(byType: .foodDelivery,
location: "San Francisco",
latitude: nil,
longitude: nil) { (response) in
if let response = response,
let businesses = response.businesses,
businesses.count > 0 {
print(businesses)
}
}
商业端点
public func fetchBusiness(forId id: String!, // Required
locale: CDYelpLocale?, // Optional
completion: @escaping (CDYelpBusinessResponse?) -> Void)
以下代码段展示了调用商业端点的示例查询。
yelpAPIClient.fetchBusiness(forId: "north-india-restaurant-san-francisco"
locale: nil) { (business) in
if let response = response,
let business = response.business {
print(business)
}
}
业务匹配端点
public func searchBusinesses(name: String!, // Required - Max length = 64
addressOne: String?, // Optional - Max length = 64
addressTwo: String?, // Optional - Max length = 64
addressThree: String?, // Optional - Max length = 64
city: String!, // Required - Max length = 64
state: String!, // Required - Max length = 3
country: String!, // Required - Max length = 2
latitude: Double?, // Optional - Min = -90, Max = +90
longitude: Double?, // Optional - Min = -180, Max = +180
phone: String?, // Optional - Max length = 32
zipCode: String?, // Optional
yelpBusinessId: String?, // Optional
limit: Int?, // Optional - Min = 1, Default = 3, Max = 10
matchThresholdType: CDYelpBusinessMatchThresholdType, // Required
completion: @escaping (CDYelpSearchResponse.BusinessMatch?) -> Void)
业务匹配端点有一个matchThresholdType
参数,允许根据三种类型的标准过滤查询结果。以下代码行显示了哪些业务匹配阈值类型可以传递给matchThresholdType
参数。
CDYelpBusinessMatchThresholdType.none
CDYelpBusinessMatchThresholdType.normal
CDYelpBusinessMatchThresholdType.strict
以下代码行显示了对业务匹配端点的一个示例查询。
yelpAPIClient.searchBusinesses(name: "Gary Danko",
addressOne: "800 N Point St",
addressTwo: nil,
addressThree: nil,
city: "San Francisco",
state: "CA",
country: "US",
latitude: nil,
longitude: nil,
phone: nil,
zipCode: nil,
yelpBusinessId: nil,
limit: 5,
matchThresholdType: .normal) { (response) in
if let response = response,
let businesses = response.businesses,
businesses.count > 0 {
print(businesses)
}
}
评论端点
public func fetchReviews(forBusinessId id: String!, // Required
locale: CDYelpLocale?, // Optional
completion: @escaping (CDYelpReviewsResponse?) -> Void)
评论端点有一个locale
参数,允许根据42种语言和国家/地区代码返回查询结果。有关使用locale
参数的信息,请参阅搜索端点。
以下代码行显示了对评论端点的一个示例查询。
yelpAPIClient.fetchReviews(forBusinessId: "north-india-restaurant-san-francisco",
locale: nil) { (reviews) in
if let response = response,
let reviews = response.reviews,
reviews.count > 0 {
print(reviews)
}
}
自动完成端点
public func autocompleteBusinesses(byText text: String!, // Required
latitude: Double!, // Required
longitude: Double!, // Required
locale: CDYelpLocale?, // Optional
completion: @escaping (CDYelpAutoCompleteResponse?) -> Void)
自动完成端点有一个locale
参数,允许基于42种语言和国家/地区代码返回查询结果。有关使用locale
参数的信息,请参阅搜索端点。
以下代码行显示了对自动完成端点的一个示例查询。
yelpAPIClient.autocompleteBusinesses(byText: "Pizza Delivery",
latitude: 37.786572,
longitude: -122.415192,
locale: nil) { (response) in
if let response = response,
let businesses = response.businesses,
businesses.count > 0 {
print(businesses)
}
}
事件查找端点
public func fetchEvent(forId id: String!, // Required
locale: CDYelpLocale?, // Optional
completion: @escaping (CDYelpEventResponse?) -> Void)
事件查找端点有一个locale
参数,允许根据42种语言和国家/地区代码返回查询结果。有关使用locale
参数的信息,请参阅搜索端点。
以下代码行显示了对事件查找端点的一个示例查询。
yelpAPIClient.fetchEvent(forId: "san-francisco-yelp-celebrates-pride-month-2021",
locale: nil) { (event) in
if let response = response,
event = response.event {
print(event)
}
}
事件搜索接口
public func searchEvents(byLocale locale: CDYelpLocale?, // Optional
offset: Int?, // Optional
limit: Int?, // Optional - Default = 3, Max = 50
sortBy: CDYelpEventSortByType?, // Optional - Default = .descending
sortOn: CDYelpEventSortOnType?, // Optional - Default = .popularity
startDate: Date?, // Optional
endDate: Date?, // Optional
categories: [CDYelpEventCategoryFilter]?, // Optional
isFree: Bool?, // Optional - Default = false
location: String?, // Optional
latitude: Double?, // Optional
longitude: Double?, // Optional
radius: Int?, // Optional - Max = 40000
excludedEvents: [String]?, // Optional
completion: @escaping (CDYelpEventsResponse?) -> Void)
事件搜索接口拥有一个 locale
参数,允许根据42种语言和国家代码返回查询结果。有关使用 locale
参数的信息,请参阅搜索接口。
事件搜索接口有一个 sortBy
参数,允许根据两种准则过滤查询结果。以下代码行显示了可以传递到 sortBy
参数中的排序类型。
CDYelpEventSortByType.ascending
CDYelpEventSortByType.descending // Default
事件搜索接口有一个 sortOn
参数,允许根据两种准则过滤查询结果。以下代码行显示了可以传递到 sortBy
参数中的排序类型。
CDYelpEventSortOnType.popularity // Default
CDYelpEventSortOnType.timeStart
事件搜索接口有一个 categories
参数,允许根据13种类别类型返回查询结果。以下代码行显示了可以传递到 categories
参数中的类别类型。
CDYelpEventCategoryFilter.charities
CDYelpEventCategoryFilter.fashion
CDYelpEventCategoryFilter.festivalsAndFairs
CDYelpEventCategoryFilter.film
CDYelpEventCategoryFilter.foodAndDrink
CDYelpEventCategoryFilter.kidsAndFamily
CDYelpEventCategoryFilter.lecturesAndBooks
CDYelpEventCategoryFilter.music
CDYelpEventCategoryFilter.nightlife
CDYelpEventCategoryFilter.other
CDYelpEventCategoryFilter.performingArts
CDYelpEventCategoryFilter.sportsAndActiveLife
CDYelpEventCategoryFilter.visualArts
以下代码行显示了向事件搜索接口发送的示例查询。
yelpAPIClient.searchEvents(byLocale: nil,
offset: nil,
limit: 5,
sortBy: .descending,
sortOn: .popularity,
startDate: nil,
endDate: nil,
categories: [.music, .foodAndDrink],
isFree: false,
location: nil,
latitude: 37.786572,
longitude: -122.415192,
radius: 10000,
excludedEvents: nil) { (response) in
if let response = response,
let events = response.events,
events.count > 0 {
print(events)
}
}
特色事件接口
public func fetchFeaturedEvent(forLocale locale: CDYelpLocale?, // Optional
location: String?, // Optional
latitude: Double?, // Optional
longitude: Double?, // Optional
completion: @escaping (CDYelpEventResponse?) -> Void)
特色事件接口有一个 locale
参数,允许根据42种语言和国家代码返回查询结果。有关使用 locale
参数的信息,请参阅搜索接口。
以下代码行显示了向特色事件接口发送的示例查询。
yelpAPIClient.fetchFeaturedEvent(forLocale: nil,
location: nil,
latitude: 37.786572,
longitude: -122.415192) { (event) in
if let response = response,
event = response.event {
print(event)
}
}
所有类别接口
public func fetchCategories(forLocale locale: CDYelpLocale?, // Optional
completion: @escaping (CDYelpCategoriesResponse?) -> Void)
所有类别接口有一个 locale
参数,允许根据42种语言和国家代码返回查询结果。有关使用 locale
参数的信息,请参阅搜索接口。
以下代码行显示了向特色事件接口发送的示例查询。
yelpAPIClient.fetchCategories(forLocale: nil) { (response) in
if let response = response,
let categories = response.categories {
print(categories)
}
}
类别详情接口
public func fetchCategory(forAlias alias: CDYelpCategoryAlias!, // Required
andLocale locale: CDYelpLocale?, // Optional
completion: @escaping (CDYelpCategoryResponse?) -> Void)
分类详情端点有一个alias
参数,该参数允许根据一千四百六十一种分类类型返回查询结果。完整分类列表可在CDYelpEnums.swift
中找到。以下代码示例显示了可以将它作为参数传递给alias
的某个分类。
CDYelpCategoryAlias.activeLife
分类详情端点有一个locale
参数,允许根据四十二种语言和国家代码返回查询结果。有关使用locale
参数的信息,请参阅搜索端点。
以下代码行显示了向特色事件接口发送的示例查询。
yelpAPIClient.fetchCategory(forAlias: .fastFood,
andLocale: nil) { (response) in
if let response = response,
let category = response.category {
print(category)
}
}
深度链接
Yelp iPhone应用注册了可以用于打开Yelp应用、执行搜索、查看企业信息或检查进入的应用程序URL方案。
static func yelpDeepLink() -> URL?
以下代码示例显示如何检查Yelp应用程序是否已安装,然后打开它。
if let url = URL.yelpDeepLink(),
UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url,
options: [:],
completionHandler: nil)
}
搜索
static func yelpSearchDeepLink(withTerm term: String?, // Optional
category: CDYelpCategoryAlias?, // Optional
location: String?) -> URL? // Optional
搜索深度链接有一个category
参数,允许根据一千四百六十一种分类类型返回查询结果。有关使用category
参数的信息,请参阅搜索端点。
以下代码示例显示了针对搜索深度链接的一个查询示例。
if let url = URL.yelpSearchDeepLink(withTerm: "burrito",
category: .food,
location: "San Francisco, CA"),
UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url,
options: [:],
completionHandler: nil)
}
企业
static func yelpBusinessDeepLink(forId id: String!) -> URL? // Required
以下代码示例显示了针对企业深度链接的一个查询示例。
if let url = URL.yelpBusinessDeepLink(forId: "the-sentinel-san-francisco"),
UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url,
options: [:],
completionHandler: nil)
}
附近签到
static func yelpCheckInNearbyDeepLink() -> URL?
以下代码示例显示了对附近签到深度链接的一个查询示例。
if let url = URL.yelpCheckInNearbyDeepLink(),
UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url,
options: [:],
completionHandler: nil)
}
Check-Ins
static func yelpCheckInsDeepLink() -> URL?
以下代码行展示了如何使用对签到深链接的示例查询。
if let url = URL.yelpCheckInsDeepLink(),
UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url,
options: [:],
completionHandler: nil)
}
签到排名
static func yelpCheckInRankingsDeepLink() -> URL?
以下代码行展示了如何对签到排名深链接进行示例查询。
if let url = URL.yelpCheckInRankingsDeepLink(),
UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url,
options: [:],
completionHandler: nil)
}
网页链接
Yelp网站注册了可以用来打开Yelp网站、执行搜索或查看企业信息的URL方案。
static func yelpWebLink() -> URL?
以下代码示例展示了如何打开Yelp网站。
if let url = URL.yelpWebLink(),
UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url,
options: [:],
completionHandler: nil)
}
搜索
static func yelpSearchWebLink(withTerm term: String?, // Optional
category: CDYelpCategoryAlias?, // Optional
location: String?) -> URL? // Optional
搜索深度链接有一个category
参数,允许根据一千四百六十一种分类类型返回查询结果。有关使用category
参数的信息,请参阅搜索端点。
以下代码示例展示了如何对搜索网页链接进行查询。
if let url = URL.yelpSearchWebLink(withTerm: "burrito",
category: .food,
location: "San Francisco, CA"),
UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url,
options: [:],
completionHandler: nil)
}
企业
static func yelpBusinessWebLink(forId id: String!) -> URL? // Required
以下代码示例展示了如何对企业网页链接进行查询。
if let url = URL.yelpBusinessWebLink(forId: "the-sentinel-san-francisco"),
UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url,
options: [:],
completionHandler: nil)
}
品牌元素
《Yelp 品牌指南》旨在实现一致性并确保 Yelp 的品牌元素在各种应用中得到正确使用。
颜色
class func yelpFiveStarRed() -> UIColor
以下代码示例展示了如何使用品牌颜色。
cell.textLabel?.textColor = UIColor.yelpFiveStarRed()
Logo
class func yelpLogo() -> UIImage?
class func yelpLogoOutline() -> UIImage?
class func yelpBurstLogoRed() -> UIImage?
class func yelpBurstLogoWhite() -> UIImage?
以下代码示例展示了如何使用品牌 Logo 和品牌 burst Logo。
cell.imageView?.image = UIImage.yelpLogo()
cell.imageView?.image = UIImage.yelpLogoOutline()
cell.imageView?.image = UIImage.yelpBurstLogoRed()
cell.imageView?.image = UIImage.yelpBurstLogoWhite()
星星
class func yelpStars(numberOfStars: CDYelpStars!,
forSize size: CDYelpStarsSize!) -> UIImage?
星星图片有一个 numberOfStars
参数,用于定义返回图片中填充星星的数量。以下代码示例展示了哪些星星数量可以传递给 numberOfStars
参数。
CDYelpStars.zero
CDYelpStars.one
CDYelpStars.oneHalf
CDYelpStars.two
CDYelpStars.twoHalf
CDYelpStars.three
CDYelpStars.threeHalf
CDYelpStars.four
CDYelpStars.fourHalf
CDYelpStars.five
星星图片有一个 forSize
参数,用于定义返回图片的大小。以下代码示例展示了哪些大小可以传递给 forSize
参数。
CDYelpStarsSize.small
CDYelpStarsSize.regular
CDYelpStarsSize.large
CDYelpStarsSize.extraLarge
以下代码示例展示了如何使用星星图片。
cell.imageView?.image = UIImage.yelpStars(numberOfStars: .twoHalf, forSize: .large)
作者
Christopher de Haan, [email protected]
资源
访问Yelp开发者门户,了解有关Yelp API的更多信息。
许可协议
CDYelpFusionKit 遵循MIT许可。更多信息请参阅LICENSE文件。