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

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

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

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

実行環境

1
2
$ 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
    レポジトリ名

結果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
[
  {
    "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行目までで定義されているこれの

1
2
3
4
    'popular/referrers',
    'popular/paths',
    'views',
    'clones'

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

This website uses cookies to improve your experience.
このサイトは「Googleアナリティクス」を使用しています。
Googleアナリティクスはデータの収集のためにCookieを使用しています。


Built with Hugo
テーマ StackJimmy によって設計されています。