python - Imgur API - 如何在不分页的情况下检索所有收藏夹?
问题描述
根据Imgur Docs,“GET Account Favorites”API 调用采用可选参数进行分页,这意味着所有对象都在没有它的情况下返回。
但是,当我使用以下代码片段(应用程序已注册并且已针对我的帐户执行 OAuth 以进行测试)时,我仅获得前 30 个 JSON 对象。在下面的代码片段中,我已经有一个授权用户的 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)
requests 响应返回一个包含三个键的字典:status(HTTP 状态代码)、success(true 或 false)和 data,其中的值是一个字典列表(每个收藏项一个)。
我试图在没有分页的情况下检索它,以便我可以将特定的元数据值提取到 Pandas 数据框中(id、发布日期等)。
我最初认为这是 Jupyter 笔记本中的 Pandas 显示问题,但将其追溯到 API 仅返回最新的 30 个列表项,尽管文档另有说明。如果我在末尾放置一个任意页码(例如,“/favorites/1”),它会返回适合该页面的 30 个项目,但似乎没有获取所有项目或检索计数的选项总项目或页数。
我错过了什么?
后记:似乎没有分页,所有 URI 都无法工作,例如,获取帐户图像,获取画廊提交等。任何有可选“/{{page}}”参数的地方,如果没有,它将默认为第一页指定的。所以我想更大的问题是,“Imgur API 是否甚至支持非分页数据,以及如何访问?”。
解决方案
当响应的可能大小可以任意大时,通常使用分页数据。如果像 Imgur 这样的主要服务有一个不能以这种方式工作的 API,我会感到惊讶。
正如您所发现的,该page
属性可能是可选的,如果您不提供它,您将获得第一页作为您的响应。
如果您想获得比第一页更多的信息,则需要遍历页码:
data = []
page = 0
while block := connection.get(page=page):
data.append(block)
page += 1
由于:=
赋值表达式,这假定 Python3.8+。如果您使用的是旧版本,则需要block
在循环体中进行设置,但同样的想法也适用。
推荐阅读
- java - JavaMail 库中的 winmail.dat 附件解析
- python - 在 setup.py 安装期间动态复制包数据
- r - 是否可以更新 BSTS 模型?
- microsoft-graph-api - MS-Teams 无需使用 App Studio UI 界面即可创建 Teams 应用程序
- css - 无法在 Bootstrap 中获得水平的“导航栏”
- php - codeigniter 使用带有 mongo 的复选框更新多条记录
- javascript - 关于 cytoscape.js 的几个问题
- spring - 使用地图
在 Spring 中使用 csv 表示法作为 @RequestParam - excel - Excel Get & Transform CSV:有没有办法只将新数据从 CSV 导入数据模型
- c# - 如何在 C# 中获取当前日期并每天创建目录?