Help:Pywikipediabot

ウィキペディア日本語版ヘルプページです。


pywikipediabotを準備するのに手助けがほしいなら#wikipedia-ja-bot接続(詳しくはWP:CHATを参照) にくるかpywikipediabot mailing listを使ってください。
pywikipediabot動作画面例。言語間リンクを貼っているところ。

Pywikipediabot (Python Wikipedia Robot Framework) は、ウィキペディアなどのウィキメディア財団のプロジェクトのためのBotスクリプトのセットです。多くの開発者によってPython言語で記述されています。このページでは、Botソフトウェアを使用したい人のためのおおまかな情報を提供します。

セットアップ[編集]

Pythonのインストール[編集]

pywikipediaを使うためには、Pythonバージョン2.4以上が必要です。Pythonバージョン2.3で動くコードも多いですが、2.3での動作確認は行われていません。ただし2011年1月現在、バージョン3には対応していません。

Pythonは、ほとんどのプラットフォーム(Unix、Linux、Mac、Windows)で使えます。

  • WindowsにはActivePythonが便利ですが、やや遅いです。ここからダウンロードできます。
  • Unixには最初からPythonがインストールされているので、インストールする必要はありません(ただし、非常に古いバージョンのUnixの場合には、Pythonがインストールされていなかったり、Pythonのバージョンが古かったりする場合があります。その場合にはアップデートが必要です)。
  • MacでMac OS Xを使っている場合は、インストールの必要はありません。
  • その他の場合、あるいはインストールされているバージョンが古い場合には、https://www.python.org/downloads/ からダウンロードしてインストールしてください。

pywikipediaのダウンロード[編集]

最も簡単な方法は、PyWikipediaBot PyWikipediaBot Nightliesの「pywikipedia - The packages」からダウンロードすることです(ただしこのファイルは前日の時点での最新版です)。古いバージョンが必要な場合はSourceforgeからダウンロードできます。ダウンロードしたファイルを展開します。展開する場所は、できるだけ浅い位置のディレクトリが便利でしょう。

Mac OS Xの場合には、ここにある説明をお読み下さい。ファイルはここからダウンロードできます。"Check out"でコピーが可能です。

SVNを使ったダウンロード[編集]

(上記の前日の時点の最新バージョンではなく)最新のバージョンをダウンロードしたい場合には、SVNが便利です。SVNを使うと、日頃のバージョンアップも非常に簡単です。多くのUnixにはSVNが標準でインストールされています。Windowsの場合は TortoiseSVNを利用しましょう(Microsoft Windows 7の場合は64ビット版がよいでしょう)。Mac OS Xの場合はこの説明を読んでください。

Unixなどで、コマンドラインを使ってBotをチェックアウト(ダウンロード)するには、以下のコマンドを使用します:

上のコマンドを実行すると、カレント作業ディレクトリ(Unixではpwdコマンドか変数$PWDで確認、Cygwinなど他の環境では環境設定で確認できます)に「pywikipedia」という名前で新しいディレクトリが作成されます。

コマンドラインを使ってダウンロードしたファイルを後日アップデートするには、作業ディレクトリをpywikipediaに移動してから、以下を打ちます。

$ svn update

TortoiseSVNなど、コマンドラインツール以外では必要な情報はリポジトリのパスのみです:http://svn.wikimedia.org/svnroot/pywikipedia/trunk/pywikipedia/

Botのメーリングリスト[編集]

Botメーリングリストに登録するのは、良い考えでしょう(こちらを参照)。Botソフトウェアのファイルが更新されるたびにリストにメールが送られるので、新しいバージョンにアップデートする必要があるかどうか確認できます。

アカウント取得[編集]

ボットの運用条件や注意事項については Wikipedia:Bot を参照してください。

大規模な編集を行う場合は、Botのアカウントは通常の利用者と区別するため、専用のアカウントを取得しなければなりません。これは、Botフラグを付与することで最近更新されたページからBotの編集を隠すためです。ウェブブラウザを使ってあなた自身が手動で取得してください。利用者名は、通常「bot」の文字が後ろに付けられることが推奨されます。パスワードはあなた自身のアカウントと別のものがよいでしょう。

user-config.py の設定[編集]

編集可能な環境変数の初期値は config.py にあります。これを直接書き換えるとSVNでのアップデートで支障が出ることがあるため、お勧めできません。値を変更する場合には、同じ階層に user-config.py を作成します。user-config.py だけで設定を上書きしていくことで、初期値に戻したい場合、削除することで対応できます。

アカウントに関する設定[編集]

以下の節では、アカウントに関する設定について説明しています。なお、testfamily.py というプログラムがある場合は、実行することで簡易設定を行うことができます。(説明省略)

