コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

利用者:Freetrashbox/bot/PyWikipediaBotの使い方

利用者:Freetrashbox > bot > PyWikipediaBotの使い方


PywikipediaBotはプログラミング言語Python用のプログラムです。PywikipediaBot、Pythonの共に、フリーで入手できます。

課程

[編集]

セットアップ

[編集]

Help:Pywikipediabotを参考にして、PythonとPywikipediaBotをセットアップしましょう。「サンドボックスの初期化」までできるようになったらここに戻ってきてください。

Pythonの基礎の基礎

[編集]

文字列の置き換え程度であれば、Pythonの文法を理解していなくても使えます。しかし、いつかは覚える必要がありますので、ここでもさわりだけ説明しておきます。

インタプリタとして使ってみる

[編集]

まず、コマンドラインから

python

とだけ入力してください。するとPythonがインタプリタとして起動して、

 >>>

と表示されます。いくつか命令を実行してみましょう。

 >>>a=2
 >>>print a

と入力してみましょう。すると画面に

 2

と表示されるはずです。printはBasicのprintと同じで、変数を表示させる命令です。

「=」は代入記号です。例えば「b = "bar"」は、変数aにbarという文字列を代入します。

Pythonでは大文字と小文字が区別されます。先の命令で

 >>>a=2
 >>>print A

とするとエラーになります。また、変数は定義しなくても使えますが、何も代入していない変数をprintしようとするとエラーになります。

なお、Pythonではマルチバイト文字(すなわち日本語)をそのまま使うことはできません。(wikipedia.pyをimportしてoutput()関数を使うことになります。代入の際にもその文字列がマルチバイト文字であることを明記しなければなりません。詳しくは後述します。)

終了してコマンドラインに戻るには、exit()コマンドを使います。exit()と入力してリターンします。

 >>>exit()

clean_sandbox.pyの解析

[編集]

参考までに、まずはさきほど実行したサンドボックスの初期化プログラム「clean_sandbox.py」の一部を解析してみましょう。(このプログラムを今すぐ全部理解する必要はありません。)このプログラムをメモ帳などで開いてください。

「#」から後、行末まではコメントです。Visual Basicでいう「'」、C++でいう「//」です。また、ダブルクォーテーション3つで囲まれた箇所もコメントです。

ただし、始めの2行に限り、#で始まる文字列は意味を持ちます。

# -*- coding: utf-8 -*-

は、文字コードUTF-8にする、という意味です。Pythonの命令としては

#coding: utf-8

だけでも同じ意味になりますが、「-*-」で囲むことにより、Emacsなどのエディタで開いた場合に、エディタの文字コードを自動的に指定したコードに設定することができるようになります。Emacsを使わない人にとっては関係ないようでもありますが、ウィンドウズで作る場合には決まり文句として「# -*- coding: utf-8 -*-」にしておきましょう。また、将来あなたがプログラムを作って保存する際にも文字コードをUTF-8にしておきましょう。

変数「__version__」はRevision Control SystemConcurrent Versions Systemで管理するためのバージョン情報です。あなたが作るプログラムには当面必要ないでしょう。

importは別のパッケージやモジュール(プログラム)を読み込むプログラムです。「import wikipedia」の行以降は、wikipedia.pyで定義されたモジュールが使用できます。たとえばインタプリタから

 >>>import wikipedia
 >>>mySite = wikipedia.getSite()
 >>>print mySite

とすると

 wikipedia:ja

などと表示されるはずです。

content = {
    'en': u'{{Please leave this line alone (sandbox heading)}}\n,
    'ja': u'{{subst:サンドボックス}}',
    }

は、「login.py」を実行した時の言語、すなわち「user-config.py」で定義した「mylang = 'xx'」のxxに応じて変数contentに文字列を代入します。また、ブロックの2行目以降は、見やすくするため字下げ(行の最初に空白)を入れていますが、Pythonでは字下げが必須です。また、「u」で始まる文字列は、その文字列がUnicodeであることを意味します。これを使うためには、先に説明したように、最初の2行で「#coding: utf-8」を定義しておかなければなりません。

