我正在尝试获取 Coinbase 帐户上的所有交易,这需要分页。这文档 https://developers.coinbase.com/api/v2?javascript#pagination关于如何在 Python 中执行此操作的信息很少,但我已经设法使其工作:
client = Client(keys['apiKey'], keys['apiSecret'])
accounts = client.get_accounts()
for account in accounts.data:
txns = client.get_transactions(account.id, limit=25)
while True:
for tx in txns.data:
print(tx.id)
if txns.pagination.next_uri != None:
starting_after_guid = re.search('starting_after=([0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12})', txns.pagination.next_uri, re.I)[1]
txns = client.get_transactions(account.id, limit=25, starting_after=starting_after_guid)
else:
break
分页对象仅包含 next_uri,其他所有内容均为 null/None——它应该包含一个包含以下内容的字典:starting_after
以及其他有用的数据。正则表达式搜索看起来很愚蠢,但它确实有效。
有没有更好的办法?
这只是让其他答案更进一步,并创建一个通用函数,以便您可以将它用于 api 中的大多数分页方法。
from coinbase.wallet.client import Client
client = Client(API_KEY, SECRET)
def _get_paginated_items(api_method, limit=100):
"""Generic getter for paginated items"""
all_items = []
starting_after = None
while True:
items = api_method(limit=limit, starting_after=starting_after)
if items.pagination.next_starting_after is not None:
starting_after = items.pagination.next_starting_after
all_items += items.data
else:
all_items += items.data
break
return all_items
def get_accounts(client, limit=100):
return _get_paginated_items(client.get_accounts, limit)
def get_transactions(account, limit=100):
return _get_paginated_items(account.get_transactions, limit)
# Use them.
accounts = get_accounts(client)
for account in accounts:
transactions = get_transactions(account)
# etc...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)