MediaWiki Languages Statistics Scripts


このスクリプト一式は、ウィキペディアにおける
http://ja.wikipedia.org/wiki/Wikipedia:全言語版の統計
のページの更新を支援します。

このスクリプト一式についての、バグ報告、改良要望、感想などがありましたら、開発者までお知らせください。
このスクリプト一式は、GNU General Public License (GPL) によりライセンスされるフリーソフトウェアです。
ですので改良を望む方は、自分でGPLにしたがってこのスクリプト一式を自由に改良することもできます。

次の4つのスクリプトを、Rubyインタプリタで実行することができます。
* languages-statistics-taker.rb
* languages-statistics-updater.rb
* languages-statistics-driver.rb
* languages-resource-printer.rb

次の2つは、上記のスクリプトから使われるライブラリです。
* languages-statistics.rb
* wikibot.rb


使い方

スケジューラにより定められた日時に正確にスクリプトを実行したい場合、統計情報を取得した正確な日時を得たい場合は、
あらかじめ、スクリプトを実行するコンピュータの時計を Network Time Protocol (NTP) によりNTPサーバと
同期させておくなどの対応が必要です。

Ruby 1.8.x および JRuby 1.3.1 の環境で動作することが確認されています。
現時点では、Ruby 1.9.x の環境では、(おそらくRuby標準ライブラリもしくはRubyインタプリタのバグのため)
正常に動作しません。

Rubyスクリプトの一般的な起動方法は、次のようになります。
* ruby rubyスクリプトファイル名
* ./rubyスクリプトファイル名 (Unix系システムの場合)
* jruby rubyスクリプトファイル名 (JRubyを使う場合)
* java -jar jruby-complete-1.x.x.jar rubyスクリプトファイル名 (JRubyでjruby-complete-1.x.x.jarを使う場合)

このスクリプト一式の運用方法の例を記します。
なお、ウィキペディアの各言語版のサイトから統計情報を取得して更新用ウィキテキストを作成するのに要する時間は、
1分前後です。

初めてスクリプトを実行する場合は、設定ファイル config.xml をテキストエディタで開いて、
ウィキペディアの利用者名やパスワードなどを適切に設定してください。
リソースファイル resource.xml をテキストエディタで開いて、内容を確認してください。

更新用ウィキテキストを作成し、自分の目で内容を確認した後に、Wikipedia:全言語版の統計 を
更新する場合の運用例を次に記します。
1. languages-statistics-taker.rb を (ruby languages-statistics-taker.rb などとコマンド入力して) 
   実行して更新用ウィキテキストを作成します。
2. コンソールもしくはログ (log.txt) を見て、languages-statistics-taker.rb が正常に終了したかどうかを確認します。
3. 正常に終了しなかった場合は、もし必要があればリソースファイル resource.xml を編集して、
   再度 languages-statistics-taker.rb を実行します。
4. languages-statistics-updater.rb を実行して、Wikipedia:全言語版の統計 の更新を行います。

更新用ウィキテキストの作成と Wikipedia:全言語版の統計 の更新を一括して行う場合の運用例を次に記します。
1. languages-statistics-driver.rb を (ruby languages-statistics-driver.rb などとコマンド入力して) 
   実行します。
2. コンソールもしくはログ (log.txt) を見て、languages-statistics-driver.rb が正常に終了したかどうかを確認します。
3. languages-statistics-driver.rb が正常に終了していたならば、Wikipedia:全言語版の統計 が更新されています。
4. 正常に終了しなかった場合は、コンソールもしくはログを見て、更新用ウィキテキストが正常に作成されたかどうかを調べます。
5. 更新用ウィキテキストが正常に作成される前にエラーが発生した場合は、もし必要があればリソースファイル resource.xml を
   編集して、再度 languages-statistics-driver.rb を実行します。
6. 更新用ウィキテキストが正常に作成された後の、Wikipedia:全言語版の統計 の更新の際にエラーが発生した場合は、
   必要と思われれば時間をおいて、languages-statistics-updater.rb を実行します。

現在の統計ページをもとにしてリソースファイル resource.xml のlanguage要素をファイルに出力する場合の運用例を次に記します。
1. languages-resource-printer.rb を (ruby languages-resource-printer.rb などとコマンド入力して) 
   実行します。