「class SandboxBot:」は、メソッドを定義するブロックです。ここでは__init__()とrun()が定義されています。そのため、後のmain()で

bot = SandboxBot(hours, no_repeat)

とすることで、botが__init__(hours, no_repeat)で初期化されたオブジェクトとして定義され、

bot.run()

とすることで、メソッドrun()が実行されます。

PywikipediaBotをやや本格的に使ってみる

[編集]

仮運用の心得

[編集]

ボットを動かす上で大事なのはWikipedia:Bot#Bot使用の方針を破らないことです。「Botが無害であること(例えば記事を破壊しないこと)」、「大量のリクエストを発行しないこと(動作が速すぎないこと)」などに十分に注意しながら実施していきましょう。

実行の前に、まずはあなたのボットの利用者ページに、ボットに何をやらせているのか、やらせようとしているのかを明記しておきましょう。また、ボットの会話ページはあなたの会話ページへのリダイレクトにしておきましょう。また、あなたのボットをWikipedia:Bot#現在動作中のBotの「Botフラグなし」に追加しておきましょう。

今から行う練習は、まだBot使用申請をしていない状態で行うため、慎重の上にも慎重にやらなければなりません。現在のルールでは、編集間隔が30秒以上かつ編集回数が200回未満であれば仮運用として扱われ、使用申請が要りません。(最新のルールが変更されているかもしれませんので、Wikipedia:Bot/使用申請の「Requests for bot approval」特に太字の箇所を熟読してください。仮運用中はボットフラグが付いていませんので、「Unflagged bots」の扱いになります。)もちろんこの範囲内であっても、Wikipedia:Bot#Bot使用の方針を守らなければなりません。なお、仮運用期間中の編集はspecial:最近更新したページや「ウォッチリスト」などで「ボットによる編集」として扱われず、これらのページの可読性を損ねることがありますので、あまり過剰に使用すると上記の範囲内であっても注意されるかもしれません。基本的にはまだ練習の段階なのですから、上記の制限よりも大幅に抑えた運用にしましょう。また、あなたのボットの利用者ページに、このアカウントがボットであること、および今は練習中であることなどを明記しておきましょう。

付属プログラムを使ってみる

[編集]

PywikipediaBotフレームワーク、つまりpywikipediabotに付属しているプログラムがいくつかありますので、まずはこれを試してみましょう。

version.py

[編集]

PywikipediaBotのバージョンを表示します。

python version.py 

replace.py

[編集]

ページを編集して、文字列の置き換えを行います。まずはあなたの利用者ページなど、書き損じても迷惑があまりかからないページを編集してみましょう。

あなたのアカウント名が「Foolabor」だとしましょう。そして、あなたの利用者ページ「利用者:Foolabor」に書かれている文字列「こんにちは」を「こんばんは」に書き換えるという例で説明します。次のようになります。

python replace.py -page:利用者:Foolabor "こんにちは" "こんばんは"

するとPythonは

Checked for running processes. 1 processes currently
running, including the current process.
Getting 1 pages from wikipedia:ja...

と表示して、次に

>>> 利用者:Foolabor <<<
- 世界の国からこんにちは
+ 世界の国からこんばんは
Do you want to accept these changes? ([y]es, [N]o, [e]dit,
open in [b]rowser, [a]ll, [q]uit)

のように表示します。変更を確定するには「y」を、変更をしないなら「n」を、中断するなら「q」を入力しましょう。「y」を入力した場合には、

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.
Changing page [[利用者:Foolabor]]

のように表示されます。編集された後、指定したページが書き換えられているか、あなたのボットの投稿記録に編集が記録されているかどうかを確認しましょう。なお、置き換える文字列が見つからなかった場合には、

No changes were necessary in [[利用者:Foolabor]]

のように表示されます。

上記のようなページ名でなく、あるカテゴリに属するページを指定したり、新しいページの最新の何ページかを指定したりもできます。詳しくはHelp:Pywikipediabot/replace.pyをご覧下さい。なお、何ページも編集するのであれば、例え練習であってもBot使用申請をしておいた方が無難でしょう。

関連項目

[編集]
  • botwiki: - pywikipediabotについてのウィキです。英語でよければ質問もできます。