Использование categoryId в качестве фильтра поиска в обёртке API Foursquare Das-Quadrat для iOS

Я пишу приложение для iOS, в котором я ищу места с определенным categoryId, а не поисковый запрос. Мое приложение не требует от пользователей входа в систему, поэтому я использую стороннюю оболочку API под названием das- quadrat, чтобы избежать хлопот 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()
}

В моем собственном коде у меня есть массив некоторых релевантных идентификаторов категорий, и я хочу выполнить задачу поиска для каждого из них. Здесь я пытаюсь найти идентификаторы категорий, а затем сохраняю название места и расстояние от пользователя в словаре (используя 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, которая либо не выдаст места нужной категории, либо вообще ничего. Как убедиться, что мой поиск возвращает только места проведения правильной категории? Есть ли какая-то функция, которую я не замечаю?


person s_khillon    schedule 29.07.2015    source источник


Ответы (1)


Вы действительно указываете категорию? Чтобы указать категорию, выполните следующие действия.

var parameters = [Parameter.categoryId:"4bf58dd8d48988d1c8941735"]
currentTask = session.venues.search(parameters) {
person Kosuke Ogawa    schedule 31.07.2015