ウィキペディアの場合[編集]

メモ帳などのテキストエディタを開きます。

以下のように打ちます:

 mylang = 'xx'

xx には、動作させる言語コードが入ります。日本語版では、"ja"が入ります。

このテキストファイルをuser-config.pyという名前で、ダウンロードしたpyファイルと一緒のフォルダに保存します。

複数の言語で動作させたいなら、コマンドライン引数の-langパラメータで指定できるので、ここでは最もよく使う言語コードを指定しましょう。

user-config.pyでは、Botの利用者名を指定する必要があります。

ウィキペディア日本語版で動作させるとします。「ExampleBot」という利用者名でBotのアカウントを取得しているならば、以下のようにuser-config.pyに追記します。

 usernames['wikipedia']['ja'] = u'ExampleBot'

利用者名の前の'u'は、Unicodeを表しています。詳しくは Python 自体のヘルプを見てください。

複数のwikiで動作させたいなら、以下のように複数の利用者名を指定できます。

 usernames['wikipedia']['de'] = u'BeispielBot'
 usernames['wikipedia']['en'] = u'ExampleBot'
 usernames['wiktionary']['de'] = u'BeispielBot'

管理者権限が必要なスクリプト(speedy_delete.py、redirect.py brokenなど)は、以下のように管理者権限を持つアカウントを追記します。

 sysopnames['wikipedia']['ja'] = u'SysopName'
ウィキペディア以外のウィキサイトの場合[編集]

メモ帳などのテキストエディタを開きます。

以下のように打ちます:

mylang = 'xx'

xx には、動作させる言語コードが入ります。日本語では、"ja"が入ります。

次に以下のように打ちます:

family = 'sitename'

"sitename"は、動作させるサイト名です。

wiktionary、wikibooks、wikiquoteなどやウィキメディア・プロジェクトではないwikitravelなども指定できます。(familiesフォルダに一覧があります。)

Wikimedia Commonsで動作させるなら、"mylang"と"family"に'commons'を指定します。

 mylang='commons'
 family='commons'
 usernames['commons']['commons']='UserBot'
familyフォルダにウィキサイトが無い場合[編集]

ウィキが family フォルダのリストに無い場合は、適切な _family.py ファイルを作成する必要があります。作成に関する説明は省きますので、meta:Pywikipedia bot on non-Wikimedia projectsを参照してください。

この場合でも user-config.py の設定を行ないます。

ウィキ名 Memory Alpha (memoryalpha) の英語版 (en) で動作させるとします。「ExampleBot」という利用者名でBotのアカウントを取得しているならば、以下のように記述します:

 mylang = 'en'
 family = 'memoryalpha'
 usernames['memoryalpha']['en'] = u'ExampleBot'

このテキストファイルをuser-config.pyという名前で、ダウンロードしたpyファイルと一緒のフォルダに保存します。

その他の設定[編集]

当面は安全のため、ボットの速度を落としましょう。user-config.pyput_throttle = 30 いう行を追加します。これはPywikipediaBotの編集間隔の秒数です。デフォルトは10です。

ウィキペディア日本語版では、どんなに早い場合でも10秒以上(毎分6回)の間隔を守らなくてはなりません。Botフラグ無し、かつ、大量編集する場合には60秒以上の間隔を求められます。編集間隔を60秒より大きい値にする場合には、maxthrottle = 120 という行を追加します。これは編集間隔の最大値を制限し、この場合は120秒になります。

Botフレームワークがサポートしているスキンは、Monobook のみです。デフォルトから変更しないようにしましょう。

命令実行のショートカット作成(Windowsユーザ向け)[編集]

Pywikipediabotをマイドキュメントのような階層の深いフォルダにインストールしているなら、Botを動作させるたびにcdコマンドでフォルダに移動するのは、非常に厄介な作業です。

Windowsでは、簡単にBotを動作させるためにコマンドプロンプトを開くショートカットを作成することができます。 以下のステップに従って作成します:

  1. pywikipediaがインストールされているフォルダを開く。
  2. 右クリックのメニューから「新規作成 -> ショートカット」をクリックする。
  3. "cmd.exe"を入力して、「次へ」をクリックする。
  4. ショートカット名には"Pywikipediabot"など相応しい名前を入力する。
  5. 作成したショートカットを右クリックしてメニューを表示して、「プロパティ」をクリックします。
  6. 「ショートカット」タブの「作業フォルダ」の項目に、Pywikipediabotがインストールされたディレクトリへの絶対パスを記述します。
  7. 変更を保存して、ショートカット作成の完了です。

