【问题标题】:Imgur API - How do I retrieve all favorites without pagination?Imgur API - 如何在不分页的情况下检索所有收藏夹?
【发布时间】:2020-03-02 09:15:39
【问题描述】:

根据Imgur Docs,“GET Account Favorites”API 调用采用可选参数进行分页,这意味着所有对象都没有它返回。

但是,当我使用以下代码 sn-p(应用程序已注册并且已针对我的帐户执行 OAuth 以进行测试)时,我仅获得前 30 个 JSON 对象。在下面的 sn-p 中,我已经有一个授权用户的 access_token 并且可以检索该用户名的数据。但返回列表的长度始终是前 30 项。

username = token['username']
bearer_headers = {
    'Authorization': 'Bearer ' + token['access_token']
}
fav_url = 'https://api.imgur.com/3/account/' + username + '/' + 'favorites'
r = requests.get(fav_url, headers=bearer_headers)
r_json = r.json()
favorites=r_json['data']
len(favorites)
print(favorites)

请求响应返回一个包含三个键的字典:状态(HTTP 状态代码)、成功(真或假)和数据,其中的值是一个字典列表(每个收藏项一个)。

我正在尝试检索此 分页,以便我可以将特定元数据值提取到 Pandas 数据框(id、发布日期等)中。

我最初认为这是 Jupyter 笔记本中的 Pandas 显示问题,但追踪到 API 仅返回最新的 30 个列表项,尽管文档另有说明。如果我在末尾放置一个任意页码(例如,“/favorites/1”),它会返回适合该页面的 30 个项目,但似乎没有获取所有项目或检索计数的选项提前的总项目或页数。

我错过了什么?

后记:似乎没有分页,所有 URI 都无法工作,例如,获取帐户图像,获取画廊提交等。任何有可选“/{{page}}”参数的地方,都会默认为第一页如果没有指定。所以我想更大的问题是,“Imgur API 是否支持非分页数据,如何访问?”。

【问题讨论】:

  • 在文档中,有一个page参数,也许你应该尝试一下。

标签: python imgur


【解决方案1】:

当响应的可能大小可以任意大时,通常使用分页数据。如果像 Imgur 这样的主要服务有一个没有以这种方式工作的 API,我会感到惊讶。

正如您所发现的,page 属性可能是可选的,如果您不提供它,您将获得第一页作为您的响应。

如果你想获得比第一页更多的内容,你需要遍历页码:

data = []
page = 0
while block := connection.get(page=page):
  data.append(block)
  page += 1

由于 := 赋值表达式,这假定 Python3.8+。如果您使用的是旧版本,则需要在循环主体中设置 block,但同样的想法也适用。

【讨论】:

    猜你喜欢
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 2019-01-19
    相关资源
    最近更新 更多