как извлечь из ответа 'balanceUSD'
import requests
from requests.structures import CaseInsensitiveDict
url = "https://api.zapper.fi/v2/balances?addresses%5B%5D=0x66a188b9662ca2cd259d1145fec21be988850c88&networks%5B%5D=ethereum&networks%5B%5D=polygon&bundled=false"
headers = CaseInsensitiveDict()
headers["Authorization"] = "Basic"
r = requests.get(url, headers=headers).text
print(r)
Мне нужно извлечь из ответа все значения баланса в долларах без повторов.
Ответ:
event: balance data: {
"appId": "tokens",
"network": "ethereum",
"addresses": [
"0x66a188b9662ca2cd259d1145fec21be988850c88"
],
"balance": {
"deposits": {},
"debt": {},
"vesting": {},
"wallet": {
"2242939522": {
"key": "2242939522",
"appId": "tokens",
"address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"network": "ethereum",
"balanceUSD": 3.6345270000000003,
"metaType": "supplied",
"displayProps": {
"label": "WETH",
"secondaryLabel": null,
"tertiaryLabel": null,
"images": [],
"stats": [],
"info": [
{
"label": {
"type": "string",
"value": "App"
},
"value": {
"type": "string",
"value": "Tokens"
}
}
],
"balanceDisplayMode": "default"
},
"type": "token",
"contractType": "app-token",
"context": {
"symbol": "WETH",
"balance": 0.00205,
"decimals": 18,
"balanceRaw": "2050000000000000",
"price": 1772.94
},
"breakdown": []
},
"2616394601": {
"key": "2616394601",
"appId": "tokens",
"address": "0x0000000000000000000000000000000000000000",
"network": "ethereum",
"balanceUSD": 187.79718251200956,
"metaType": "supplied",
"displayProps": {
"label": "ETH",
"secondaryLabel": null,
"tertiaryLabel": null,
"images": [],
"stats": [],
"info": [
{
"label": {
"type": "string",
"value": "App"
},
"value": {
"type": "string",
"value": "Tokens"
}
}
],
"balanceDisplayMode": "default"
},
"type": "token",
"contractType": "app-token",
"context": {
"symbol": "ETH",
"balance": 0.10592416128690736,
"decimals": 18,
"balanceRaw": "105924161286907352",
"price": 1772.94
},
"breakdown": []
}
},
"claimable": {},
"locked": {},
"nft": {}
},
"totals": [
{
"key": "2242939522",
"type": "app-token",
"network": "ethereum",
"balanceUSD": 3.6345270000000003
},
{
"key": "2616394601",
"type": "app-token",
"network": "ethereum",
"balanceUSD": 187.79718251200956
}
],
"errors": []
}
event: balance data: {
"appId": "tokens",
"network": "polygon",
"addresses": [
"0x66a188b9662ca2cd259d1145fec21be988850c88"
],
"balance": {
"deposits": {},
"debt": {},
"vesting": {},
"wallet": {},
"claimable": {},
"locked": {},
"nft": {}
},
"totals": [],
"errors": []
}
Ответы (2 шт):
Автор решения: elderberry17
→ Ссылка
Код у меня не запускается из-за отсутсвия нужного API key, но из приведенного вами словаря кажется, что ответ может быть похож на:
print(r['balance data']['balance']['wallet']['2242939522']['balanceUSD'])
Судя по всему, '2242939522' -- какой-то банковский ID или номер счета, потому что в словаре, соответствующему ключу wallet не один подобный номер, каждому из которых ставится в соответствие свой словарь с нужным вам ключом 'balanceUSD'
Автор решения: elderberry17
→ Ссылка
Воспользуемся регулярными выражениями:
import re
pattern = r'balanceUSD":.*?[},]'
worker = re.compile(pattern)
data = worker.findall(string)
data = list(map(lambda x: float(x[12:-1]), data))
# если хотите взять только уникальные:
data = list(set(data))
print(data)
string -- ваша чудесная строка) то есть по сути переменная r