#python
Вопрос:
Этот код будет работать, если идентификатор предназначен для пользователя с меньшим количеством значков(например, ввод значения 2 для идентификатора игрока). Однако это не будет работать для игроков с большим количеством значков (например, идентификатор игрока 261) и покажет ошибку: «Ошибка типа: индексы списка должны быть целыми числами или срезами, а не str» В строке 37
import requests import json import urllib, json import time proxies = {"http": "http://176.9.75.42:3128", "http": "http://88.198.50.103:8080"} def jprint(obj): text = json.dumps(obj, sort_keys=True, indent=4) print(text) user_id = input("What is the user ID: ") URL = f"https://badges.roblox.com/v1/users/{user_id}/badges" data = [] payload = {"limit": 100, "sortOrder": "Asc"} resp = requests.get(URL, params=payload) resp.json() blob = resp.json() data.extend(blob["data"]) cursor = blob["nextPageCursor"] while cursor is not None: if cursor is None: break print("Getting ids") time.sleep(0) payload.update({"cursor": cursor}) resp = requests.get(URL, params=payload, proxies=proxies) blob = resp.json() data.extend(blob["data"]) cursor = blob["nextPageCursor"] data.append([cursor]) id_list = [each['id'] for each in data] print(id_list)
Комментарии:
1. Сделали ли вы основной шаг, распечатав полученные значения, чтобы понять, в чем вы ошибаетесь? Ты даже не сказал нам, в какой строке появляется ошибка.
data
это странная смесьblob['data']
и.[blob['nextPageCursor']]
Вы уверены, что это то, что вы имели в виду?2. @TimRoberts В строке 37 я получаю эту ошибку, я считаю, что все остальное в порядке и то, что я намеревался
3. Распечатайте свой список данных, прежде чем пытаться извлечь список идентификаторов. Вы обнаружите, что ваш список данных содержит не только диктанты. Где-то там у вас есть список вместо диктанта. Вот почему вы видите ошибку, о которой упомянули. Каждый ваш [«идентификатор»] ожидает, что каждый из них будет диктоваться. Но одно из ваших » e » является списком и, следовательно, вызывает ошибку. Вероятно, это либо проблема добавления/расширения. Может быть, в «data.append([курсор])» не должно быть курсора в квадратных скобках? Это догадка, не заглядывая глубже в ваш код.
Ответ №1:
Я запустил ваш код и изучил его более глубоко.
Ваши проблемы в том, что линия:
cursor = blob["nextPageCursor"]
устанавливает курсор на строку. Затем вы добавляете это в список данных в виде списка. Но позже вы ожидаете, что каждый элемент данных будет диктоваться, потому что вы вызываете:
id_list = [each['id'] for each in data]
Но запись в списке данных, добавленная вами для курсора, является списком, а не диктом, и не имеет ключа «идентификатор». Вы могли бы достаточно легко заглушить его, чтобы запустить, изменив:
data.append([cursor])
к чему-то вроде:
data.append({'cursor': cursor, 'id': 0})
или вы могли бы измениться:
id_list = [each['id'] for each in data]
Для:
id_list = [each.get('id') for each in data if isinstance(each, dict)]
Или вы можете переработать свою логику вокруг захвата/хранения курсора, чтобы создать более надежное решение.