📅  最后修改于: 2023-12-03 15:07:11.269000             🧑  作者: Mango
GitHub 是一个被广泛使用的代码托管平台,很多开发者都在上面发布代码、参与开源项目、分享交流经验。它的 API 提供了各种访问方式,包括 OAuth 认证,让开发者可以方便地获取用户信息、仓库信息等。本文将介绍如何创建一个 GitHub API,使用 Python 和 Flask 框架获取用户个人资料图像和存储库数量。
要使用 GitHub API,首先要创建一个 GitHub 应用,具体步骤如下:
http://localhost:5000/github/callback
。创建一个 Flask 应用,初始化 Flask
和 requests
库。示例代码如下:
from flask import Flask, redirect, request, session
import requests
import json
app = Flask(__name__)
app.secret_key = "your_secret_key"
Flask
:导入 Flask 库,用于创建实例。redirect
:导入 Flask 中的 redirect 函数,用于重定向到授权页面以获取用户授权。request
:导入 Flask 中的 request 模块,用于处理请求参数。session
:导入 Flask 中的 session 模块,用于存储用户授权信息。在这个示例中,我们使用 Flask 的 session 作为本地存储,实际生产可能需要用数据库存储。requests
:导入 Python 中的 requests 库,用于请求 GitHub API。json
:导入 Python 中的 json 库,用于解析返回的 JSON 格式数据。在 Flask 应用中设置授权及回调路由。授权路由重定向到 GitHub OAuth2 授权页面,用户输入 GitHub 账号密码进行授权,授权成功后 GitHub 会返回一个授权码,回调路由会使用授权码向 GitHub 获取访问令牌。
示例代码如下:
@app.route("/login")
def login():
"""
GitHub OAuth2 授权页面
"""
params = {
"client_id": "your_client_id",
"redirect_uri": "http://localhost:5000/github/callback",
"scope": "user"
}
url = "https://github.com/login/oauth/authorize?" + urllib.parse.urlencode(params)
return redirect(url)
@app.route("/github/callback")
def callback():
"""
GitHub 回调页面
"""
code = request.args.get("code")
if not code:
return "GitHub OAuth2 授权失败"
params = {
"client_id": "your_client_id",
"client_secret": "your_client_secret",
"code": code,
"redirect_uri": "http://localhost:5000/github/callback"
}
response = requests.post("https://github.com/login/oauth/access_token", params=params)
access_token = response.text.split("&")[0].split("=")[1]
# 将 access_token 信息存储到 session 中
session["access_token"] = access_token
return redirect("/")
/login
:OAuth2 授权页面路由,用于重定向到 GitHub 授权页面。在这个示例中设定了 user
的作用域,即获取用户个人信息。/github/callback
:OAuth2 回调页面路由,用于使用授权码换取访问令牌。在这个示例中,使用 requests.post()
方法请求 GitHub API,获取 access_token 信息,在获取之前需要使用 client_id
、client_secret
和 code
参数进行认证,其中 redirect_uri
指定了 OAuth2 授权重定向到哪一个 URL。在 Flask 应用中设置获取用户信息的路由。在这个路由中,使用 requests.get()
方法请求 GitHub API,获取用户个人信息,其中包括用户头像地址和存储库数量。
示例代码如下:
@app.route("/")
def index():
"""
获取用户头像和 GitHub 存储库数量
"""
# 从 session 中取出 access_token 信息
access_token = session.get("access_token")
if not access_token:
return redirect("/login")
headers = {
"Authorization": "Bearer " + access_token
}
user_info = requests.get("https://api.github.com/user", headers=headers).json()
# 获取用户头像地址和存储库数量
avatar_url = user_info.get("avatar_url")
repositories_count = user_info.get("public_repos")
return f"头像地址:{avatar_url},存储库数量:{repositories_count}"
/
:用于显示用户头像地址和存储库数量的路由。session.get()
:从 session 中获取上一步存储的 access_token
信息。requests.get()
:请求 GitHub API,获取用户个人信息。在这个示例中,使用示例代码中的 "https://api.github.com/user" 作为 API 端点,获取用户信息。请求头中传递 Bearer access_token
,其中 access_token 是 OAuth2 认证后获得的访问令牌。请求成功后,将返回 JSON 格式数据。user_info.get()
:判断返回 JSON 格式数据中是否存在相应的键名,如果存在就返回对应的键值。在这个示例中,我们需要获取用户头像地址(avatar_url
)和存储库数量(public_repos
)。最后,启动应用并访问 "http://localhost:5000/",即可查看到用户头像地址和存储库数量。
if __name__ == "__main__":
"""
启动应用
"""
app.run(debug=True, host="0.0.0.0", port=5000)
if __name__ == "__main__"
:Python 入口函数。app.run()
:启动 Flask 应用。在这个示例中,我们设置了 debug=True
,可以方便地在开发环境中调试代码, host="0.0.0.0"
,表示应用可以通过网络访问,port=5000
,则指定应用监听的端口。本文演示了如何使用 Python 和 Flask 框架创建 GitHub API,获取用户个人资料图像和存储库数量。虽然只是一个简单的示例,但是涵盖了 OAuth2 认证、访问 GitHub API、获取用户个人信息等方面,希望能对大家了解 OAuth2 认证、GitHub API 以及 Flask 框架有所帮助。