技術メモ(仮)

IT系の話や研究,他のことなど話して行けたらいいな~って感じです.ただいまJavaを学習中

Wikipediaの編集履歴をリアルタイムで取得する方法(node.js編)

概要

Wikipediaデータを利用して面白いことをできないか考え中な今日このごろ.
そこで今回はWikipedia編集履歴をリアルタイムで取得できたら世の中のはやりがわかるのではと考えた.
ここではリアルタイムにWikipedia編集履歴を取得する方法についてまとめる.

調査

wikistream

どうすればリアルタイムに取得できるか調査してみた.
その時に全世界のWikipedia編集履歴を見ることが可能なツールが世の中に出ていることを思い出した.
その名はwikistream
全世界のWikipedia編集履歴がストリームで流れるシステム.こう見るとWikipediaすげぇ〜なっていうぐらい編集されている.
これは一体どんな道具を使っているのかgithubを見てみるとwikichangesをというものを利用してることがわかった.もしかするとこれを利用すれば取得することが可能かもしれない.

wikichanges

wikichangesは37カ国の主要の言語のWikipediaから編集履歴のストリームを取得するためのnode.jsのライブラリだそうです.
どうにも特定のIRC channelというものを用いて取得しているみたい.
よくよくWikipediaを調べると編集履歴を取得することが可能チャネルの説明が書いてあるページがあった.
Wikipedia:チャット - Wikipedia

調査結果

irc.wikimedia.orgのサーバに#ja.wikipediaで接続すると取得可能である.
今後のことを考えてJavaScalaで実装したかったのであるが,作るのが面倒なのと既にwikichangesというものがあるのでnode.jsを今回利用し編集履歴を取得する.

wikichangesのインストール

必要なもの
  • node.js
  • irc
  • undersocre
インストール

とりあえずwikichagesをgit cloneしてwikichangesのディレクトリに入る.

$ git clone git@github.com:edsu/wikichanges.git
$ cd wikichages

どうにもircというライブラリとudersocreというライブラリが事前に必要らしい.
そもそもnode.jsを利用するのが初めてなのでどうやってライブラリをインストールするのかわからないw
調べてみるとnpmというモジュール管理ツールがあるらしい.rubyでいうgemとかのことであろう
これを利用すればircやundersocreが楽にインストールできるとのこと.
実際にnpmを用いてインストールしてみた.

$ sudo npm install irc
$ sudo npm install undersocre

これで無事にircとundersocreが入った.
次は本命のwikichagesをインストールする.これも同様にnpmを利用しインストール可能.

$ sudo npm install wikichages

これでwikichagesも入った.
次にデフォルトで入ってあるexampleを実行してみた.

$ node example.js
Q336880 [Thierry Caro] http://wikidata.org/wiki/Q336880
Q15139812 [Mgp17] http://wikidata.org/wiki/Q15139812
Q4721727 [Struway2] http://wikidata.org/wiki/Q4721727
以下省略...

なんか出てきた.どうにもこれが出力結果である.Q&AのQが出てきた感じなのかな?
とりあえずストリームでドバドバ出てきたが自分がほしいものは日本語の編集履歴なのでコレジャナイ感.
どうにもつないでいるチャンネルが違うみたい.先ほどの調査結果よりチャンネルを#ja.wikipediaに変更して再度実行してみた.
ソース

var wikichanges = require("./wikichanges");

w = new wikichanges.WikiChanges({
  ircNickname: 'wikidatachangestest',
  wikipedias: ["#ja.wikipedia"] #この部分を変更
});
w.listen(function(change) {
  console.log(change.page + " [" + change.user + "] " + change.pageUrl)
});

結果

京王閣 [Kanjybot] http://ja.wikipedia.org/wiki/京王閣
ロンコド [エンタシス] http://ja.wikipedia.org/wiki/ロンコド
凧 [Kanjybot] http://ja.wikipedia.org/wiki/凧
遠藤久美子 [Millennia] http://ja.wikipedia.org/wiki/遠藤久美子
ねんどろいど [210.6.149.243] http://ja.wikipedia.org/wiki/ねんどろいど
以下省略...

おー!?とれた.
ちなみにチャンネル部分を変えると英語版(#en.wikipedia)とかも取得できる.
しかしどうにも更新時間が取得できないように思えるのが残念である.

まとめ

今回Wikipedia編集履歴のデータをリアルタイムで取得する方法を調査し実際に取得してみた.
編集履歴のデータを取得するにはIRCirc.wikimedia.orgのサーバの#ja.wikipediaというチャンネルに接続すると取得可能である.
自分で実装が面倒な場合にはwikichangesというnode.jsのライブラリを用いると楽に取れる.

今後

とりあえずストリームで取れるからこれをKafkaにMessageとして投入しようかなと思う.
なのでnode.jsでproducerを作成することを今後行う.そして編集時間をどのように取得するか考える(普通に現在の時刻をmeta情報としていれる?).
見直してないので誤字脱字が半端ないかもしれないです.
間違っているところあれば指摘していただけると助かります.

以上