Как передать токен на предъявителя для вызова API Yelp с помощью URLSessoin - PullRequest
0 голосов
/ 14 октября 2018

ОБНОВЛЕНИЕ D ... Функция с чем работает!Я хотел бы включить API-интерфейс YELP в приложение, но не могу успешно передать свой токен авторизации в строке URL-адреса.Нужно ли что-то сделать, чтобы подключить URLRequest к вызову URLSessoin, а заголовок не использовать?Может быть, пары ключ-значение неверны?Следующая функция возвращает:

error =     {
        code = "TOKEN_MISSING";
        description = "An access token must be supplied in order to use this endpoint.";
    };

Я смог использовать почтальон, чтобы заставить работать вызов API yelp, но только нажав на раздел «Заголовок» на почтальоне и вставив Bearer, а затем мой ключ yelp.Я немного погуглил и нашел несколько ссылок, которые указывают, что вы можете добавить заголовок к URLSession, который, как я полагаю, будет работать так же, как и почтальон, но я не смог заставить его работать.

Я знаю, что есть некоторые github с репозиториями API yelp, но я пытаюсь не устанавливать большой набор кода, который я не понимаю, в мое приложение, когда все, что я хочу, это JSON, который я вижу, этопроходя через почтальона.Может ли кто-нибудь помочь мне понять, как я отредактировал бы код, подобный приведенному ниже примеру ниже, чтобы я мог получить Авторизацию / Носитель, которого требует yelp?

func getYelp() {
        let appSecret = "Bearer <YELP APIKEY>"
        let link = "https://api.yelp.com/v3/businesses/search?latitude=37.786882&longitude=-122.399972"
        if let url = URL(string: link) {
            // Set headers
            var request = URLRequest(url: url)
            request.setValue("Accept-Language", forHTTPHeaderField: "en-us")
            request.setValue(appSecret, forHTTPHeaderField: "Authorization")

            print("Attempting to get places around location from Yelp")
            let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
                if error != nil {
                    print(error!)
                } else {
                    if let urlContent = data {
                        do {
                            let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject // Added "as anyObject" to fix syntax error in Xcode 8 Beta 6
                            print("Printing all JSON/n/n//n--------------------------")
                            print(jsonResult)
                            print("Printing from results/n/n//n--------------------------")

                            if let description = ((jsonResult["search"] as? NSDictionary)?["context"] as? NSDictionary)?["href"] as? String {

                            } else {
                                print("JSON pull failed/n/n//n--------------------------")
                            }

                        } catch {
                            print("JSON Processing Failed/n/n//n--------------------------")
                        }

                    }
                }
            }
            task.resume()
        } else {
            resultLabel.text = "Couldn't get results from Here"
        }
    }

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Допустим, у вас есть API с "https://google.com" (это просто пример с поддельными ключами) и ключ API с" ApiKey: 92927839238293d92d98d98d92 ".

Затем вы взяли бы этоинформацию и сделайте это.

let uri = URL(string:"https://google.com")
    if let unwrappedURL = uri {
      var request = URLRequest(url: unwrappedURL)request.addValue("92927839238293d92d98d98d92", forHTTPHeaderField: "ApiKey")
let dataTask = URLSession.shared.dataTask(with: request) { (data, response, error) in
    // you should put in error handling code, too
    if let data = data {
        do {
            let json = try JSONSerialization.jsonObject(with: data, options: [])
            // HERE'S WHERE YOUR DATA IS
            print(json)
        } catch {
            print(error.localizedDescription)
        }
    }
}
dataTask.resume()
}

Пожалуйста, помните, что вы замените google.com своим GET-адресом, а заголовок APIKey - своими собственными значениями ключей API. Кроме того, это выведет весь JSON, как вPostMan. Если это работает для вас, у меня также есть ссылка на доступ к объектам JSON.

0 голосов
/ 14 октября 2018

Вы смешиваете заголовки и URL, вам нужно правильно настроить заголовки

if let url = URL(string: "https://places.cit.api.here.com/places/v1/discover/around?at=37.776169%2C-122.421267&app_id=\(app_id)&app_code=\(app_code)") {
    var request = URLRequest(url: url)
    // Set headers
    request.setValue("Accept-Language", forHTTPHeaderField: "en-us")
    request.setValue("Authorization", forHTTPHeaderField: "Bearer " + token // Token here)

    print("Attempting to get places around location")
    let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
        // ...
...