Python で GitHub の GraphQL API へアクセスする
Python から gql を使って GitHub の GraphQL API を呼び出すサンプルをメモしておきます。 対象は octocat / Hello-World リポジトリとし、Pull Request の一覧を取得します。
GitHub の AccessKey を取得する
GitHub へアクセスし、Settings
→ Personal access tokens
→ Generate new token
をクリックします。
GitHub のパスワードを要求されたので入力して先へ進みます。
New personal access token
画面が表示されます。 Note
は必須項目なので、何かわかりやすいコメントを入力しておきます。 Generate token
をクリックして先へ進みます。
これでアクセストークンが発行されました。
venv 環境を作成する
Python の venv 環境を作成し、必要なライブラリをインストールします。
| mkdir graphql
cd graphql
python3 -m venv .venv
echo 'source .venv/bin/activate' > .envrc
direnv allow
python3 -m pip install --upgrade pip
python3 -m pip install gql requests requests-toolbelt
|
サンプルスクリプト
サンプルスクリプトは以下の通りです。 access_token
には予め GitHub で発行したアクセストークンを入力します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | #!/usr/bin/env python3
from gql import Client, gql
from gql.transport.requests import RequestsHTTPTransport
access_token = "0123456789012345678901234567890123456789"
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
title
}
}
}
}"""
),
variable_values={"owner": "octocat", "name": "Hello-World"},
)
for pr in resp["repository"]["pullRequests"]["nodes"]:
print(str(pr["number"]) + ":" + pr["title"])
|
実行例
実行例は以下の通りです。
| # ./sample.py
32:Update README
34:Just a pull request test
35:Update README
(snip)
255:Contributors add
258:CO-mitting a new file
259:Create CONTRIBUTING.md
|