GitHub APIを使ってリポジトリのアクセス数をpythonで取得した

09 November 2016 — Written by Aki
#ソフトウェア#Python#GitHub

GitHubリポジトリのオーナーに公開されているGraphs/Trafficで自分のリポジトリのアクセス記録を過去14日分見られる。

このページの内容はGitHub Developerで説明されているAPIで取得できるので, それを使ってアクセス記録を得るスクリプトをpythonで書いてみた。

実行環境

$ python --version
Python 2.7.5

スクリプト

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, json, functools
from urllib2 import urlopen, Request
# GitHub Traffic API
# https://developer.github.com/v3/repos/traffic/
def openTrafficAPI (owner, repo, token, path):
url = "https://api.github.com/repos/%s/%s/traffic/%s" % (owner, repo, path)
headers = {
'Authorization': 'token %s' % token,
'Accept': 'application/vnd.github.spiderman-preview'
}
return urlopen (Request (url, headers=headers))
# 取ってくるデーター
paths = [
'popular/referrers',
'popular/paths',
'views',
'clones',
]
connections = []
try:
# openTrafficAPI関数の部分適用 (認証情報を環境変数から得て)
fAPI = functools.partial (openTrafficAPI,
os.environ['GITHUB_OWNER'],
os.environ['GITHUB_REPO'],
os.environ['GITHUB_TOKEN'])
# open connections
connections = [fAPI (p) for p in paths]
# JSONパース
datadicts = [json.loads (c.read ()) for c in connections]
finally:
[c.close () for c in connections if c is not None] # 後始末
del connections
# 辞書型のデーターをダンプ
dumps = [json.dumps (d, indent=2) for d in datadicts]
# 結合
print "\n".join (dumps)

使い方

以下の環境変数をセットして、スクリプトを実行してください。

  • GITHUB_TOKEN
    GitHubアクセストークン
  • GITHUB_OWNER
    GitHubオーナー名
  • GITHUB_REPO
    レポジトリ名

結果

[
  {
    "count": 48,
    "referrer": "ak1211.com",
    "uniques": 2
  },
  {
    "count": 38,
    "referrer": "github.com",
    "uniques": 2
  }
]
[
  {
    "count": 30,
    "path": "/ak1211/IR-control-amp/blob/1589504b1af6bafcb82ef90ac7f855417b19bd2f/AudioAmpApplication/AudioAmpApplication/i2c_display.c",
    "uniques": 1,
    "title": "IR-control-amp/i2c_display.c at 1589504b1af6bafcb82ef90ac7f855417b19bd2f \u00b7 ak..."
  }
]

以降省略

出力はスクリプトの18行目から21行目までで定義されているこれの

    'popular/referrers',
    'popular/paths',
    'views',
    'clones'

順で出てくることを確認した。

© 2020 Built with GatsbyStarter created by panr

このサイトに書かれた内容によって生じた損害等の一切の責任を負いかねますので, 予めご了承ください。