Сократите URL с помощью API Google, AFNetworking в Swift
В документации Google ( https://developers.google.com/url-shortener/v1/getting_started), чтобы использовать сокращение URL Google, я должен сделать запрос, как показано ниже:
POST https://www.googleapis.com/urlshortener/v1/url
Тип контента: приложение / JSON
{"longUrl": " http://www.google.com/"}
Они также заявили, что мне придется подтвердить подлинность:
"Каждый запрос, который ваше приложение отправляет в Google URL Shortener API, должен идентифицировать ваше приложение в Google. Существует два способа идентифицировать ваше приложение: с помощью токена OAuth 2.0 (который также авторизует запрос) и / или с помощью ключа API приложения."
Я выбрал открытый ключ API в качестве метода аутентификации: я создаю открытый ключ для своего приложения iOS. Затем я использую следующий код для POST (AFNetworking, используя Swift):
func getShortURL(longURL: String){
let manager = AFHTTPRequestOperationManager()
let params = [
"longUrl": longURL
]
manager.POST("https://www.googleapis.com/urlshortener/v1/url?key={my_key_inserted}", parameters: params, success: {
(operation: AFHTTPRequestOperation!,responseObject: AnyObject!) in
println("JSON: " + responseObject.description)
},
failure: { (operation: AFHTTPRequestOperation!,error: NSError!) in
println("Error while requesting shortened: " + error.localizedDescription)
})
}
Тем не менее, я получил журнал: Ошибка при запросе сокращен: Запрос не выполнен: неправильный запрос (400).
Подскажите пожалуйста как это исправить.
1 ответ
Чего вам не хватает, так это установки правильного сериализатора AFNetworking для этого запроса.
Поскольку ответ Google в формате JSON, вы должны использовать AFJSONRequestSerializer
,
добавлять manager.requestSerializer = AFJSONRequestSerializer()
как это:
let manager = AFHTTPRequestOperationManager()
manager.requestSerializer = AFJSONRequestSerializer()
let params = ["longUrl": "MYURL"]
manager.POST("https://www.googleapis.com/urlshortener/v1/url?key=MYKEY", parameters: params, success: {(operation: AFHTTPRequestOperation!,responseObject: AnyObject!) in
println("JSON: " + responseObject.description)
}, failure: { (operation: AFHTTPRequestOperation!,error: NSError!) in
println("Error while requesting shortened: " + error.localizedDescription)
})