首页 > 解决方案 > 如何从 GraphQL 获得超过 100 个结果

问题描述

我正在尝试使用 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']))

标签: pythonjsonpython-requestsgraphql

解决方案


我认为您最多可以查询 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
  }
}

推荐阅读