また、Pythonのパスも追加しておきましょう(例えばPythonを「C:\Python」にインストールした場合、Windows XPの場合は「コントロールパネル」→「システム」→「詳細設定」→「環境変数」と進んで、「システム環境変数」の変数「Path」を「編集」で開いて、元の文字列の末尾に「;C:\Python」と追加します)。

使い方[編集]

以上の手順でBotを使用する準備が出来ました。Botの実行には、OSのコマンドラインを使用します。

  • Windowsでは、コマンドプロンプト(cmd.exe)を使います。
  • Macでは、/Applications/UtilitiesにインストールされているTerminal.appを使います。
  • LinuxまたはUnix系OSでは、gnome-terminalKonsolexterm、テキストモードコンソールなど何を使ってもいいです。

まず、Pywikipediabotをインストールしたディレクトリにコマンドで移動します。

cd pywikipedia

動作確認[編集]

まずは正しくインストールされているかどうかを確認するため、既存のプログラムを走らせて見ましょう。この段階では使用申請は必要ありません。これらの確認はウィキペディアでも可能ですが、出来るならば、自分のパソコンに MediaWiki をインストールして確認しましょう。

  • login.py
    ボットをウィキペディアにログインさせるだけのプログラムです。ログインするプロジェクトとログイン名は先ほど作った「user-config.py」から自動で読み込まれます。パスワードはプログラム実行後に手で入力します。Botは、通常ログアウトされることがないので、パスワードを変更しない限りこのプログラムをもう一度実行する必要はありません。
    python login.py
    なお、使用申請していませんので、次のような警告がでるはずですが、今のところは気にする必要はありません。
    Checked for running processes. 1 processes currently running, including the current process.
    Password for user XXXXXX on wikipedia:ja:
    Logging in to wikipedia:ja as XXXXXX
    WARNING: Your account on wikipedia:ja does not have a bot flag. Its edits will be visible in the recent changes and it may get blocked.
    Should be logged in now
    python login.py -test
    ログイン中のウィキ・ファミリーの名前と自分のアカウント名を調べてコンソールに出力します。
    python test.py
    先ほどの警告に加えて、次のように出力されます。
    You are logged in on wikipedia:ja as XXXXXX.
  • サンドボックスの初期化
    Wikipedia:サンドボックスを初期化します。なおこれは編集行為ですので、編集履歴がウィキペディアに残ります。
    python clean_sandbox.py
    先ほどの警告に加えて、次のように出力されます。サーバーと交信するため、やや時間がかかります。
    Sleeping for 7.1 seconds, 2009-02-17 22:49:24
    Changing page [[Wikipedia:サンドボックス]]
    Done.

使用申請[編集]

Botを運用するためには、コミュニティに許可を得る必要があります。許可の基準の厳しさはプロジェクトによって異なります。何の許可もなく自由に運用できるプロジェクトもありますが、ウィキペディア日本語版では、試験運用を行い有用で無害であることを証明して許可を得る必要があります。

スクリプト[編集]

現在利用できるBotのリストと解説ページへのリンク (mediawiki):

  メインBotスクリプト   その他のBotスクリプト   補助プログラム  



コマンドライン引数[編集]

ほとんどのBotスクリプトには独自のコマンドライン引数があり、それぞれのページまたはソースコード上で説明されています。反対に特筆が無い限り以下のコマンドライン引数は、全てのBotに存在します。

-help
共通のBot引数のリスト(このリスト)と、Bot特有のヘルプが表示されます。
-lang:xx
動作させる言語コードをxxで指定します。user-config.pyでの設定より優先されます。
-family:xyz
wikipedia、wiktionary、wikitravelなど動作させるウィキの種類を指定します。user-config.pyでの設定より優先されます。
-log
ログファイル出力を有効にします。ログはlogsディレクトリに保存されます。
-log:xyz
ログファイル出力を有効にします。ファイル名にxyzが使われます。
-nolog
ログファイル出力を無効にします。
-putthrottle:nn
Botがページ編集を保存してから、次の編集まで待機する時間を秒数で指定します。デフォルト値は0です。

例えば、python [スクリプト名].py -family:wikipediaで[スクリプト名]Botをウィキペディアで動作させます。user-config.pyでの設定より優先されます。

バグ報告[編集]

バグ報告する時は、以下の内容を含めてください。:

  • 使用しているPyWikipediaBotのバージョン。最新のSVN改訂においてまだバグが存在するか確認することが推奨される。
  • 使用しているPython (python -v) のバージョンとWindows、Linux、Mac OS XなどOSの情報。
  • 正確な概要。
  • 問題と報告の完全な記述。
  • 使用したスクリプト、サイト名、言語などバグを再現するための詳細情報。
  • ログ出力。

