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で接続すると取得可能である.
今後のことを考えてJavaやScalaで実装したかったのであるが,作るのが面倒なのと既に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の編集履歴のデータをリアルタイムで取得する方法を調査し実際に取得してみた.
編集履歴のデータを取得するにはIRCでirc.wikimedia.orgのサーバの#ja.wikipediaというチャンネルに接続すると取得可能である.
自分で実装が面倒な場合にはwikichangesというnode.jsのライブラリを用いると楽に取れる.
今後
とりあえずストリームで取れるからこれをKafkaにMessageとして投入しようかなと思う.
なのでnode.jsでproducerを作成することを今後行う.そして編集時間をどのように取得するか考える(普通に現在の時刻をmeta情報としていれる?).
見直してないので誤字脱字が半端ないかもしれないです.
間違っているところあれば指摘していただけると助かります.
以上