📜  创建 GitHub API 以使用Python和 Flask 获取用户个人资料图像和存储库数量(1)

📅  最后修改于: 2023-12-03 15:07:11.269000             🧑  作者: Mango

创建 GitHub API 以使用 Python 和 Flask 获取用户个人资料图像和存储库数量

GitHub 是一个被广泛使用的代码托管平台,很多开发者都在上面发布代码、参与开源项目、分享交流经验。它的 API 提供了各种访问方式,包括 OAuth 认证,让开发者可以方便地获取用户信息、仓库信息等。本文将介绍如何创建一个 GitHub API,使用 Python 和 Flask 框架获取用户个人资料图像和存储库数量。

用到的工具和技术
  1. Python 3.x
  2. Flask 1.x
  3. Requests 2.x
  4. GitHub API
第一步:创建 GitHub 应用

要使用 GitHub API,首先要创建一个 GitHub 应用,具体步骤如下:

  1. 打开 GitHub Developer Applications 站点,选择 "New OAuth App"。
  2. 输入应用信息,包括应用名称、应用描述、主页 URL 和回调 URL,其中回调 URL 是用户授权后返回的 URL。时简便起见,可以先在本地测试,回调 URL 填写 http://localhost:5000/github/callback
  3. 创建成功后,你会收到一个 Client ID 和一个 Client Secret。这些是你访问 GitHub API 的凭证,用于在 OAuth2 认证时识别你的应用。
第二步:创建 Flask 应用

创建一个 Flask 应用,初始化 Flaskrequests 库。示例代码如下:

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_idclient_secretcode 参数进行认证,其中 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 框架有所帮助。