2. 出力ファイルの名前は、resource-languages.xml です。
3. resource-languages.xml の内容を確認して、問題がなければ、その内容を resource.xml にコピーペーストします。

定めた日時に自動的にスクリプトを動かしたい場合は、スケジューラを使う方法があります。
例えば、Unix系システムではcron、Windowsではタスクスケジューラを、使うことができます。
各スクリプトは、終了ステータスとして、正常に実行終了したときには 0 を、
正常に実行できなかった場合は 0 以外を、返します。


動作環境と注意事項

Ruby 1.8.x および JRuby 1.3.1 の環境で動作することが確認されています。
現時点では、Ruby 1.9.x の環境では、(おそらくRuby標準ライブラリもしくはRubyインタプリタのバグのため)
正常に動作しません (異常終了します) 。
このスクリプト一式の開発者は、2009年8月16日時点の Ruby 1.9.x 系列の最新の安定版である
Ruby 1.9.1-p243 のソースコードを、Rubyコミュニティのサイトでからダウンロードして
コンパイルして動作確認をしましたが、同様に正常に動作しませんでした (異常終了しました) 。
この他、Rubyの実装としては、.NET Framework で動作するIronRubyが存在しますが、
IronRubyにおける動作については、未検証です (動作する可能性はありますが、
動作確認を行っていないため、動作するかどうかはわかりません) 。

Rubyは、クロスプラットフォームのオブジェクト指向スクリプト言語です。
システムのデフォルトの環境で導入されていない場合は、システムの種類によっては
 (Debian GNU/Linux など) オプショナルパッケージとして導入できる場合があります。
