如何从 GraphQL 获得 100 多个结果
Posted
技术标签:
【中文标题】如何从 GraphQL 获得 100 多个结果【英文标题】:How to get more than 100 results from GraphQL 【发布时间】:2021-08-23 12:33:16 【问题描述】:我正在尝试使用 GraphQL 为 Uniswap 2.0 上的每个令牌对接收令牌对数据。当我运行我的代码时,我只得到 100 个结果,但我需要检索 1800 多个结果。我已经更改了几次查询,但无论我如何更改它,100 对的数据似乎总是有上限。如何获取所有对的数据?
import requests
query = """
pairs(orderBy: reserveUSD, orderDirection: asc)
id
token0
id
symbol
totalLiquidity
totalSupply
token1
id
symbol
totalLiquidity
totalSupply
reserveUSD
reserve0
reserve1
totalSupply
volumeUSD
"""
url = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2'
r = requests.post(url, json = "query": query)#"\n pairs(first: 10, where: reserveUSD_gt: \"1000000\", volumeUSD_gt: \"50000\", orderBy: reserveUSD, orderDirection: desc) \n id\n token0 \n id\n symbol\n \n token1 \n id\n symbol\n \n reserveUSD\n volumeUSD\n \n\n","variables":None)
#print(r.text)
json_data = json.loads(r.text)
print(len(json_data['data']['pairs']))
【问题讨论】:
这不是一个普通的 GraphQL 问题。由您查询的 API 来公开请求特定数量结果的方式,并且 API 可能总是有一个硬最大值,您需要发出多个请求。你有关于这个 API 架构的文档链接吗? 这是documention的链接,这是sandbox的链接 【参考方案1】:我认为您最多可以查询 1000 个结果。只需将"first"
添加到查询中。如果有超过 1000 个结果,则首先查询 #1
,然后运行第二个,您可以使用跳过功能跳过您已经获得的 1000 个。
pairs(first: 1000, orderBy: reserveUSD, orderDirection: asc)
id
token0
id
symbol
totalLiquidity
totalSupply
token1
id
symbol
totalLiquidity
totalSupply
reserveUSD
reserve0
reserve1
totalSupply
volumeUSD
【讨论】:
以上是关于如何从 GraphQL 获得 100 多个结果的主要内容,如果未能解决你的问题,请参考以下文章
需要帮助才能使用 YouTube 搜索 API 获得 100 多个结果
如何从 Apollo Server 端点获得完整的 GraphQL 架构?
Apollo Client Angular:如何将从查询中获得的数据作为参数传递给graphql中的另一个查询?
Webonyx/Graphql-php 入门:如何在 cURL 中获取 API 的响应而不会从 API 实现中获得回声?