【问题标题】:How to get more than 100 results from GraphQL如何从 GraphQL 获得 100 多个结果
【发布时间】: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的链接

标签: python json python-requests graphql


【解决方案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
  }
}

【讨论】:

    猜你喜欢
    • 2016-03-06
    • 1970-01-01
    • 2017-07-28
    • 2021-11-08
    • 1970-01-01
    • 2013-12-13
    • 2013-11-05
    • 2012-03-25
    • 2012-10-15
    相关资源
    最近更新 更多