json - Api 调用:调用列表的键和值,然后在另一个 API 调用中循环获取值
问题描述
我使用 Canvas api 来调用诸如用户 ID、登录和注销时间之类的信息……但 API 一次只能调用一个用户,所以我使用此代码首先调用用户 ID 列表:
import requests
import json
def get_all_time_entries():
url_address = "mywebsite.com/api/v1/courses/1111/users?per_page=50"
headers = {"Authorization": "Bearer " + "this is my bearer"
}
all_time_entries = []
for page in range(1,15):
url = "mywebsite.com/api/v1/courses/1111/users?per_page=50&page="+str(page)
response = requests.get(url=url, headers=headers).json()
all_time_entries.append(response)
return all_time_entries
print(get_all_time_entries())
我设法要求这样的用户列表:
{
"created_at": "time",
"email": "email",
"id": ID number, (***)
"integration_id": null,
"login_id": "email",
"name": "Name",
"short_name": "Name ",
"sis_import_id": 111,
"sis_user_id": "Name ",
"sortable_name": ", Name "
},
现在我想使用一个新的循环来调用这个链接的 API:mywebsite.com/api/v1/audit/authentication/users/:user_id (:user_id 是我最后一次 api 调用中获得的 ID,标有 ( ***)) 并获取所有信息到一个列表中。我应该如何对所有这些 ID 使用循环?
解决方案
我已经设法根据我从上一个列表中使用以下代码获得的值找到调用下一个 API 的解决方案:
import requests
import json
def get_all_time_entries():
url = "mywebsite.com/api/v1/courses/1111/users?per_page=50"
headers = {
"Authorization": "Bearer " + "this is my bearer",}
uri = "mywebsite.com/api/v1/audit/authentication/users/"
result = []
all_time_entries = []
# loop through all pages and return list of users of certain pages
for page in range(1,15):
url = "mywebsite.com/api/v1/courses/1111/users?per_page=50&page="+str(page)
response = requests.get(url=url, headers=headers).json()
all_time_entries.append(response)
return all_time_entries
# Search for id value in all_time_entries
value = [res['id'] for res in all_time_entries]
# Loop through user log in api call by 'id'
for x in value:
url = "mywebsite.com/api/v1/audit/authentication/users/"+str(x)
callback = requests.get(url=url, headers=headers).json()
result.append(callback)
return result
print(get_all_time_entries())
现在的问题是这段代码一直返回“all_time_entries”的值,而不是“result”的值。我还尝试为列表“all_time_entries”添加某个值(没有循环和调用):
all_time_entries = [{'id': 11, 'name': 'name', 'created_at': '2021-01-23T22:34:30+07:00', 'sortable_name': ', name', 'short_name': 'name', 'sis_user_id': 'name@email.com', 'integration_id': None, 'sis_import_id': 1, 'login_id': 'name@email.com', 'email': 'name@email.com'}, {'id': 22, 'name': 'name2', 'created_at': '2021-01-23T22:34:19+07:00', 'sortable_name': ', name2', 'short_name': 'name2', 'sis_user_id': 'name2@email.com', 'integration_id': None, 'sis_import_id': 1, 'login_id': 'name2@email.com', 'email': 'name2@email.com'}]
...而且它有效所以我不知道这种方法是否不能处理很长的列表或其他东西,有没有办法处理长列表?
推荐阅读
- r - 在 xml 节点 R 上提取正确的值
- javascript - TypeError:无法读取未定义的属性电子邮件
- grails - 配置 spring-security-core 时无法加载 GORM 服务
- recursion - 相同的渐近增长 - 主定理
- javascript - Rxjs Angular 6/7 mergeMap 延迟 http 请求
- python - 带有自定义插槽的 PyQt5 设计器
- python - 使用 PyPy 5.1.2 对 Python 2.7.10 进行套接字编程:Flush -- 立即发送数据
- php - PHP / AJAX | 没有回应或改变
- c - optarg 值是否在对 getopt 的连续调用中保持不变?
- r - R 在导入 SPSS 文件时拆分文本列