Canvas API批量获取用户ID后循环调用认证审计接口的实现咨询
实现步骤与完整代码
首先调整原有拉取用户列表代码的小问题:你之前是把每页的响应数组直接append到总列表,会导致总列表变成二维数组,我们先把它展平再提取所有用户ID,之后遍历ID调用审计接口即可,完整实现如下:
import requests # 全局复用请求头和域名前缀,避免重复定义 HEADERS = {"Authorization": "Bearer " + "this is my bearer"} BASE_URL = "mywebsite.com/api/v1" def get_all_course_users(): all_users = [] # 遍历分页拉取所有用户 for page in range(1,15): url = f"{BASE_URL}/courses/1111/users?per_page=50&page={page}" response = requests.get(url=url, headers=HEADERS) # 加状态判断避免接口报错打断后续逻辑 if response.status_code == 200: page_users = response.json() # 用extend把当前页用户直接合并到总列表,避免出现二维数组 all_users.extend(page_users) else: print(f"拉取第{page}页用户失败,状态码:{response.status_code}") return all_users def get_user_auth_audit(user_id): # 替换路径中的用户ID参数 url = f"{BASE_URL}/audit/authentication/users/{user_id}" response = requests.get(url=url, headers=HEADERS) if response.status_code == 200: return response.json() else: print(f"拉取用户{user_id}审计信息失败,状态码:{response.status_code}") return None if __name__ == "__main__": # 第一步:拉取全量用户列表 all_users = get_all_course_users() # 第二步:遍历用户ID调用审计接口,整合结果 all_audit_data = [] for user in all_users: user_id = user.get("id") if not user_id: continue audit_info = get_user_auth_audit(user_id) if audit_info: # 如果需要同时保留用户基础信息和审计信息,可以合并后再存入列表 merge_data = {**user, "auth_audit": audit_info} all_audit_data.append(merge_data) # 输出最终整合后的结果 print(all_audit_data)
核心逻辑说明
- 调整后的用户拉取方法拿到的是一维用户列表,不需要额外处理就能直接遍历
- 单独封装了单用户审计信息拉取方法,做了基础异常判断,避免单个接口报错中断整个批量任务
- 遍历用户列表时提取
id字段替换到接口路径参数中,拉取到的审计信息可以根据需求选择单独存储或者和用户基础信息合并,最终所有有效结果都会统一存入all_audit_data列表
内容的提问来源于stack exchange,提问作者master axel
相关产品推荐
相关产品推荐

