Github clone数を APIで取得する例

2 min read読了の目安(約2000字

概要:

Github clone数を、APIで取得するメモとなります


環境

  • node 14
  • next.js: 10.0.0

関連

https://qiita.com/naitwo2/items/22cb7089533bb1e03614

https://qiita.com/kz800/items/497ec70bff3e555dacd0


準備

  • token が必要な為、上記参考と同様です

setting > Developer settings > Personal access tokens

  • Generate new token

Select scopesのrepoにチェック 、作成できました。

  • 生成されたToken、メモしておきます

  • cloneの取得

curl -H "Authorization: token 【取得したToken】 " https://api.github.com/repos/【owner】/【repository】/traffic/clones


  • ヘッダに、tokenを設定、週単位の集計の例 / curl
curl -H "Authorization: token 123" https://api.github.com/repos/hoge/repo1/traffic/clones?per=week
  • レスポンス

下記、countの部分が clone数

{
 "count": 20,
 "uniques": 12,
 "clones": [
   {
     "timestamp": "2021-03-08T00:00:00Z",
     "count": 20,
     "uniques": 12
   }
 ]
}

参考のJS / Next.js

https://gist.github.com/kuc-arc-f/f05807e9f07a9dc63cedd891cf45aa9b

LibHeadless.js / get_count_items

LibHeadless.js
  get_count_items: async function(items){
    try{
      var ret = []
      var len = items.length
      for(var i=0; i < len; i++){
//console.log(items[i].name );
        var item = items[i]
        var name = items[i].name
        var url = process.env.GIT_API_URL + `/repos/${process.env.GIT_OWNER}/${name}/`
        url += "traffic/clones?per=week"
//console.log(url)
        var response = await fetch(url, {
          method: 'GET', headers: { 'Authorization': 'token ' + process.env.GIT_TOKEN },
        });
        var status = await response.status
        if (status === 200) {
          var json =  await response.json()
          item.count = json.count
          item.uniques = json.uniques
//console.log(json );
          ret.push(item)
        }
      }
//console.log(ret );
      return ret
    } catch (err) {
      console.log(err);
      throw new Error('error, get_count_items');
    } 
  },

....