Rubyの実行環境は、Rubyコミュニティのサイト ( http://www.ruby-lang.org/ ) から
ダウンロードすることができます。
JRubyの実行環境は、JRubyのサイト ( http://jruby.codehaus.org/ ) から
ダウンロードすることができます。
JRuby を使う場合は、Javaの実行環境が必要です。
JRuby 1.1 以降を使う場合は、Java実行環境 (Java SE JRE) のバージョンは 1.5.0 以降である必要があります。

Rubyの実行環境ごとの動作確認状況を以下に記述します。
なお、languages-statistics-taker.rb あるいは languages-statistics-driver.rb を実行すると、
オプショナルの機能として、更新用ウィキテキストをテキストエディタなどを自動起動して表示することができます
 (この機能は、必要がなければ設定ファイルにより無効にすることができます) 。
この機能は、Unix系システムのforkという機能を使って実装されています。
forkが使えないシステムでは、テキストエディタなどの起動を行うことは、できません。

$ Ruby 1.8.7/Linux
安定して動作します。
fork機能が使えるため、テキストエディタなどを自動起動できます。
 (検証環境: Debian GNU/Linux 5.0)

$ JRuby 1.3.1
安定して動作します。
fork機能が使えないため、テキストエディタなどの自動起動はできません。
 (検証環境: Debian GNU/Linux 5.0 、Windows 2000 SP4)

$ Ruby 1.9.1
動作しません。実行中に異常終了します。
 (検証環境: Debian GNU/Linux 5.0 、Windows 2000 SP4)

$ Ruby 1.8.4/mingw32
動作しますが、ときどき実行途中に動作が停止します。
fork機能が使えないため、テキストエディタなどの自動起動はできません。
 (検証環境: Windows 2000 SP4)

$ Ruby 1.8.5/mswin32
動作します。ただしまれに、実行途中に異常終了しました。
fork機能が使えないため、テキストエディタなどの自動起動はできません。
 (検証環境: Windows 2000 SP4)

$ Ruby 1.8.4/cygwin
動作します。ただしたまに、実行途中に異常終了しました。
fork機能が使えるため、テキストエディタなどを自動起動できます。
 (検証環境: Windows 2000 SP4)

$ ActiveScriptRuby 1.8.7(p174) with-winsock2
動作しません。実行中に異常終了します。
 (検証環境: Windows 2000 SP4)

$ IronRuby/.NET Framework
既に述べましたとおり、IronRubyでの動作については、未検証です。

このスクリプト一式の開発者が動作確認を行った限りでは、安定して動作するのは、Ruby 1.8.7/Linux と
JRuby 1.3.1 でした。
おおむね動作すると言えそうなものは、Ruby 1.8.5/mswin32 と Ruby 1.8.4/cygwin ですが、
ときに異常終了することがありました。

JRubyを使う場合は、このスクリプト一式を動かすためだけにJRubyを新規に導入するでしたら、
複数種類あるダウンロードパッケージのうち jruby-complete-1.x.x.jar をダウンロードするのが、
手軽な方法でしょう。

Ruby 1.8.5/mswin32 を使う場合は、このRuby実行環境の他に、スクリプト一式を動作させるためには、
zlib.dllとiconv.dllを別途に入手して導入する必要があります。
Ruby 1.8.4/cygwin を使う場合は、このRuby実行環境の他に、cygwin1.dll 別途に入手して
導入する必要があります。
cygwin1.dllは、Cygwin が導入されているのであれば、すでに導入されています。
Cygwinを導入しない場合は、Cygwinのセットアッププログラムでコンポーネントのダウンロードだけして、
ダウンロードされたファイル群からcygwin1.dllだけをとりだす方法があります。


各スクリプトについて

$ languages-statistics-taker.rb
ウィキペディアの各言語版のサイトから統計情報を取得して更新用ウィキテキストを作成し出力します。
ウィキテキストの作成と出力が正常に行われた場合、終了ステータス 0 を返します。
なんらかの原因で正常に行われなかった場合、終了ステータスとして 0 以外を返します。

$ languages-statistics-updater.rb
languages-statistics-taker.rb が作成し出力した更新用ウィキテキストで、
全言語版の統計ページを更新します。

$ languages-statistics-driver.rb
ウィキペディアの各言語版のサイトから統計情報を取得して更新用ウィキテキストを作成し出力します。
更新用ウィキテキストが正常に作成され出力された場合、そのウィキテキストで全言語版の統計ページを更新します。
統計ページを更新が正常に行われた場合、終了ステータス 0 を返します。
なんらかの原因で処理が中断した場合、終了ステータスとして 0 以外を返します。

$ languages-resource-printer.rb
現在の統計ページをもとにしてリソースファイル resource.xml のlanguage要素をファイルに出力します。
出力ファイルの名前は、resource-languages.xml です。

$ languages-statistics.rb
全言語版の統計のページの更新を支援するライブラリです。

$ wikibot.rb
ボットのライブラリです。

参考までに、このスクリプト一式のRDocドキュメントを提供しています。


動作確認 (テスト) の方法

このスクリプト一式のテストを行う場合は、実際のウィキペディアプロジェクトのウィキペディアサイトを
利用して行うことになるでしょう。
別の方法として、自分のパーソナルコンピュータにローカルで複数言語のMediaWikiウィキを構築して
テストすることについては、難しいと思われます。
理由は、このスクリプト一式が、特別:Sitematrixの機能を必要としており、かつ特別:Sitematrixは
MediaWikiに標準で含まれる機能ではなく拡張機能であり、またウィキメディア財団が運営するウィキでなければ、
特別:Sitematrix拡張機能はおそらく正しく動かないからです。
http://www.mediawiki.org/wiki/Extension:SiteMatrixのページの冒頭に、
"Note: This extension is made for Wikimedia wikis, and will probably not work on any other wiki."
と述べられています。

いずれの方法のテストを行うにしても、設定ファイル config.xmlを、
あらかじめ編集し適切に設定しておくことが必要となります。
すくなくとも、利用者名とパスワードは、自身のアカウントに応じて編集しておく必要があります。

実際のウィキペディアプロジェクトのウィキペディアサイトを利用して行うテストについて、
languages-statistics-taker.rb および languages-resource-printer.rb のテストについては、
ウィキペディアサイトを参照するのみであり、更新は行わないため、
あまり神経を使うようなことはないでしょう。
languages-statistics-updater.rb と languages-statistics-driver.rb のテストについては、
ウィキペディアサイトの更新を行います。
このスクリプト一式が目的とする「Wikipedia:全言語版の統計」の更新を行うのですが、
その代わりに、設定ファイルを編集することにより、更新対象ページを、サンドボックスページなどほかのページとすることも
可能です。

テストのためにサンドボックスページを更新対象とする場合は、config.xmlに次の記述を追加する
必要があります。

  <editTargetPage>Wikipedia:サンドボックス</editTargetPage>
  <editHeader><![CDATA[<!-- この行は編集不可！ この行と次行の【コメント】、次行の【テンプレート呼び出し】は変えないで！-->
<!-- この行は編集不可！ -->{{サンドボックスの冒頭案内文}}

== ここから下に書き込んでください。 ==
]]></editHeader>
 
上記の記述が省略された場合は、スクリプトは「Wikipedia:全言語版の統計」ページの更新を行います。


検討事項

* このスクリプト一式は、Wikipedia:Bot作業依頼/統計ページの更新用botの作成依頼 を受けて開発したものです。
  作業依頼者の方からは、その後、特別:Sitematrix を取得する部分などについては手作業にして良い旨の表明がありましたが、
  その表明前に 特別:Sitematrix を取得する部分などは、既に開発者により実装が終わっていましたので、特別:Sitematrix を
  取得する部分は、このスクリプト一式で実装されたままになっている次第です。
* ウィキペディアの各言語版のサイトから統計情報を取得して更新用ウィキテキストを作成するのに要する時間は、
  1分前後です。
  1分以内で終わるかもしれませんが、1分以上かかるかもしれません。
  各サイトから統計情報を取得するスクリプトは、各サイトに統計情報の要求 (リクエスト) をHTTPで送信開始した日時と、
  各サイトからの返答 (レスポンス) がすべて受信完了した日時の、2つの日時情報を記録しています。
  この記録をもとに、統計ページ更新を行うスクリプトは要約欄にデータ取得時刻を設定しています。
  現在の実装では、すべて受信完了した日時を要約欄に設定しています。
  ですので、仮に統計情報を取得するスクリプトを2009年8月15日00:00 (UTC) に実行したとして、
  要約欄は「統計更新: データ取得時刻 2009年8月15日00:00(UTC)」になるかもしれませんし、
  「統計更新: データ取得時刻 2009年8月15日00:01(UTC)」になるかもしれません。
  例えば、各サイトに要求 (リクエスト) を送信開始した日時を要約欄に設定するよう、スクリプトの実装を変更することは、
  可能です。
* Rubyでパッケージ管理システムの標準として採用されている RubyGems というものがありますが、
  このスクリプト一式では、現時点ではRubyGemsを採用していません。
  RubyGemsを採用してほしいという要望がありましたら、検討いたします。
* このスクリプト一式は2009年8月に公開されましたが、開発者側ではさらにバージョンアップする構想があります。


このスクリプト一式のライセンス

Copyright (c) 2009 AutumnSnow ( http://ja.wikipedia.org/wiki/利用者:秋雪 )
このスクリプト一式は、フリーソフトウェアです。
このスクリプト一式の利用者は、GNU 一般公衆利用許諾契約書 (GNU General Public License) の下で、
このスクリプト一式を、頒布および/あるいは改変することができます。
この利用許諾契約書の複製物は、COPYING.txt の名前のファイルで提供されています。
このスクリプト一式の最新版は、 http://wikimedia-tools.sourceforge.jp で提供されています。


この文書のライセンス

Copyright (c) 2009 AutumnSnow ( http://ja.wikipedia.org/wiki/利用者:秋雪 )
この文書を、フリーソフトウェア財団 (The Free Software Foundation) が発行した
GNU フリー文書利用許諾契約書バージョン 1.2 (GNU Free Documentation License,
Version 1.2; GFDL 1.2) もしくはそれ以降のバージョン、
あるいは クリエイティブ・コモンズ 表示-継承 3.0 非移植
 (Creative Commons Attribution-ShareAlike 3.0 Unported; CC-BY-SA 3.0) の下で、
複製、頒布および/あるいは改変することを、許可します。
変更不可部分は指定しません。表カバーテキストは指定しません。裏カバーテキストは指定しません。
GNU フリー文書利用許諾契約書バージョン 1.2 の複製物は、``GNU Free Documentation License''
 ( http://www.gnu.org/licenses/old-licenses/fdl-1.2.html ) という章に
含まれています。
クリエイティブ・コモンズ 表示-継承 3.0 非移植 の詳細は、http://creativecommons.org/licenses/by-sa/3.0/deed.ja
および http://creativecommons.org/licenses/by-sa/3.0/legalcode を参照してください。

