Я не могу заставить свою вторую задачу "GET" работать.
Это бой для начинающих учиться Swift.
Я работаю с API "thetvdb", чтобы получитьинформация о серии и перечисление.
Информация об API: https://api.thetvdb.com/swagger
Первый шаг - войти в систему и получить токен с «POST» на https://api.thetvdb.com/login.
Далее«ПОЛУЧИТЬ» идентификатор нужной серии с помощью следующей функции:
func GetSerieID(theSerieName: String){
refreshToken() //Refresh the token before anything
let theURL = "https://api.thetvdb.com/search/series?name=" + theSerieName
let url = URL(string: theURL.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.setValue( "Bearer \(token)", forHTTPHeaderField: "Authorization") // the refreshed token
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
if let data = data{
// I use SwiftyJSON.swift to manage the JSON's
let json = try? JSON(data: data)
theJSONContent = json!["data"]
// Manage the theJSONContent to get the ID
}
if let httpResponse = response as? HTTPURLResponse {
print("httpResponse: " + String(httpResponse.statusCode) + " >>GetSerieID\n")
}
}
task.resume()
}
Функция GetSerieID работает по феномену, но следующая функция GetSerieData не устанавливает URLSession, она немедленно переходит к возврату!
func GetSerieData(theSerieID: String) -> JSON {
refreshToken() //Refresh the token before anything
var theJSONContent = JSON()
let theURL = "https://api.thetvdb.com/series/" + theSerieID + "/episodes"
let url = URL(string: theURL.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.setValue( "Bearer \(token)", forHTTPHeaderField: "Authorization") // the refreshed token
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
if let data = data{
// I use SwiftyJSON.swift to manage the JSON's
let json = try? JSON(data: data)
theJSONContent = json!["data"]
}
if let httpResponse = response as? HTTPURLResponse {
print("httpResponse: " + String(httpResponse.statusCode) + " >>GetSerieID\n")
}
}
task.resume()
return theJSONContent
}
Следующий запрос:
Printing description of request:
▿ https://api.thetvdb.com/series/300472/episodes
▿ url : Optional<URL>
▿ some : https://api.thetvdb.com/series/300472/episodes
- cachePolicy : 0
- timeoutInterval : 60.0
- mainDocumentURL : nil
- networkServiceType : __ObjC.NSURLRequest.NetworkServiceType
- allowsCellularAccess : true
▿ httpMethod : Optional<String>
- some : "GET"
▿ allHTTPHeaderFields : Optional<Dictionary<String, String>>
▿ some : 3 elements
▿ 0 : 2 elements
- key : "Accept"
- value : "application/json"
▿ 1 : 2 elements
- key : "Content-Type"
- value : "application/json"
▿ 2 : 2 elements
- key : "Authorization"
- value : "Bearer eyJhbGciOiJSUzI1NiIsInR5tokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentoken"
- httpBody : nil
- httpBodyStream : nil
- httpShouldHandleCookies : true
- httpShouldUsePipelining : false
Обе функции для "GET" практически одинаковы, только URL-адрес изменяется. Это, конечно, что-то простое, но я застрял.
Если я переверну их и сначала вызову GetSerieData, а затем GetSerieID, то снова будет работать первый, но не второй.
ЭтоПонятно, что это проблема установления первого соединения с GET, которое не завершает сеанс или что-то еще, но я не могу найти, как с этим справиться. В какой-то версии кода я добавил «DELETE» только для того, чтобы попробовать, но он тоже не сработал.
Может кто-нибудь показать мне немного света?
С уважением