GitHubAPI(REST API, GraphQL API)をPythonから呼び出す
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
※以降省略※
以上。