21
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

岩手県立大学Advent Calendar 2015

Day 3

Nightmare.jsでQiitaのコントリビューション数をスクレイピング

Posted at

岩手県立大学アドベントカレンダー3日目です。 @otukutun が書いてくれてないのでサクッと。

Nightmareがv2(Electronベース)になり、使いやすく感動したのでLIGブログのPV/UUデータ取得を自動化してみた。に書いたんですけど、Nightmareでスクレイピングするのが楽しくなっています。

Qiitaのアカウントのコントリビューション数を取りたい。

QiitaのAPIにユーザーのcontributionを取るAPIってなさそう...?
https://qiita.com/api/v2/docs#ユーザ

そんな気がしたのでスクレイピングしてみました。

Nightmareでスクレイピングしてみよう。

ES6(2015)ですがNode.jsではimport文がまだ実装されてないみたいなのでrequire部分だけ気持ち悪いかもです。



こんな感じでDevToolで確認すると.userPage_contributionCountというセレクタの中身が目当ての数字みたいですね。

qiita.js
'use strict'

const Nightmare = require('nightmare');
const vo = require('vo');
const URL = 'http://qiita.com/'+process.argv[2];
const MY_SELECTOR = '.userPage_contributionCount';

//Qiitaの情報取得
function getInfo(nightmare){
  return nightmare
    .goto(URL)
    .wait(MY_SELECTOR)
    .evaluate((selector) => {
      return document.querySelector(selector).innerText;
    }, MY_SELECTOR);
}

//メインのフロー
vo(function* () {
  let nightmare = Nightmare({ show: true });
  let contribution = yield getInfo(nightmare); //qiitaのコントリビューション数
  yield nightmare.end();
  return contribution;
})((err, result) => {
  if (err) return console.log(err);
  console.log(result);
});

コントリビューション数を調べたいユーザー名を実行時の引数にすればOKです。

$ node qiita.js n0bisuke
2779

めちゃ簡単...!

node-cronとか使って定期実行させつつストック数遷移とかグラフ化したら面白そうですよね。
メンバーのコントリビューション数も取ってランキングとか作れそうですね笑

色々と楽しいことできそうです。

4日目は@otukutunのハズ...!

21
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?