6
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

x-rayを使ってgithubの草の情報を取得する

 この投稿ではnode.jsのスクレイピングライブラリx-rayを用いて、Githubの各ユーザーの草(Contributions)の情報を取得する方法とコードを示します。

 投稿時(2016年4月10日)では、

https://github.com/users/<UserName>/contributions

 にアクセスすると、ユーザーごとのContributionsの様子を表す、次のようなSVGが取得できます(この仕様は今後変わる可能性があります)。

 次の画像は私のGithubのContributionsです。

Screen Shot 2016-04-10 at 9.49.33 PM.png

 さて、このSVGをnode.js向けスクレイピングライブラリx-rayを用いて、取得・パースするコードを示します。

 コードは次の通りです。

X-rayのContributionsを取得する
'use strict'
var Xray = require('x-ray');
var x = Xray();

var userName = 'RyotaMurohoshi';
var url = `https://github.com/users/${userName}/contributions`;
x(url, 'rect', [ { count: '@data-count', date: '@data-date' }])((error, result) => {
    if (error) {
        console.log(error);
    } else {
        console.log(result);
    }
}); 

 実行結果例を下記に示します。

実行結果例
[ { count: '0', date: '2015-04-08' },
  { count: '0', date: '2015-04-09' },
  { count: '0', date: '2015-04-10' },
  { count: '0', date: '2015-04-11' },
  { count: '0', date: '2015-04-12' },
  { count: '0', date: '2015-04-13' },
  { count: '0', date: '2015-04-14' },
〜中略〜
  { count: '8', date: '2016-03-23' },
  { count: '4', date: '2016-03-24' },
  { count: '3', date: '2016-03-25' },
  { count: '2', date: '2016-03-26' },
  { count: '2', date: '2016-03-27' },
  { count: '3', date: '2016-03-28' },
  { count: '4', date: '2016-03-29' },
  { count: '1', date: '2016-03-30' },
  { count: '7', date: '2016-03-31' },
  { count: '1', date: '2016-04-01' },
  { count: '1', date: '2016-04-02' },
  { count: '3', date: '2016-04-03' },
  { count: '3', date: '2016-04-04' },
  { count: '1', date: '2016-04-05' },
  { count: '6', date: '2016-04-06' },
  { count: '3', date: '2016-04-07' },
  { count: '3', date: '2016-04-08' },
  { count: '1', date: '2016-04-09' } ]

 x-rayこのように用いることで、ユーザーごとのContributionsの情報を簡潔に取得することが可能です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
6
Help us understand the problem. What are the problem?