GitHub APIには、
REST API、GraphQL APIと言う2種類のAPIがあります。
このエントリでは、PythonからこれらのAPIを利用する方法を示します。

GitHub REST API | GitHub Docs
https://docs.github.com/en/rest

GitHub GraphQL API | GitHub Docs https://docs.github.com/en/graphql

このエントリでは、各APIについて次のライブラリを利用します。

  • REST API ... PyGithub
  • GraphQL API ... gql

PyGithub | GitHub
https://github.com/PyGithub/PyGithub

gql | GitHub
https://github.com/graphql-python/gql

GitHub REST API

REST APIは、PyGithubを使って呼び出します。

PyGithub | GitHub
https://github.com/PyGithub/PyGithub

まず、tokenを次のパスから作成します

Personal access tokens | GitHub
https://github.com/settings/tokens

PyGithubをインストールします。

pip install PyGithub

以上の準備が出来たら、 README.mdのサンプルのようなコードが実行出来ます。

ここでは、以下のようなコードを書いてみます。

pygithub-sample.py

from github import Github

access_token = '<作成したtoken>'
g = Github(access_token)

repo = g.get_repo("PyGithub/PyGithub")
print(repo.name)
print(repo.description)

実行すると、次のような結果が得られます。
(PyGithubリポジトリの名称と説明の表示)

$ python pygithub-sample.py 
PyGithub
Typed interactions with the GitHub API v3

GitHub GraphQL API

GraphQL APIは、一般的なGraphQLなので、
gqlを使って呼び出します。

gql | GitHub
https://github.com/graphql-python/gql

REST APIの場合と同じように、tokenを用意します。

gqlをインストールします。

pip install gql

ここでは、以下のようなコードを書いてみます。

gql-sample.py

from gql import gql, Client
from gql.transport.requests import RequestsHTTPTransport

access_token = '<作成したtoken>'
client = Client(
    transport=RequestsHTTPTransport(
      url = "https://api.github.com/graphql",
      use_json = True,
      headers = {
        "Content-type": "application/json",
        "Authorization": "Bearer {}".format(access_token)
      },
      retries = 3,
    ),
    fetch_schema_from_transport=True,
)
resp = client.execute(
  gql("""
    query($owner:String!, $name:String!) {
      repository(owner:$owner, name:$name){
        pullRequests(first:100, states:OPEN) {
          nodes { number }
        }
      }
    }"""),
  variable_values={
    "owner": "PyGithub",
    "name": "PyGithub"
  })
for pr in resp['repository']['pullRequests']['nodes']:
    print(pr['number'])

実行すると、次のような結果が得られます。
(PyGithubリポジトリのOpen中のPullRequst番号一覧の表示)

$ python gql-sample.py
1395
1667
1669
1676
※以降省略※

以上。