Pywikibotは、Fandomでよく利用されているボットスクリプトの1つです。コマンドを指定することで、MediaWikiのAPIを利用して、たくさんの編集を一度に行うことなどができます。Pywikibotは汎用のプログラミング言語であるPythonで書かれています。
以下は、2016年8月版時点のバージョンに基づいています。
セットアップ前の準備[]
Pythonのインストール[]
- 詳細はPython Documentation contentsをご覧ください。
以下のサイトからPython 3.5.x(最新版)をダウンロードし、インストールしてください。
Python バージョン 3.5以降がインストール済みの場合、この手順は必要はありません。[1]
Windowsをご利用の場合、環境変数の設定を行います。システムのプロパティ>システム詳細設定>環境変数>システム変数 から、Pathの変数値に新規に、Pythonのインストール先のディレクトリとpip.exeが格納されているディレクトリ(Scriptフォルダ内)を追加してください。詳細はPython Documentation contents - 3. Windows で Python を使うをご覧ください。
Pythonのバージョンは、ターミナルに以下のコマンドを入力することで確認できます。Pythonが正しくインストールされていない場合、エラーメッセージが表示されます。
python -V
Pywikibotのインストール[]
- Pywikibot core[2]をPywikibot Nightliesからダウンロードして、適当なフォルダに解凍します。[3]
- ここでは、
C:
直下に解凍し、フォルダ名をcoreからPybotに変更したとします。この場合、Pywikibotのフォルダは以下の場所になります。C:\Pybot
- ここでは、
ターミナルを開く[]
- ターミナル (Terminal) を開きます。
- いずれの場合も、Pywikibotをインストールしたディレクトリにコマンドで移動して使用します。例えばPywikibotを C:\Pybot にインストールした場合は、ターミナルを開いて以下のコマンドを入力します。
cd C:\Pybot
Windowsの場合[]
ターミナルのフォント設定[]
Windowsの既定のターミナルであるコマンドプロンプト (cmd.exe) は、Unicode対応が十分とは言えません。日本語などUnicodeによる出力が必要な言語でPywikibotを使用する場合、フォントの設定が必要です。
以下の設定を行うかわりに、ConEmu Windows consoleなど、別のターミナルを使うこともできます。
- コマンドプロンプトの一番上のバーを右クリックし、プロパティを選びます。
- プロパティ画面のフォントタブを開きます。
- 日本語対応のTrueTypeフォント (TTのアイコンがついているフォント) を選びます。
- Windows 10で、MSゴシックを使っているのに日本語が文字化けしている場合、一度他のフォントに変更してから戻すと直るようです。
- 一覧に表示されていないフォントを使いたい場合、レジストリを編集する必要があります。
ターミナルの文字コード設定[]
以下のコマンドを入力して、文字コードをUTF-8へ変更します。
chcp 65001
- ※ ショートカットの作成を行う場合、この手順は不要です。
ショートカットの作成[]
ターミナルでのいくつかの作業を飛ばせるよう、ショートカットを作成します。(Windowsのみ)
- 作業フォルダに移動する手順を飛ばせるようになります。
- 文字コードの変更を飛ばせるようになります。
- Pywikibotをインストールしたフォルダで右クリックし、 新規作成>ショートカット を選びます。
- 「ショートカットの作成」ウィザードで、リンク先を cmd.exe (または使用したいターミナルのパス) に指定し、ショートカットの名前をつけます。
- 作ったショートカットを右クリックし、プロパティを開きます。
- 作業フォルダにPywikibotのフォルダをパスで指定します。(
C:¥Pybot
など) - 起動時に文字コードが UTF-8 になるよう、リンク先 に以下を追記します。[4]
/K "chcp 65001"
- 作ったショートカットをクリックして、Pywikibotフォルダのパスが表示されたら成功です!
- 必要に応じて、ショートカットを好きな場所へ移動しましょう。
セットアップ[]
requestsモジュールのインストール[]
- ターミナルで以下のコマンドを入力し、requestsモジュールをインストールしておきます。
pip install requests
Familyファイルの生成[]
- ターミナルで以下のコマンドを入力し、ボットを使用したいコミュニティのfamilyファイル (ボットを使用するウィキの登録に使います) を生成します。
python generate_family_file.py
- WikiのURLを聞かれます。
Please insert URL to wiki:
- 使用したいコミュニティのURLアドレス[5] を入力し、Enterを押します。
- 例えば、CommunityTest Wikiaなら、
http://communitytest.fandom.com/wiki/CommunityTest
- または
http://communitytest.fandom.com
- です。
- 続けて、Family名をつけるように表示されます。
Please insert a short name (eg: freeciv):
- アルファベットで適当なFamily名をつけましょう。
- 使用するPywikibotのバージョンによって、アンダーバー(_)などの記号があるとエラーが起こる場合があります。
- 例えば、CommunityTest Wiki なら、次のように入力し、Enterを押します。
communitytestwiki
- 登録したコミュニティが言語間リンクを利用できる場合、インターウィキマップを生成するか聞かれます。
Do you want to generate interwiki links?This might take a long time. ([y]es/[N]o/[e]dit)
- 言語間リンクを追加したり、他言語のコミュニティも使用したりしたい場合や、よく分からない場合は、
y
と入力し、インターウィキマップも生成しておきましょう。
y
- 特定の言語のコミュニティでのみ利用する場合は、
n
と入力します。
- familyファイルが、
<Family名>__family.py
という名前で families サブディレクトリ (/pywikibot/families
フォルダ) に追加されます。
- 先ほどの例だと、
communitytestwikia_family.py
になります。
Writing pywikibot/families/<family名>_family.py...
- 他にも利用したいコミュニティがあれば、Familyファイルの作成を繰り返してください。
user-config.py の生成[]
次に、ボットを利用するプロジェクト (コミュニティ) と自分のボットのユーザー情報を、ユーザーファイルに登録します。
- ターミナルで以下のコマンドを入力し、ユーザーファイル (user-config.py) を生成します。
python generate_user_files.py
- ボットを利用するプロジェクトのfamily名を聞かれます。
Select family of sites we are working on, just enter the number or name (default: wikipedia):
- 一覧の中から当てはまる番号を入力します。先ほど生成したfamily名もあるはずです。
- 続けて、どの言語のプロジェクトで使用するか聞かれます。
The language code of the site we're working on (default: en):
- 表示された言語コードの中から選んで入力します。例えば、英語は "en"、日本語は "ja" です。例は、日本語の場合です。
ja
- 次に、上記で指定したプロジェクトで使用するボットのユーザー名を聞かれます。
- 他のプロジェクトや、プロジェクトの別の言語も登録するか聞かれます。
Do you want to add any other projects? ([y]es, [N]o):
- 続けて登録する場合は
y
を入力し、同じように登録します。
- 登録を終える場合は
n
を入力します。Enterを押すと、BotPasswordを設定するか聞かれます。BotPasswordとはapiから編集する際の専用パスワードのことです。登録しない場合は、n
を入力します。'C:\Pybot\user-config.py' written.
- これで生成が完了しました。
ボットパスワードを設定する場合[]
ボットパスワードを登録しておくと、ログインする際にパスワードを入力する手順を飛ばせます。登録する場合は、特別:BotPasswordsから生成してください。生成するには、生成対象のユーザー名(ここだと、UsernameBot)を入力し、その後、生成する際にどの権限を許可するか聞かれますが、最低限として、「多量の編集」「既存のページを編集」「保護されたページを編集」「ページを作成、編集、および移動」にチェックを入れてください。これを終えると生成完了です。生成完了の画面をスクリーンショットするか、メモするなどをして大切に保管し、安易に他のユーザーに教えないでください。
Do you want to add a BotPassword for UsernameBot? ([y]es, [N]o, [q]uit):
y
を入力します。Enterを押すと、先程入力した生成対象のユーザー名について聞かれます。BotPassword's "bot name" for UsernameBot:
- ここでは先程の完了画面で表示されたユーザー名の@以前の文字列を入力してください。@以降は自動で補完されます。ここでは、UsernameBotになります。
BotPassword's "password" for "UsernameBot" (no characters will be shown):
- 入力し終えたら、生成されたボットパスワードについて聞かれます。先程作成されたボットパスワードを入力してください。パスワードは表示されません。誤字脱字が気になる場合は、この後生成される
user-password.py
をテキストエディタで編集することで変更可能です。'C:\Pybot\user-config.py' written.
'C:\Pybot\user-password.py' written.
user-password.pyの編集[]
このファイルはボットパスワードを登録すると生成されます。ここには登録した情報が含まれています。テキストエディタで編集することで変更できます。
('<bot名>', BotPassword('<ボットパスワード生成に使用したボット名>', '<ボットパスワード>'))
エラーが出る場合は、パスワードやユーザー名が間違っていないか確認してください(どうやらボットパスワードを登録しないとログイン時にエラーが出ることもあるようです)。
user-config.py の追加設定[]
以下の設定は、Pywikibotフォルダのuser-config.pyを、テキストエディタ[7]で編集することで行えます。
言語コード指定[]
Pywikibotで、日本語などのアスキー文字以外の文字を扱うと、エラーが起こる場合があります。[8] その場合は、Pywikibotフォルダのuser-config.pyをテキストエディタで編集してください。
user-config.pyを開いたら、文字コードをUnicode (BOMなし) に設定します[9]。文章の1行目に以下の記述がなければ、追加します。
# -*- coding: utf-8 -*-
また、user-config.pyの
# ############# LOGFILE SETTINGS ##############
の上の行に、
#Transliteration support
transliteration_target = None
と追記し、保存してください。[10]
以上の編集を行ってもエラーが起こる場合は、先ほどの行に続けて
console_encoding = 'utf-8'
textfile_encoding = 'unicode_escape'
sort_ignore_case = True
を追加してみてください。[11]
プロジェクトfamilyに関する設定・編集[]
# register_family_file(family_name, file_path)
という行があります。その下に、familyに関する設定があります。例えば、以下のようになっています。
# If you use either of these functions to define the family to work on by
# default (the ‘family’ variable below), you must place the function call
# before the definition of the ‘family’ variable.
family = 'communitytestwiki'
# The language code of the site we're working on.
mylang = 'en'
# The dictionary usernames should contain a username for each site where you
# have a bot account. If you have a unique username for all languages of a
# family , you can use '*'
usernames['communitytestwiki']['en'] = 'Usernamebot'
family = '<family名>'
の行は、現在ボットでの編集対象になっているプロジェクトfamilyです。mylang = '<言語コード>'
の行は、編集対象になっているプロジェクトの言語コードです。usernames
の行は、プロジェクトのfamily名と、それに対応するユーザー名 (基本的にはボットアカウント名) です。
アドミンアカウントの登録とログイン[]
アドミン権限のあるアカウントの情報を登録したい場合、テキストエディタでのuser-config.pyの編集が必要です。 アドミンアカウントを登録すると、ページの削除やロックされたページの編集などが行えます。
usernames['<family名>']['<言語コード>'] = '<ボットアカウント>'
の次の行に、以下の内容を追記します。
sysopnames['<family名>']['<言語コード>'] = '<アドミンアカウント>'
以下は一例です。
sysopnames['communitytestwiki']['en'] = 'Usernamebot'
忘れずに上書き保存をしましょう。
ボットアカウントにアドミン権限がある場合、アドミンアカウントはボットアカウントと同じにすることができます。ただし、そのアドミンアカウントにボットフラグがある場合、ページの削除などを行った場合でも、既定では最近の更新に表示されなくなりますのでご注意ください。ボットフラグのあるアカウントで、コミュニティでの相談・報告なしに大量のページを削除することは、歓迎される行為とは言えません。
複数のプロジェクトfamilyの管理[]
既定の user-config.py をテキストエディタで編集することで、複数のプロジェクトfamilyを管理することができます。 この方法では、Pywikibot用のフォルダをいくつも作る必要がありません。
#プロジェクトfamilyに関する設定・編集のコードに基づき、編集してみてください。(アドミンアカウントについては、#アドミンアカウントの登録とログインをご覧ください。)
- 新しいfamilyを追加する場合、まずfamilyファイルの作成を行います。
- その後、プロジェクトとボットアカウント、必要があればアドミンアカウントの情報を書き加えます。
- もちろん、登録済みの情報を修正することもできます。
以下は一例です。
# If you use either of these functions to define the family to work on by
# default (the ‘family’ variable below), you must place the function call
# before the definition of the ‘family’ variable.
family = 'cc'
# The language code of the site we're working on.
mylang = 'ja'
# The dictionary usernames should contain a username for each site where you
# have a bot account. If you have a unique username for all languages of a
# family , you can use '*'
## Community Central ##
usernames['cc']['ja'] = 'Usernamebot'
sysopnames['cc']['ja'] = 'Usernamebot'
usernames['cc']['de'] = 'Usernamebot'
usernames['cc']['en'] = 'Usernamebot'
usernames['cc']['es'] = 'Usernamebot'
usernames['cc']['pt'] = 'Usernamebot'
usernames['cc']['ru'] = 'Usernamebot'
usernames['cc']['zh'] = 'Usernamebot'
## Templates Wiki ##
usernames['tmpl']['ja'] = 'Usernamebot'
usernames['tmpl']['en'] = 'Usernamebot'
## Wikia Language Brigade ##
usernames['wlb']['en'] = 'Usernamebot'
なお、登録しておけるプロジェクトfamilyに制限はありません。
ログイン[]
さあ、PywikibotからFandomアカウントにログインしましょう!
- ターミナルに以下のように入力します。login.pyの.pyは省略することができます。また、ボットパスワードを登録しているとパスワード入力を省けます。
python pwb.py login.py
- 以下のようなパスワードを聞くメッセージが表示されます。
Password for user <あなたのBotアカウント> on <communitytestwiki>:<en> (no characters will be shown):
- ログインパスワードを入力してください。入力した文字は表示されません。
- 入力してEnterキーを押すと、パスワードが合っていれば以下のようなメッセージが表示されます。
Logging in to communitytestwiki:en as <あなたのBotアカウント> via API.
Should be logged in now
おめでとうございます! これで、Botスクリプトを動かす準備ができました。
複数のプロジェクトにログインする[]
複数のfamilyプロジェクトをまたいでPywikibotを利用したい場合、以下のコードを入力します。
python pwb.py login.py -all -pass
全てのアカウントについて、パスワードを入力する必要があります。
Pywikibotを使用するプロジェクトのfamilyを変更する場合、利用するスクリプトのコード (例: category.py
) に続けて、以下のコードを入力します。
-family:<family名>
(例: -family:cod
)
スキン[]
- Pywikibot compat は、バージョンによって、Monobookスキンにしか対応していないようですが、Monobookスキンのサポートは終了しています。こちらのヘルプページで主に扱っているPywikibot core は、Fandomのスキンに対応しています。[1]
スクリプト[]
Pywikibotでは、多くのスクリプトが利用できます。[12] そして、ほとんどのスクリプトは、スクリプト間で共通のコマンドライン変数をいくつか入力するだけで利用することができます。
Windows以外のOSでは、以下のコマンドでスクリプトを作動させます。
python pwb.py <スクリプト名>.py -<引数1> -<引数2> -<引数3>...
<スクリプト名>.py
の .py は、省略可能です。
Windowsでは、ほとんどの環境において、"python" を省略することができます。 つまり、以下のコマンドでも、スクリプトを作動することができます。
pwb.py <スクリプト名>.py -<引数1> -<引数2> -<引数3>...
以下は、delete.py を cat:"削除候補"、pt:0、always の3つの引数付きで作動する場合の例です。
python pwb.py delete.py -cat:"削除候補" -always -pt:0
スクリプトが作動し始めると、途中で何らかの入力を求められることがあります。その場合、編集は中断されます。
全ページでの処理が終わると、スクリプトが閉じ、ターミナルにコマンドが入力できるようになります。
以下に、Fandomのコミュニティでよく利用されるスクリプトをご紹介しています。全スクリプトの一覧は、mw:Manual:Pywikibot/Scripts MediaWikiでご覧いただけますが、Wikimediaでのみ利用できるものや、ほとんどのウィキではあまり役に立たないものも多く、解説も十分ではない点にご注意ください。
本文編集[]
以下のスクリプトを使うことで、プロジェクト (ウィキ) の本文を一括して編集することができます。主に、リンクの張り直しや、新しいテンプレートの追加などが行えます。
add_text.py[]
python pwb.py add_text.py <parameter> -text:"<text to be added>" [-up] [-except:"<regex>"] -pt:0 -always
このスクリプトは、特定のページの最下部に文章を追加させることができます。編集するページは、スクリプトを起動する際に、コマンドラインの引数によって指定します。また、必要に応じて、以下の2つの引数を利用することもできます。
- -up (no input) : この引数を追加すると、文書をページの (最下部ではなく) 最上部に追加させることができます。サイドアイコンテンプレート (例: sideicons) や、インフォボックスを追加する時は、こちらが便利です。
- -except (正規表現を使用) : ページ最下部 (-up 指定時は最上部) 正規表現を用いて指定された文書が存在しているかを確認します。指定された文書がある場合、そのページの編集は飛ばされます。
replace.py[]
python pwb.py replace.py "text to be replaced" "text to replace with"
このスクリプトは、指定したテキストを置き換えます。"-search" は有効ではないため、 "-cat" (カテゴリ指定) などとあわせて使用します。
revertbot.py[]
python pwb.py revertbot.py
誤ったボット編集をしてしまったとき、このスクリプトを使います。Ctrl + C キーを押すか、ターミナルのウィンドウを閉じるまで、そのボットの編集を巻き戻します。自分のボットアカウントでログインし、このスクリプトを用いることで、ボット編集前の状態に復元することができます。絶対に、このスクリプトを作動したまま放置しないでください。
template.py[]
python pwb.py template.py "<廃止したいテンプレート>" "<新しい名前のテンプレート>" -pt:0 -always
このスクリプトで、テンプレート名の置き換えをすることができます。例えば、Wiki上の全ての{{廃止したいテンプレート}} を {{新しい名前のテンプレート}} に置き換えます。
python pwb.py template.py "<廃止したいテンプレート>" -remove -pt:0 -always
{{廃止したいテンプレート}} を削除し、Wiki上のそのテンプレートを全て取り外すことができます。
Wikiの整備[]
以下のスクリプトは、Wiki全体の技術的な問題点を確認・修正するために使用します。定期的に (FF Wikiなど規模の大きいWikiでは、2か月に1回程度) 利用することをお勧めします。
cosmetic_changes.py[]
python pwb.py cosmetic_changes.py -start:! -pt:0 -always
ウィキテキストの構文や体裁を修正することができるスクリプトです。ビジュアルエディタユーザーの多いWikiでは、特に重宝します。ビジュアルエディタ編集により作成される、不要なスペースやHTML要素を修正することができるためです。他のスクリプトと併用でき、修正があった場合、編集内容の要約には、"; cosmetic changes"
と併記されます。
このスクリプト単体でも作動させることはできますが、読者が見て分かるような変更を行うわけではなく、サーバーへの余計な負荷がかかることになるため、これのみでの使用は行うべきではありません。 テスト利用時以外は、他のスクリプトと一緒に作動させるようにしてください。また、テスト利用時も、いくつかの編集が正常に行われていることが確認できたら、Ctrl + C を押して作動を中止させるようにしてください。
interwiki.py[]
言語間リンクの追加・修正を行うスクリプトで、Pywikibotの中では複雑なスクリプトの1つです。詳細はMediaWikiの解説をご覧ください。
python pwb.py interwiki.py "<ページ名>"
(<ページ名>
には言語間リンクのあるページを指定) と入力すると、このスクリプトは、そのページがリンクしている言語間リンクから、他の言語間リンクを辿り、該当する全ての多言語ページをまとめます。その後、以下のいずれかの動作をします。
<対象のプロジェクト>:<対象の言語>
(ログインしたWiki) からリンクしていない言語がある場合、ページ下部に言語間リンクを追加します。<対象のプロジェクト>:<対象の言語>
から存在しないページへの言語間リンクがあった場合、そのリンクを削除してもよいか尋ねるエラーメッセージを返します。- 複数の言語ページがあり、それぞれが言語間リンクで異なるページ (主に曖昧回避ページ) に繋がっている場合、手動で修正することを勧めるエラーメッセージを返します。
続けて、他の言語のページからリンクしていない言語間リンクがある場合、WARNING: メッセージを返します。例えば、以下のようなメッセージが表示されます。
======Post-processing ======
No changes needed on page WARNING: communitytestwiki: does not link to
このメッセージが返された場合、手動で言語間リンクを修正することができます。
この機能は、(1つ以上の) 言語間リンク (<対象のプロジェクト>:es
など) を持つ新しいページを作成した際に、対象のプロジェクトの他の全ての言語ページを自動で追加したい場合に便利です。
しかし、Pywikibotが重宝するのは、数百、数千のページを一度の操作で編集したい場合です。
python pwb.py interwiki.py -start:! -autonomous -pt:0 -always
python pwb.py interwiki.py -cat:"<カテゴリ>" -autonomous -pt:0 -always
一括して編集する場合、上の例のような選択用パラメーターがよく使われています。
1つ目のコードは、<対象のプロジェクト>:<対象の言語>
の全ページを、2つ目のコードは、指定したカテゴリの全ページを、
確認し、言語間リンクを補充します。
この場合、上記のスクリプトの動作1 (言語間リンクの追加) に基づいて編集を行い、動作2と3 (除去すべき無効な言語間リンク、修正すべき複数言語での言語間リンク) についてはautonomous_problems.dat
に一覧を出力します。Ctrl + C でボット編集が中断された場合、data/interwiki-dumps
フォルダ内のテキストファイルに記録されます。そのため、以下のコードを用いて、中断したページからボット編集を再開することができます。
python pwb.py interwiki.py -restore -autonomous -pt:0 -always
上記の一括処理を行ったページについて、動作2と3による修正をするには、以下のコードを用います。
python pwb.py interwiki.py -file:data/interwiki-dumps/<ファイル名>.txt
他の言語のウィキ (<対象のプロジェクト>:es
や <対象のプロジェクト>:fr
など) からの言語間リンクに、ログファイル logs/interwiki.log
を利用することもできます。以下のコードを用います。
python pwb.py interwiki.py -warnfile:logs/interwiki.log -autonomous -pt:0 -always
このコードは、<対象のプロジェクト>:<対象の言語>
(A) から <対象のプロジェクト>:<ある言語>
(B) にリンクし、ログに記録されている場合、対象の言語 (A) にログインしたまま、<対象のプロジェクト>:<ある言語>
から <対象のプロジェクト>:<対象の言語>
への言語間リンクを追加します。ただし、この作業を行う場合、他の言語のウィキで、それぞれのウィキ (の管理者、Fandomコミュニティのアドミン) からボット操作が許可されていることが望ましいです。
この他にも、interwiki.py には便利な機能があります。詳しくは、MediaWikiのマニュアルをご覧ください。
selflink.py[]
python pwb.py selflink.py -start:!
そのページ自体へのリンクがはられているページをウィキから探し、手動で修正を行います。ウィキ全体を確認するために大量の処理を行うため、長時間作動させることになる場合があります。
table2wiki.py[]
python pwb.py table2wiki.py "<page name>" -pt:0
python pwb.py table2wiki.py -start:! -pt:0
HTMLコードのテーブル (表) を、ウィキテキストに変換します。敢えてHTMLテーブルを利用していることがあり、また、スクリプトが誤動作する可能性もあるため、絶対に -always 引数を利用しないでください。必ず、1つ1つの編集を確認してから適用させてください。
redirect.py[]
python pwb.py redirect.py both -pt:0
二重転送 (リダイレクト)を管理するためのスクリプトです。二重・三重の転送ページを修正し、無効な転送ページを(管理者権限、Fandomコミュニティのアドミン権限があれば) 削除したり、(権限がなければ) 手動で修正することができます。
"redirect.py both" がうまく動作しない場合、"redirect.py broken" が使用できないことが原因として考えられます。[13] "redirect.py double" を利用してみてください。
python pwb.py redirect.py double -pt:0
カテゴリ[]
カテゴリを管理するスクリプトです。
category.py[]
このスクリプトは、カテゴリを管理することができ、様々な機能があります。このページでは、Fandomコミュニティでよく利用される機能に絞ってご紹介します。詳細はMediaWikiの解説をご覧ください。
python pwb.py category.py add <引数> -pt:0 -always
このコマンドは、引数に合うページの一覧を取得し、カテゴリ名を入力すると、それらのページに指定したカテゴリを追加します。
python pwb.py category.py remove -pt:0 -always
このコマンドは、カテゴリ名を入力すると、指定したカテゴリを該当する全ページから除去します。
python pwb.py category.py move -from:"[カテゴリ名1]" -to:"[カテゴリ名2]" -pt:0 -always
このコマンドは、カテゴリ1に属す全ページを、カテゴリ2に移動します。また、アドミン権限があれば、古いカテゴリページを削除します。アドミン権限がない場合は、テンプレート:Deleteのようなテンプレートを利用し、削除すべきページであることを示すようにすると、アドミンがそのページを削除することができます。
通知[]
整備用スクリプト同様、以下のスクリプトも定期的に利用することをお勧めします。ただし、こちらのスクリプトは問題を見つけることはできますが、自動的に修正することはできません。タグ付けされたページを、手作業で修正する必要があります。
lonelypages.py[]
python pwb.py lonelypages.py
孤立しているページ (他のページからリンクされていないページ) に、{{cleanup|Needs to be linked to}}を追加します。
weblinkchecker.py[]
python pwb.py weblinkchecker.py -start:!
このコマンドで、Pywikibotディレクトリの deadlinksフォルダにdeadlinks-<Family名>-end.dat ファイルを生成し、外部リンクが張られている全ページのうち、それらのリンクが404等のエラーを返したページを記録します。このスクリプトは多くのページを処理するため、作動時間が長くかかります。
python pwb.py weblinkchecker.py -repeat
このコマンドで、deadlinks/deadlinks-<Family名>-end.dat に記録されたページにリンク切れがないか確認することができます。もし、weblinkchecker.pyを利用した1週間後に、まだ404エラーを返すようであれば、他の編集者がリンクを修正できるように、トークページでリンク切れを知らせると良いでしょう。
管理 (アドミン用)[]
以下のスクリプトは、アドミンアカウントで利用する必要があります。あなたがそのコミュニティのアドミンで、なおかつフォーラムなどでコミュニティの同意を得られた場合のみ、使うようにしてください。 (コミュニティで告知をせずに利用することは避けましょう。ページを誤って削除してしまっても、その編集はボットフラグによって最近の更新に表示されないため、告知がなければ誰も気づくことができなません。)
delete.py[]
python pwb.py delete.py <parameter> -summary:"<summary>" -pt:0 -always
指定したパラメーターの条件を満たす全ページを削除します。アドミン権限が必要です。
よく利用されるのは、-file パラメーターです。例えば、不要になった説明ページの画像や、使用されていないファイルを削除することができます。
-cat:"削除候補" (-cat:"Candidates for deletion") とカテゴリを指定すると、全ての削除候補ページを削除します。ただし、他のページで使用されているファイルも削除されてしまうので、安易な利用はお勧めできません。(なお、Template:SDのようなテンプレートを利用しているコミュニティでは、そのテンプレートを使用しているページも削除されます。)
また、このスクリプトを利用する場合は、他のユーザーがdeletion logを見た際に、削除理由を確認することができるよう、必ず編集内容の要約を記入してください。
python pwb.py delete.py undelete <parameter> -summary:"<summary>"-pt:0 -always
削除されたページを復元する場合は、このコマンドを使います。たいていの場合、-file パラメーターとともに利用されます。revertbot.pyと似たスクリプトですが、こちらは削除されたページにのみ適用されます。
protect.py[]
python pwb.py protect.py <parameter> -edit:"<protection level>" -move:"<protection level>" -summary:"<summary>" -pt:0 -always
指定したパラメーターの条件を満たす全ページを保護します。アドミン権限が必要です。
保護レベルは、sysop (アドミン (管理者) のみ)、autoconfirmed (新規利用者と匿名利用者を禁止)、none (全ての利用者を許可) から指定します。
-edit はページ編集、-move はページ移動の保護レベルを変える場合に指定します。
ページ編集の保護レベルの初期値は、記事ページでは none です。(MediaWikiページについては、このスクリプトからは変更できません。) 詳細は、保護をご覧ください。
ページ移動の保護レベルの初期値は、autoconfirmedです。
- 荒らしへの対処策
ソックパペットを使用した執拗な荒らしへの対処の1つとして、対象が荒らしを諦めてコミュニティから立ち去るまで、保護レベルを autoconfirmed まで上げることをお勧めします。ほとぼりが冷めたら、保護レベルを none に戻します。
パラメーター[]
パラメーター (引数、またはオプション) を設定することで、編集するページや、編集内容の要約の内容など、ボット編集について、編集内容に応じて細かく指定することができます。 まずは、以下の例をご覧ください。
python pwb.py add_text.py -catr:"利用者" -text:"{{RailModule|title=Facts|content=このユーザーはすばらしい編集者です!}}" -up -except:"{{RailModule|Wikiの編集ありがとうございます!" -ns:2 -summary:"日頃の編集に感謝" -pt:0 -always
この複雑なコマンドについて、それぞれのパラメーターの意味を以下に解説します。
python
: ターミナルに、以下が /usr/bin/python のコマンドであることを伝えています。(Windowsでは不要です。)add_text.py
:
ターミナルが稼働しているディレクトリ内の add_text.py スクリプトを使用します。
-catr:"利用者"
: カテゴリ:利用者とそのサブカテゴリに適用します。-text:"{{RailModule|title=Facts|content=このユーザーはすばらしい編集者です!}}"
: Template:RailModuleを使用し、日頃の編集を讃えるメッセージを該当ページに追加します。-up
: -text で指定した内容を、記事の上部に追加します。(add_text.py の規定値)-except:"{{RailModule|Wikiの編集ありがとうございます!"
: ちょっとしたRegExです。既に{{RailModule
やWikiの編集ありがとうございます!
が含まれるページを該当ページから外します。-ns:2
: ユーザー: 名前空間のページのみを編集対象とします。-summary:"日頃の編集に感謝"
: 編集内容の要約欄に「日頃の編集に感謝」と入力します。-pt:0
: 連続編集の待機時間をなくします。初期設定は10 (秒) です。-always
: ボット編集中に確認キー "y" を押さずに保存します。
注: パラメーター内で「"」を使用したり、RegEx内で「|」を使用したりする必要がある場合は、エスケープシーケンスを用いて、それぞれ
「\"」や「\|」と入力します。エスケープシーケンスにより、「"」や「|」のプログラム言語としての意味を無効にし、処理させることができます。エスケープシーケンスにより、特殊な文字を指定することもできます。\n (改行)、\t (タブ)、\\ (半角逆斜線 \
) がよく使われています。
以下に、複数のスクリプトで用いることができるパラメーターをご紹介します。スクリプトの中には、独自のパラメーターや、半角ハイフン -
を伴わない、(category.py で用いるような、) “コマンド”があるものもあります。
選択用パラメーター[]
ボット編集を行うページを指定するパラメーターです。
-cat
: 指定したカテゴリに属すページのみ編集します。サブカテゴリについては、サブカテゴリページは編集対象になりますが、サブカテゴリのみに属すページは編集対象にはなりません。例えば、カテゴリ:テンプレートにカテゴリ:テンプレート文書ページが属し、そのカテゴリ:テンプレート文書にテンプレート:Documentation/docが属しているとします。このとき、-cat:"テンプレート" と指定した場合、カテゴリ:テンプレートのサブカテゴリであるカテゴリ:テンプレート文書そのものは編集対象ですが、サブカテゴリに属すテンプレート:Documentation/docは編集対象ではありません。
-cat:<カテゴリ名>|<開始タイトル指定>
とすると、「カテゴリ名」のカテゴリの「タイトル指定」のページから、アルファベット順に編集を進めます。
-catr
: 指定したカテゴリと、そのサブカテゴリに属すページを編集します。"r" は、"recursive" (繰り返して用いられる) という意味を示しています。「そのサブカテゴリ」が、指定したカテゴリのサブカテゴリ、サブサブカテゴリ、サブサブサブカテゴリ、……を意味するためです。そのため、このパラメーターをカテゴリ:画像など、高位のカテゴリで利用するのは危険を伴う場合があります。あるカテゴリに属す、wiki内の全ページを編集対象にしたい場合は、-start:! パラメーターも指定しましょう。fromtitle パラメーターは、catrでも利用できます。-subcats
: 指定したカテゴリの、サブカテゴリページを編集対象とします。"recursive" (繰り返して用いられる) ではありません。fromtitle パラメーターを利用できます。-subcatsr
: 上記の -subcats をサブサブカテゴリ以下にも適用します。-uncat
,-uncatcat
,-uncatfile
: どのカテゴリにも属さない、記事ページ、カテゴリページ、ファイルを編集対象とします。例えば、初心者がアップロードしたファイルのページに Template:None selected や Template:SD のようなテンプレートを追加することができます。-file
: 扱うページのリストをテキストファイルから読み込みます。ファイル内のページ名は、ウィキテキストのリンク表記、[[ページ名]] のように角括弧で囲むか、改行によって分けます。-search
: -search:"" で指定したキーワードで、特別:Searchで見つかったすべてのページを対象とします。-links
: 指定したページからリンクされているすべてのページを対象とします。例: -links:"ヘルプ:Pywikibot" は、ヘルプ:ボット、ヘルプ:リンク、カテゴリ:ボット等が編集対象ページとなります。-ref
: 指定したページにリンクする全てのページを対象とします。リンク先を一括して変更したいときに非常に役立ちます。各ページがどのページからリンクされているかは、特別:WhatLinksHereで確認することができます。-transcludes
: 指定したテンプレートを使用している全てのページを対象とします。主に、テンプレートの構文を更新したいときに利用されます。他の名前空間を参照読み込みしている場合についても利用できます。例: -transcludes:"Walkthrough:somewalkthroughtemplate"-filelinks
: 指定した画像、もしくはファイルを使用している全てのページを対象とします。-new
,-newimages
: 新しいページを対象とします。-new:xで、最新のx記事が編集対象となります。荒らしが新規ページを複数作成した際の対応に便利です。-start
: "-start:ページ名" で指定したページから、アルファベット順に処理対象とします。(ラテン文字以外の文字は、ラテン文字の後に処理されます。) "start:pagetitle" とすると、pagetitleから作業を開始します。また、"start:!"とすると全ページが対象となります。Wiki全体を処理対象としたい場合に、たいへん役立ちます。名前空間を含めることもでき、"-start:<名前空間名>:!" で特定の名前空間を編集対象とします。(例: "-start:Template:!"とすれば、テンプレート名前空間のページが処理対象となります。) -ns は併用できません。-prefixindex
: 指定したページのサブページを対象とします。-titleregex
: RegExの正規表現で与えられた文字列に一致するタイトルのページを対象とします。-unusedfiles
: 使用されていないファイル (画像、もしくはメディアファイル) の説明ページを対象とします。-usercontribs
: 指定したユーザーが編集したページを対象とします。このコマンドを使用している間は、ボットの編集内容に十分注意してください。編集したい全ページでの作業が終わった場合、必ず Ctrl + C を押してプログラムを終了させてください。(
終了させないままにすると、ボットが作動し続けてしまいます。1つのWikiで、10万回を超える編集を行っているユーザーもいることを忘れないでください。)
-withoutinterwiki
: ウィキ内リンク (インターウィキリンク) を持たない全てのページを対象とします。-random
,-randomredirect
: Special:Random やSpecial:Randomredirect によって返された、無作為に選ばれたページを対象とします。-redirectonly
: -start と似ていますが、こちらはリダイレクトページのみを対象とします。(リダイレクト先のページは対象としません。
その他のパラメータ[]
-always
: 追加の是非を尋ねないで自動処理します。そのため、作業中に何度も “y” キーを押す必要がなくなります。ただし、コマンドが正しく作動するか分からない場合は、このパラメーターは使わないでください。
-family:foo
作業するウィキのファミリーを設定します。foo にはfamilyサブディレクトリ内のFamilyファイル名を指定します。- このパラメーターで呼び出せるのは、
user-config.py
ファイルでユーザー名をusernames['foo']['en'] = u'Usernamebot'
のように指定してあるウィキのみです。
- このパラメーターで呼び出せるのは、
-help
: スクリプトのヘルプ文書を表示します。
-lang:xy
作業するウィキの言語を設定します。xy には言語コードを指定します。
-log
: ログファイルの出力を有効にします。ログは logs のサブディレクトリに保存されます。
-log:foo
: ファイル foo へのログの出力を有効にします。foo にはファイル名を指定します。
-nolog
: ログファイルの出力を無効にします。(初期値では無効になっています。)
-ns
: 指定した名前空間にあるページだけを処理します。名前空間のIDは、Familyファイルをテキストエディタで開くことで確認することができます。多数の名前空間を指定する際は、 -ns:0,2,4 のようにしてください (この例では、一般記事、ユーザーページ、ファイルの名前空間を指定します)。初期値では、全ての名前空間が対象です。-start との併用はできません。
-pt
: putthrottle の略。編集間隔 (ページの編集を保存してから次の保存までの最短時間) を秒数で指定します。 初期値は10 (秒)。0にすると、動作間隔を開けずに処理します。
-summary
: 編集内容の要約を指定します。
-verbose
(または-v
): スクリプトの処理に関するログを、より詳細に出力します。 うまく動作しないときのデバッグに使います。
脚注[]
- ↑ 詳細は、Mediawikiのマニュアルをご覧ください。
- ↑ 詳細は、MediaWikiのManual:Pywikibot/概要をご覧ください。
- ↑ Final Fantasy WikiのIntangir Botなど、コミュニティ用に設定済みのPywikibotが公開されている場合もあります。
- ↑ 詳細はAdmin Web - コマンドプロンプトの使い方参照
- ↑ 言語間リンクの申請が一番盛んに行われているのは英語版のため、後述するインターウィキマップを生成したい場合、あれば英語版のURLを入力すると良い場合があります。
- ↑ ボットだと分かるサブアカウントを取って使います。詳細はヘルプ:ボットをご覧ください。
- ↑ テキストエディタは、Windowsのメモ帳 (Notepad)、Macintoshのテキストエディット (TextEdit)、Linuxのnano、viやgedit (Macintosh版・Windows版あり) など、.txt形式のファイルを編集するソフトです。Notepad++ (日本語ミラー) など、Unicode対応のテキストエディタを使用してください。
- ↑
SyntaxError: Non-ASCII character
など。 - ↑ UX MILK - UTF-8のBOM付き・BOM無しの違いと確認方法参照
- ↑ MediaWikiのManual:Pywikibot/Windows参照。
- ↑ Manual:Pywikibot/user-config.py参照。
- ↑ スクリプトの一覧は m:Pywikipediabot/Scripts をご覧ください。
- ↑ ja.wikipedia:Help:Pywikipediabot/redirect.py参照
関連情報[]
- ヘルプ:ボット
- w:c:finalfantasy:Help:Pywikibot (英語) …… このページの元になったページ
- w:User_blog:TyA/Pywikipedia (英語) …… このページの元になったページ
- w:User_blog:RansomTime/An_introduction_to_Pywikipediabot (英語) …… このページの元になったページ (一部)
- w:ja:ユーザーブログ:Gurgate/第4回オフィスアワーでの質問と回答
- Pywikipediabot Wiki
- Gamepedia HelpのPywikibot
- WikipediaのHelp:Pywikipediabot と Category:Pywikipedia
- MediawikiのManual:Pywikibot
その他のヘルプとフィードバック[]
- ヘルプ:コンテンツでは、他のヘルプページを閲覧、検索することができます。
- 最新の情報やヘルプについては、コミュニティセントラルをご覧ください。
- この記事で不明確な点や、曖昧な点がございましたら、Fandomとの連絡方法をご確認ください。
- このヘルプはコミュニティセントラル内にて管理されています。