【发布时间】:2021-03-01 18:02:40
【问题描述】:
我正在编写一个调用 ethermine.org API 的 python 脚本,然后我使用 telegraf 将数据输入到 influxdb 并显示在 grafana 上。 Influxdb 和 telegraf 接受 json 格式和我工作的前两个 API pull,它们以以下格式显示数据(我用 x 代替返回的实际值):
{"time": xxx, "lastSeen": xxx, "reportedHashrate": xxx, "currentHashrate": xxx, "validShares": x, "invalidShares": 0, "staleShares": 0, "averageHashrate": x, "activeWorkers": x, "unpaid": xx, "unconfirmed": null, "coinsPerMin": xxxx, "usdPerMin": xxxx, "btcPerMin": xxxx}
然而,我试图做的第三次拉动似乎输出了一个额外的“}”字符,而且格式似乎也略有不同(而不仅仅是一个像 currentHashrate 这样的标签和一个它有一个标签说价格的值:然后 {两个标签} 几乎就像价格类别中的标签列表,我认为这可能是额外的“}”的来源。
{"topMiners": [], "minedBlocks": [{"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}], "poolStats": {"hashRate": x, "miners": x, "workers": x, "blocksPerHour": x}, "price": {"usd": xxx, "btc": xxx}}
请注意,我是 python 新手,所以在尝试使用 google 修复它时我没有成功,因为我可能以错误的方式处理它。我将上传我在电报中遇到的错误的屏幕截图,然后还会上传我尝试修复它时遇到的 python 错误的屏幕截图。还可以在下面找到我的 python 脚本代码
我认为与这些代码行有关的python错误
print(statsPool.text)
poolS=json.loads(statsPool.text)
print(f'{poolS["price"]}')
import json
import requests
# Miner - Statistics Armand
keyArmand = 'xxxxxxxxxx'
urlArmand = 'https://api.ethermine.org/miner/' + keyArmand + '/currentStats'
# Miner - Statistics Altus
keyAltus = 'xxxxxxxxxxx'
urlAltus = 'https://api.ethermine.org/miner/' + keyAltus + '/currentStats'
# PoolStats
urlPoolStats = 'https://api.ethermine.org' + '/poolStats'
#call 1
statsArmand = requests.get(urlArmand)
#call 2
statsAltus = requests.get(urlAltus)
#call 3
statsPool = requests.get(urlPoolStats)
print(json.dumps(json.loads(statsArmand.text)['data']))
print(json.dumps(json.loads(statsAltus.text)['data']))
#problem line (prints an extra '}' at the end
print(json.dumps(json.loads(statsPool.text)['data']))
#next 3 lines is what I tried to do to fix it (either need to get rid of the extra '}' at the end or I just need the price tag displayed in the correct format
print(statsPool.text)
poolS=json.loads(statsPool.text)
print(f'{poolS["price"]}')
作为总结:第三个 python json API 调用返回的格式与前两个不同,我想将第三个重新格式化为与前两个相同的格式,或者只提取以美元为单位的价格(价格: "USD" 部分)格式(类似于说 {"time": xxx}),因为这是我想要使用的唯一部分。
【问题讨论】:
标签: python json api python-requests