msdd’s blog

deep learning勉強中。プログラム関連のこと書きます。

Github API v4を使ってみる(1)動かしてみる

はじめに

Githubの情報(リポジトリやスター数など)をコードから取得できる、Github APIがある。 Github APIのバージョンにはv3とv4がある。v3はREST APIで、v4はGraphQLというものをベースにしたAPIとなっている。

GraphQLベースのv4を2種類の方法で使ってみる。

使ってみる

使い方としては、2つの方法があり、

  1. GraphQL Explorer
  2. アクセストークンを使う方法

を使うことで、APIを呼び出す。GraphQL Explorerは、ブラウザーで使えて、入力補完もしてくれるので使いやすい。

1. GraphQL Explorerを使う方法

GraphQL Explorerは、 Github APIをブラウザーで使えるようにしたもの。 GraphiQLをベースにしてある。 GraphQL Explorerは、queryのみ使え、読み込みのみ出来る。

まず、https://developer.github.com/v4/explorer/ でGraphQL Explorerのページを開く。

f:id:msdd:20200423112547p:plain
GraphQL Explorer

右上のsign inでgithubにサインインする。

f:id:msdd:20200423112647p:plain
sign in

権限の許可のページが出てくる。 権限は、下のものへのアクセスの許可が求められている。

user
public_repo
repo
repo_deployment
repo:status
read:repo_hook
read:org
read:public_key
read:gpg_key

緑のAuthorize githubと書いてあるボタンを押して、許可する。

f:id:msdd:20200423112835p:plain
権限許可

explorerのページへ飛び、explorerが使えるようになる。これで、github apiを使うことが出来る。

f:id:msdd:20200423112855p:plain
explorer画面

最初に書かれているクエリで試してみる。

query { 
  viewer { 
    login
  }
}

丸い実行ボタンを押すことで、実行される。

f:id:msdd:20200423112920p:plain

結果は右側の部分に表示される。

{
  "data": {
    "viewer": {
      "login": "3sdd"
    }
  }
}

これで、explorerを使ってGithub APIを使えるようになった。 jsonファイルにしたければ、適当なファイル名(data.jsonなど)を付けて、結果を保存する。

GraphiQLでも、設定することで使うことができるようである。
https://developer.github.com/v4/guides/using-the-explorer/#using-graphiql

2. アクセストークンを使う方法

アクセストークンを使って、リクエストで取得することもできる。

githubのガイドではcurlが使われていた。 今回は、pythonで試してみる。

コマンドで使うには、アクセストークン(personal access token)が必要となる。 githubでアクセストークンを作る。 このページにアクセストークンの 作り方が書いてある。画像の通り進めていく。 スコープについての設定は、上のexplorerと同様のものにしておく。

user
public_repo
repo
repo_deployment
repo:status
read:repo_hook
read:org
read:public_key
read:gpg_key

作成すると、下の画像のように黒塗りの部分にアクセストークンが生成されるので、保存しておく。

f:id:msdd:20200423112941p:plain
personal access token

次にアクセストークンを使って、Github APIを呼び出す。 今回は、pythonのバージョンは3.7.4で実行した。 先ほど、作ったアクセストークンをヘッダーにセットしてプログラムからアクセスできるようにする。valuesの値部分のquery{...}の部分は求めたいクエリにする。今回は、ログイン者の情報を求める。

import urllib.request
import json


personal_access_token="アクセストークン記入" # 自分のアクセストークン
endpoint="https://api.github.com/graphql" #送信先のendpoint
headers={"Authorization":f"Bearer {personal_access_token}"}

values={"query":"query{viewer{login}}"} # query部分 値に内容を書く
data=json.dumps(values)   #strにする
data=data.encode("utf-8") #byte型へ変換する

#リクエストを作成送信して、結果を得る。
req=urllib.request.Request(endpoint,headers=headers,data=data)
with urllib.request.urlopen(req) as response:
    body=response.read()

#結果が変数bodyに入っているのでjson形式で整形して
# data.jsonというファイルを作成し保存する
j=json.loads(body)
with open("data.json","w",encoding="utf-8") as f:
    json.dump(j,f,indent=4)

実行してみると、 data.jsonというファイルが出来て、 中にはクエリで求めた情報、 ログインユーザーの情報が入っている。

{
    "data": {
        "viewer": {
            "login": "3sdd"
        }
    }
}

おわりに

Github API v4をGraphQL Explorerとアクセストークンを使う2種類の方法で試してみた。 GraphQL Explorerは、補完もあり手軽に試せる。プログラムから使いたいときは、アクセストークンを作って使うことが出来る。

次は、クエリの内容について調べたい。

参考サイト

https://developer.github.com/v4/guides/forming-calls/