API 循环,用下一个游标更新 GET 请求
API loop, update GET request with next cursor
我有一个执行 GET 请求然后打印结果数据的工作循环。我现在需要的是创建另一个循环,将光标附加到第二个和以后的请求的末尾,以便每个请求都可以提取新数据。因此,URL+cursor 循环将包含我的工作数据打印循环。
我是 API 的新手,但根据我收集到的信息,请求生成一个游标,然后您使用该游标来查找下一批数据,然后该批次拥有下一批次的游标,直到那里没有更多的批次,光标是空白的。
我可以获得第一个批次和第一个游标,但我在使用该游标查找下一批次时遇到问题。有什么建议吗?
PS - 这个例子只循环了 5 次,但最终我会让它循环直到光标为空并将所有数据打印到 CSV。
import requests
import time
cursor=""
for i in range(5):
# api-endpoint
URL = "https://api.x.immutable.com/v1/orders?status=filled&sell_token_address=0xac98d8d1bb27a94e79fbf49198210240688bb1ed&cursor="
# sending get request and saving the response as response object
r = requests.get(url = URL + cursor)
# extracting data in json format
data = r.json()
for index, items in enumerate(data["result"]):
orderID = data["result"][index]['order_id']
info = data["result"][index]["sell"]["data"]["properties"]["name"]
price = data["result"][index]["buy"]["data"]["quantity"]
decimals = data["result"][index]["buy"]["data"]["decimals"]
print(index, orderID, info, price, decimals)
cursor = data["cursor"]
print("Cursor: ", cursor)
time.sleep(1)
print("END")
将参数附加到 URL 很少是个好主意。更好的方法是使用字典并将其传递给请求函数。
当您多次调用同一个 URL(尽管使用不同的参数)时,可以通过使用会话对象来提高性能。
这应该让您了解如何构建此代码:
import requests
from requests.adapters import HTTPAdapter, Retry
URL = "https://api.x.immutable.com/v1/orders"
params = {'status': 'filled',
'sell_token_address': '0xac98d8d1bb27a94e79fbf49198210240688bb1ed'}
with requests.Session() as session:
retry = Retry(
total=5,
status_forcelist=[500, 502, 503, 504],
backoff_factor=0.1
)
session.mount(URL, HTTPAdapter(max_retries=retry))
while True:
(r := session.get(URL, params=params)).raise_for_status()
data = r.json()
for value in data['result']:
orderID = value['order_id']
info = value["sell"]["data"]["properties"]["name"]
price = value["buy"]["data"]["quantity"]
decimals = value["buy"]["data"]["decimals"]
print(f'Order ID={orderID}, Info={info}, Price={price}, Decimals={decimals}')
if (cursor := data.get('cursor')):
params['cursor'] = cursor
else:
break
print("END")
注:
Python 此语法需要 3.8+
我有一个执行 GET 请求然后打印结果数据的工作循环。我现在需要的是创建另一个循环,将光标附加到第二个和以后的请求的末尾,以便每个请求都可以提取新数据。因此,URL+cursor 循环将包含我的工作数据打印循环。
我是 API 的新手,但根据我收集到的信息,请求生成一个游标,然后您使用该游标来查找下一批数据,然后该批次拥有下一批次的游标,直到那里没有更多的批次,光标是空白的。
我可以获得第一个批次和第一个游标,但我在使用该游标查找下一批次时遇到问题。有什么建议吗?
PS - 这个例子只循环了 5 次,但最终我会让它循环直到光标为空并将所有数据打印到 CSV。
import requests
import time
cursor=""
for i in range(5):
# api-endpoint
URL = "https://api.x.immutable.com/v1/orders?status=filled&sell_token_address=0xac98d8d1bb27a94e79fbf49198210240688bb1ed&cursor="
# sending get request and saving the response as response object
r = requests.get(url = URL + cursor)
# extracting data in json format
data = r.json()
for index, items in enumerate(data["result"]):
orderID = data["result"][index]['order_id']
info = data["result"][index]["sell"]["data"]["properties"]["name"]
price = data["result"][index]["buy"]["data"]["quantity"]
decimals = data["result"][index]["buy"]["data"]["decimals"]
print(index, orderID, info, price, decimals)
cursor = data["cursor"]
print("Cursor: ", cursor)
time.sleep(1)
print("END")
将参数附加到 URL 很少是个好主意。更好的方法是使用字典并将其传递给请求函数。
当您多次调用同一个 URL(尽管使用不同的参数)时,可以通过使用会话对象来提高性能。
这应该让您了解如何构建此代码:
import requests
from requests.adapters import HTTPAdapter, Retry
URL = "https://api.x.immutable.com/v1/orders"
params = {'status': 'filled',
'sell_token_address': '0xac98d8d1bb27a94e79fbf49198210240688bb1ed'}
with requests.Session() as session:
retry = Retry(
total=5,
status_forcelist=[500, 502, 503, 504],
backoff_factor=0.1
)
session.mount(URL, HTTPAdapter(max_retries=retry))
while True:
(r := session.get(URL, params=params)).raise_for_status()
data = r.json()
for value in data['result']:
orderID = value['order_id']
info = value["sell"]["data"]["properties"]["name"]
price = value["buy"]["data"]["quantity"]
decimals = value["buy"]["data"]["decimals"]
print(f'Order ID={orderID}, Info={info}, Price={price}, Decimals={decimals}')
if (cursor := data.get('cursor')):
params['cursor'] = cursor
else:
break
print("END")
注:
Python 此语法需要 3.8+