【问题标题】:API request with all pages in one call?一次调用所有页面的 API 请求?
【发布时间】:2021-09-28 17:42:35
【问题描述】:

我正在请求硬币列表

requests.get(
"https://api.coingecko.com/api/v3/coins/markets?vs_currency=eur&order=market_cap_desc&per_page=4&page=1&sparkline=false").text

问题是有一个名为“per_page”的参数有限制。因此,为了通过一个请求获得所有硬币,我需要将“page”参数增加 1。此外,也没有说明有多少页。 这种情况有解决办法吗?也许是一个增加值的循环?

【问题讨论】:

    标签: api rest python-requests pagination get


    【解决方案1】:

    查看 URL 似乎最多有 250 个硬币,所以增加 per_page= 参数:

    import requests
    
    url = "https://api.coingecko.com/api/v3/coins/markets?vs_currency=eur&order=market_cap_desc&per_page=999&page=1&sparkline=false"
    
    data = requests.get(url).json()
    
    for i, d in enumerate(data, 1):
        print("{:>3}. {}".format(i, d["name"]))
    

    打印:

    
    ...
    
    237. Kadena
    238. Ark
    239. AllianceBlock
    240. Adventure Gold
    241. Sapphire
    242. cUNI
    243. Balancer
    244. FLEX Coin
    245. Casper Network
    246. DerivaDAO
    247. Unizen
    248. IDEX
    249. Enzyme
    250. sBTC
    

    编辑:加载多个页面:

    import json
    import requests
    
    url = "https://api.coingecko.com/api/v3/coins/markets?vs_currency=eur&order=market_cap_desc&per_page=4&page={}&sparkline=false"
    
    
    cnt, i = 1, 1
    while True:
        try:
            data = requests.get(url.format(i)).text
            data = json.loads(data)
        except:
            print("Error!")
            break
    
        if not data:
            break
    
        for d in data:
            print("{:>3}. {}".format(cnt, d["name"]))
            cnt += 1
        i += 1
    

    【讨论】:

    • 这给了我 250 个结果,但我想要得到大约 8000 到 9000 个结果。这就是为什么我需要自动增加页码
    • @Nauris 查看我的编辑。
    【解决方案2】:

    如果有最大数量的硬币要请求并且 API 允许您超过它,那么这就是解决方案。但是你不会在这里,所以可以肯定地假设情况更糟。

    让我们取一个看似很大的数字,可能是 1000(或您选择的值)。执行以下算法:

    offset <- 0
    limit <- 1000
    do
        items <- request(offset, offset + limit)
        offset <- offset + limit
        doSomethingWith(items)
    while not items.empty
    processResults()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      相关资源
      最近更新 更多