如何利用GitHub REST API获取指定用户信息并处理公司字段
解决GitHub REST API获取完整用户数据的问题
GitHub的/search/users接口仅返回用户的精简信息,要获取你需要的全部字段,必须针对每个用户的login调用/users/{login}详情接口。以下是实现需求的完整代码,包含字段提取、公司信息清理以及数据保存的优化:
完整代码实现
import requests import json # 搜索查询参数 query = "location:Bengaluru+followers:>100" search_url = f"https://api.github.com/search/users?q={query}&sort=followers&order=desc" # 可选:添加GitHub API Token以提升速率限制(替换为你的个人token) headers = { "Authorization": "token YOUR_GITHUB_TOKEN" } # 获取搜索结果 response = requests.get(search_url, headers=headers) response.raise_for_status() # 捕获HTTP请求错误 search_data = response.json() # 存储处理后的用户数据 processed_users = [] # 遍历每个用户,获取完整详情 for user_item in search_data["items"]: login = user_item["login"] user_detail_url = f"https://api.github.com/users/{login}" detail_response = requests.get(user_detail_url, headers=headers) detail_response.raise_for_status() user_detail = detail_response.json() # 处理company字段:去首尾空格、移除首个@、转大写 company = user_detail.get("company") if company: cleaned_company = company.strip().lstrip("@").upper() else: cleaned_company = None # 提取所需字段 processed_user = { "login": user_detail["login"], "name": user_detail.get("name"), "company": cleaned_company, "location": user_detail.get("location"), "email": user_detail.get("email"), "hireable": user_detail.get("hireable"), "bio": user_detail.get("bio"), "public_repos": user_detail.get("public_repos"), "followers": user_detail.get("followers"), "following": user_detail.get("following"), "created_at": user_detail.get("created_at") } processed_users.append(processed_user) # 保存处理后的数据到文件(使用with语句自动管理资源) with open("user_data.json", "w", encoding="utf-8") as f: json.dump(processed_users, f, indent=4, ensure_ascii=False) print(f"已成功获取并保存{len(processed_users)}条用户数据")
关键说明
- API调用逻辑:搜索接口返回的
items列表仅包含基础信息,必须通过每个用户的login调用详情接口才能拿到完整字段 - Company字段清理:通过
strip()去除首尾空格,lstrip('@')仅移除开头的@符号(不会影响中间或末尾的@),最后用upper()转为大写 - 速率限制:未登录的GitHub API请求速率限制为每小时60次,添加个人Token后可提升至每小时5000次,建议替换代码中的
YOUR_GITHUB_TOKEN - 错误处理:使用
raise_for_status()捕获HTTP请求错误,避免静默失败 - 文件操作优化:使用
with语句自动管理文件资源,无需手动关闭文件
内容的提问来源于stack exchange,提问作者SWAYAM THAPLIYAL
相关产品推荐
相关产品推荐

