如何在订单更改时提取特定的JSON集合?

2024-04-19 03:35:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图收集特定游戏中所有数字资产的数据。我正在从这个API中提取数据。URL末尾的1表示令牌_id=1。我的代码将从1循环到大约51400,并收集我需要的数据

我需要的三个特定“特征”是类名称、级别和捕获编号,但对于不同的令牌id,它们以不同的顺序出现,这意味着我不能像对令牌id=1所做的那样使用[0]、[2]、[3]。请参见下文,了解令牌id 1和令牌id 7的顺序如何变化:

https://imgur.com/a/GcAlqnA

我如何在“trait\u type”:“class\u name”下为每个令牌\u id提取值,而不管它的出现顺序如何

还有,为什么我将max_id_设置为_get=to anything>;超过40我会收到错误消息吗

import json
import requests
import csv

result = {}
max_id_to_get = 50

for token_id in range(1,max_id_to_get):
    r = requests.get('https://api.opensea.io/asset/0x5d00d312e171be5342067c09bae883f9bcb2003b/{}'.format(token_id))
    EMONA_json = r.json()
    EMONA_str = json.dumps(EMONA_json, indent=2)
    token_id = EMONA_json['token_id']
    name = EMONA_json['traits'][0]['value']
    level = EMONA_json['traits'][2]['value']
    catch_number = EMONA_json['traits'][3]['value']
    owner_address = EMONA_json['owner']['address']
    result[token_id] = {"name":name, "level":level, "catch_number":catch_number, "owner_address":owner_address}

with open('output.csv', 'w') as csvFile:
    writer = csv.writer(csvFile)
    writer.writerow(["token_id", "name", "level", "catch_number", "owner_address"])
    for id in result:
        writer.writerow([id, result[id]['name'], result[id]['level'], result[id]['catch_number'], result[id]['owner_address']])
csvFile.close()

如您所见,我的结果以不同的顺序显示,这取决于它们在JSON:https://imgur.com/a/aj2zaQK中的顺序

无论何时,我将max_id_设置为_get=41+我都会得到以下错误:

Traceback (most recent call last):
  File "C:\Users\username\EMONA1.py", line 12, in <module>
    token_id = EMONA_json['token_id']
KeyError: 'token_id'

我需要能够拉所有51000+所以这是一个主要问题,我还没有能够解决


Tags: nametokenidjsonnumberget顺序address