如何从 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 多个结果的主要内容,如果未能解决你的问题,请参考以下文章

使用 PRAW 获得 100 多个搜索结果?

需要帮助才能使用 YouTube 搜索 API 获得 100 多个结果

如何从 Apollo Server 端点获得完整的 GraphQL 架构?

Apollo Client Angular:如何将从查询中获得的数据作为参数传递给graphql中的另一个查询?

如何使用pg-promise同时从多个查询中获得结果?

Webonyx/Graphql-php 入门:如何在 cURL 中获取 API 的响应而不会从 API 实现中获得回声?