新しいバグの報告は、SourceForgeのbug trackerで行います。

開発[編集]

もし、あなたがBotに、従来のBotには無い新機能を付けたいと思ったなら、誰かプログラマーに頼んでその機能を実装して貰うことが出来ます。或いは自分でBotを改造出来るなら、その方が良いでしょう。Pythonは良くできたプログラミング言語ですし、習得は難しくありません。あなたも挑戦してみましょう。

Tips[編集]

このHelp:Pywikipediabotのページと、wikipedia.pyのページには、あなたが自分のBotを書くに当たって、とても基本的なヒントの数々が記されています。

  • あなたのBotのuser-config.pyの設定を確認してください(#Configuring for Wikipediaも参照してください)
  • 以下のようにしてpywikipedia frameworkをインポートしてください:。
import wikipedia
  • ページを取得するには次のようにしてください。pageNameのところには例えば、"Wikipedia:Bots"や"India"が入ります。
site = wikipedia.getSite()
page = wikipedia.Page(site, u"pageName")
text = page.get(get_redirect = True)
  • ページを書き換えるには次のようにします。
page.put(u"newText", u"Edit comment")
  • pywikipediaのファイルを見ると、様々な手法が見つけられます。replace.pyはpywikipedia入門者にとっても、読むのが比較的簡単でしょう。
  • 使用可能なPageメソッドは全てwikipedia.pyのファイルに記載されています。
  • 他の多くのBotでも利用されているbasic.pyを使うなら、ページの文章をどう編集するかを定義するだけで利用することが出来ます。
  • 反復処理を行うことで(ループ (プログラミング)イテレータを参照)、複数のページに対して処理を行うことが出来ます。pagegenerators.pyを見て、複数のページを返すオブジェクトを確認してください。例えば、CategoryPageGeneratorを使って、Category:プログラミングのカテゴリの中の各ページに対して何かをするには、次のようにします。
import catlib
import pagegenerators
site = wikipedia.getSite()
cat = catlib.Category(site,'Category:プログラミング')
gen = pagegenerators.CategorizedPageGenerator(cat)
for page in gen:
  # この部分で各ページに対して何か処理を行います。例えば次のように。
  text = page.get()

貢献するには[編集]

もし、あなたがBotを改造して、そのパッチをメンテナに投げたいと思ったなら、

  1. 最新版にアップデートします(そうすることで、SVNのリポジトリに既にコミットされている改良点に、あなたの改造をマージします)。
  2. 更新による変更の衝突を解決します("====="等をgrepすればよいでしょう)。
  3. 以下のように入力します。
$ svn diff > svn.diff

あなたが変更しようとした部分のみが変更されているかどうか、diffを再確認してみてください。頭に"?"のついている行は削除されてしまいます。

もし直接、Pywikipediabotの開発者と連絡を取りたければ、svn.diffを開発者に対して投げることもできます。しかし、Pywikipedia bug tracking systemでパッチをチケットに添付する方が望ましいでしょう。

複数のアカウントでの実行[編集]

python wikipedia botを複数のアカウントで実行したくなることもあるでしょう。それには2つの方法があります。

Separate pywikipedia distributions[編集]

One can install completely separate instances of pywikipedia in different directories (1 for each account) and have diferent user-config.py files in each of them. However, when updating the installation via SVN, one needs to run svn update on each folder separately. Also, every installation takes some disk space, which might be a problem on accounts with limited quota.

One pywikipedia distribution with symbolic links[編集]

Let's assume user foo has a current SVN working copy of pywikipedia in /home/foo/pywikipedia. For each of the accounts, he creates a separate directory:

foo@bar:~$ mkdir foobot
foo@bar:~$ cd foobot

Pywikipedia needs then some symlinks to the main code tree created in the working directory:

foo@bar:~/foobot$ ln -s ~/pywikipedia/families
foo@bar:~/foobot$ ln -s ~/pywikipedia/userinterfaces

Then, user-config.py for this account must be created as described in Configuration section above.

Finally, the bot must be logged in the usual way:

foo@bar:~/foobot$ python ~/pywikipedia/login.py

The working directory is ready. The scripts will however require a slight modification to run (the path to the pywikipedia tree must be added to Python's path).

import sys, os
sys.path.append(os.environ['HOME'] + '/pywikipedia')
import wikipedia

That's all. Updating to the newest version of pywikipedia on all account at once is now a matter of running svn update only in the ~/pywikipedia directory.

Botとプロキシ[編集]

ここ(オランダ語)に回避方法の草案が多分あるでしょう。

関連項目[編集]

参考[編集]