人気記事

GitHub Python

GitHub APIからコミット毎のコード修正行数をPythonで集計する

投稿日:

GitHubのWebページ上でコード行数を確認する

GitHub上では各コミットのコード修正行数を確認することができます。

下図は opencv-pythonリポジトリ  のコミットですが56行追加、49行削除となっています。

複数コミットのコード修正行数を集計する際にコミット1つ1つを確認するのは手間であったため、PythonでAPIを使った集計を試してみました。

コミット一覧を取得する

GitHubリファレンス を参考にコミット一覧を取得する処理を以下のコードで実行しました。

import requests
import pandas as pd

url = 'https://api.github.com/repos/opencv/opencv-python/commits'

r = requests.get(url)
df = pd.json_normalize(r.json())
print(df)

結果、コミット毎のsha(ハッシュ値)などのレスポンスを取得できました。

                                        sha                                            node_id  ... author committer
0   d0ebd7173f8bd725388dbc1b7c6d7b9f729024c2  C_kwDOA1Mok9oAKGQwZWJkNzE3M2Y4YmQ3MjUzODhkYmMx...  ...    NaN       NaN
1   53e5ed3c1447d34dc93120a0c73987cd022bf08b  C_kwDOA1Mok9oAKDUzZTVlZDNjMTQ0N2QzNGRjOTMxMjBh...  ...    NaN       NaN
2   8f763b1ebcfa3f6dc62e226c61a5b8be7f141ec0  C_kwDOA1Mok9oAKDhmNzYzYjFlYmNmYTNmNmRjNjJlMjI2...  ...    NaN       NaN
3   053e8cc1c80b573ab2d55f0babf609f778902ead  C_kwDOA1Mok9oAKDA1M2U4Y2MxYzgwYjU3M2FiMmQ1NWYw...  ...    NaN       NaN
4   8cb031a47fe8a9a9072723140f0c3ab2858ac751  C_kwDOA1Mok9oAKDhjYjAzMWE0N2ZlOGE5YTkwNzI3MjMx...  ...    NaN       NaN
(以下、省略)

コミットからコード行数を取得する

次に、コミットのハッシュ値を指定したAPIを使って、コミット毎のコード修正行数を取得してみます。

import requests
import pandas as pd

url = 'https://api.github.com/repos/opencv/opencv-python/commits'

r = requests.get(url)
df = pd.json_normalize(r.json())

for sha in df['sha']:
    print(sha)
    shaurl = url + '/' + sha
    res = requests.get(shaurl)
    dic = res.json()

    if 'stats' in dic.keys():
        print(dic['stats'])
    else:
        print('no stat')

レスポンスは以下の通り、コミット毎のコード修正行数を取得できました。

d0ebd7173f8bd725388dbc1b7c6d7b9f729024c2
{'total': 201, 'additions': 0, 'deletions': 201}
53e5ed3c1447d34dc93120a0c73987cd022bf08b
{'total': 31, 'additions': 10, 'deletions': 21}
8f763b1ebcfa3f6dc62e226c61a5b8be7f141ec0
{'total': 201, 'additions': 0, 'deletions': 201}
053e8cc1c80b573ab2d55f0babf609f778902ead
{'total': 15, 'additions': 15, 'deletions': 0}
8cb031a47fe8a9a9072723140f0c3ab2858ac751
(以下、省略)

ブランチを指定してコード行数を取得する

ブランチを指定したい場合にはパラメータのkeyにsha、valueにブランチ名を指定します。

import requests
import pandas as pd

url = 'https://api.github.com/repos/opencv/opencv-python/commits'
params = {'sha': 'feat/python39'}

r = requests.get(url, params=params)
df = pd.json_normalize(r.json())

for sha in df['sha']:
    print(sha)
    shaurl = url + '/' + sha
    res = requests.get(shaurl)
    dic = res.json()

    if 'stats' in dic.keys():
        print(dic['stats'])
    else:
        print('no stat')

まとめ

GitHub APIを使用してコミット毎のソースコード修正行数を一度に集計できることを確認しました。

-GitHub, Python

Copyright© ITエンジニアへの転身 , 2022 All Rights Reserved Powered by STINGER.