Я использую этот БЕСПЛАТНЫЙ API NBA для технического тестирования. Загрузка команд прошла легко и просто. Проблема в том, что мне нужно было отобразить всех игроков конкретной команды. Команда не возвращает игроков, а только информацию о команде:
"data":[
0:{
"id":1
"abbreviation":"ATL"
"city":"Atlanta"
"conference":"East"
"division":"Southeast"
"full_name":"Atlanta Hawks"
"name":"Hawks"
}
1:{...}
2:{...}
]
Поэтому мне нужно получить всех игроков, которые возвращаются на нескольких страницах (примерно 35) с максимальным количеством 100 результатов. Я придумал этот код, который работает, но иногда это занимает больше времени, и я хотел бы попробовать что-нибудь еще.
func loadPlayers(team:Team, pages: Int?, completion: @escaping (_ error:Error?, _ players:[Player]) -> ()){
var players = [Player]()
let rest = RestManager()
for (key, value) in headers {
rest.requestHttpHeaders.add(value: value, forKey: key)
}
//loop thought the API pages this is o(n) but the API is really badly designed as teams doesen't have an array with the players
for page in 1..
rest.makeRequest(withEndPoint: "players?per_page=100&page=\(page)", withHttpMethod: .get) { (result) in
guard let response = result.response else {return}
if response.httpStatusCode == 200 {
guard let data = result.data else {return}
print(data.printJSON())
let decoder = JSONDecoder()
guard let playerResult = try? decoder.decode(PlayerData.self, from: data) else { return }
for player in playerResult.data {
DispatchQueue.main.async {
if player.team?.abbreviation == team.abbreviation {
players.append(player)
}
}
}
}else{
guard let error = result.error else {return}
completion(error, [])
}
completion(nil, players)
}
}
}
это моя модель данных:
struct PlayerData : Decodable {
var data:[Player]
var meta:MetaDataPlayer
}
struct Player : Decodable {
var id:Int?
var first_name:String?
var last_name:String?
var height_feet:Int?
var height_inches:Int?
var weight_pounds:Int?
var position:String?
var team:Team?
}
struct MetaDataPlayer : Decodable {
var total_pages:Int? // needed to loop through all pages of the API
var current_page:Int?
var next_page:Int?
var per_page:Int?
var total_count:Int?
}
Подробнее здесь: https://stackoverflow.com/questions/661 ... wn-loading
Многостраничный API замедляет загрузку ⇐ IOS
Программируем под IOS
1737399198
Anonymous
Я использую этот БЕСПЛАТНЫЙ API NBA для технического тестирования. Загрузка команд прошла легко и просто. Проблема в том, что мне нужно было отобразить всех игроков конкретной команды. Команда не возвращает игроков, а только информацию о команде:
"data":[
0:{
"id":1
"abbreviation":"ATL"
"city":"Atlanta"
"conference":"East"
"division":"Southeast"
"full_name":"Atlanta Hawks"
"name":"Hawks"
}
1:{...}
2:{...}
]
Поэтому мне нужно получить всех игроков, которые возвращаются на нескольких страницах (примерно 35) с максимальным количеством 100 результатов. Я придумал этот код, который работает, но иногда это занимает больше времени, и я хотел бы попробовать что-нибудь еще.
func loadPlayers(team:Team, pages: Int?, completion: @escaping (_ error:Error?, _ players:[Player]) -> ()){
var players = [Player]()
let rest = RestManager()
for (key, value) in headers {
rest.requestHttpHeaders.add(value: value, forKey: key)
}
//loop thought the API pages this is o(n) but the API is really badly designed as teams doesen't have an array with the players
for page in 1..
rest.makeRequest(withEndPoint: "players?per_page=100&page=\(page)", withHttpMethod: .get) { (result) in
guard let response = result.response else {return}
if response.httpStatusCode == 200 {
guard let data = result.data else {return}
print(data.printJSON())
let decoder = JSONDecoder()
guard let playerResult = try? decoder.decode(PlayerData.self, from: data) else { return }
for player in playerResult.data {
DispatchQueue.main.async {
if player.team?.abbreviation == team.abbreviation {
players.append(player)
}
}
}
}else{
guard let error = result.error else {return}
completion(error, [])
}
completion(nil, players)
}
}
}
это моя модель данных:
struct PlayerData : Decodable {
var data:[Player]
var meta:MetaDataPlayer
}
struct Player : Decodable {
var id:Int?
var first_name:String?
var last_name:String?
var height_feet:Int?
var height_inches:Int?
var weight_pounds:Int?
var position:String?
var team:Team?
}
struct MetaDataPlayer : Decodable {
var total_pages:Int? // needed to loop through all pages of the API
var current_page:Int?
var next_page:Int?
var per_page:Int?
var total_count:Int?
}
Подробнее здесь: [url]https://stackoverflow.com/questions/66122415/multi-pages-api-slows-down-loading[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия