在 Foursquare“Das-Quadrat”iOS API 包装器中使用 categoryId 作为搜索过滤器

Posted

技术标签:

【中文标题】在 Foursquare“Das-Quadrat”iOS API 包装器中使用 categoryId 作为搜索过滤器【英文标题】:Using categoryId as a search filter in Foursquare "Das-Quadrat" iOS API wrapper 【发布时间】:2015-07-29 18:05:28 【问题描述】:

我正在为 ios 编写一个应用程序,在其中我正在搜索具有特定 categoryId 的场所,而不是搜索查询。我的应用程序不需要用户登录,因此我使用名为 das-quadrat 的第三方 API Wrapper 来跳过与用户进行 OAuth 的麻烦。 我正在关注页面底部的搜索请求示例。

此外,这是他们在演示项目 (ExploreViewController.swift) 中实现功能的方式:

func exploreVenues() 

    let location = self.locationManager.location
    var parameters = location.parameters()
    let task = self.session.venues.explore(parameters) 
        (result) -> Void in
        if self.venueItems != nil 
            return
        
        if !NSThread.isMainThread() 
            fatalError("!!!")
        

        if result.response != nil 
            if let groups = result.response!["groups"] as? [[String: AnyObject]]  
                var venues = [[String: AnyObject]]()
                for group in groups 
                    if let items = group["items"] as? [[String: AnyObject]] 
                        venues += items
                    
                

                self.venueItems = venues
            
            self.tableView.reloadData()
         else if result.error != nil && !result.isCancelled() 
            self.showErrorAlert(result.error!)
        
    
    task.start()

在我自己的代码中,我有一个包含一些相关 categoryId 的数组,我想为它们中的每一个执行搜索任务。在这里,我尝试搜索 categoryIds,然后将场地名称和与用户的距离存储在字典中(使用 SwiftyJSON - 我会链接,但我还没有足够的声誉)以从 JSON 中获取元素:

var venues: [JSONParameters]!
var distance: [JSONParameters]!
var session : Session!

let tagData = TagData() 
/* 
TagData contains a dictionary with relevant categoryIDs and the number 
of times the user has visited that venue.
*/

var categoryTagSearch: [String] = TagData.returnRelevantCategories()

var venueNamesDictionary: [String: Int] = [:] //name : distance from user

func findVenues(callback: [String: Int] -> Void)  

    for tag in categoryTagSearch 

        let searchTask = session.venues.search(tag) 
            (result) -> Void in

            if let response = result.response  //trying to create keys of names with values of distances
                let count: Int? = response["venues"].array?.count
                let venueName: [String] = response["venues"]["name"].arrayValue
                let distanceValue: [Int] = response["venues"]["location"]["distance"].arrayValue

                for (i = 0; i < count; i++) 
                    venueNamesDictionary[venueName[i]] = distanceValue[i]
                        
            
         // end searchtask assignment

        callback(searchTask.start()) //to force this to wait for responses to finish filling Dictionary

    // end for

// end Function

问题是搜索 categoryId 很少返回搜索结果;这类似于将“4bf58dd8d48988d1c8941735”放在 Foursquare 的搜索栏中,这将不会返回正确类别的场所或任何内容。 如何确保我的搜索只返回正确类别的场所?有没有我忽略的功能?

【问题讨论】:

【参考方案1】:

您真的指定类别吗?要指定类别,请执行以下操作。

var parameters = [Parameter.categoryId:"4bf58dd8d48988d1c8941735"]
currentTask = session.venues.search(parameters) 

【讨论】:

以上是关于在 Foursquare“Das-Quadrat”iOS API 包装器中使用 categoryId 作为搜索过滤器的主要内容,如果未能解决你的问题,请参考以下文章

应用程序展示从foursquare网站消失

Foursquare 场地搜索 API:如何找到最近的场地?

Instagram 找不到在 Facebook 或 Foursquare 上创建的位置

Foursquare 签到通过本机应用程序没有帐户

Oauth - Facebook/Twitter/Foursquare

在 Foursquare 的 Lists API 上使用 RKDynamicMapping 来捕获列表