コンテンツにスキップ

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

利用者:Freetrashbox/bot/ボットの作り方

利用者:Freetrashbox > bot > ボットの作り方


ボット(bot, Robots)は、人間の編集者に変わって、ページを自動的に解析、編集するプログラムです。このページでは、ウィキペディアで動くボットの開発方法を解説します。つまり、ボットが暴走したり、ウィキペディアのルールを破ったり、編集合戦をしたりしないようにするために特に注意すべき事について解説します。

なお、このページはボットのプログラミング法を1から説明するものではありません。あなたがコンピュータープログラミングができることを前提としており、ウィキペディアサーバーとデータのやり取りをする際の技術的な課題について解説しています。

実際の作業には、ウィキペディア用のボットとして開発されたPywikipediaBotが便利です。また、単純な作業であればAutoWikiBrowserというプログラムも利用できます。そのほかにもWikipedia:ツール#自動・半自動編集に有用なツールのリストがあります。

Robots or bots are automatic processes which interact with Wikipedia as though they were human editors. This page attempts to explain how to carry out the development of a bot for use on Wikipedia. The explanation is geared mainly towards those who have some prior programming experience, but are unsure of how to apply this knowledge to creating a Wikipedia bot.

ボットが必要な理由

[編集]

(Why would I need to create a bot?)

ボットを使えば画一的な編集を人間よりも早く実施することができます。時間が掛かるけれども単純な作業(例えば1000のページに何らかのテンプレートを貼り付けるなど)にはボットが向いています。

Bots can automate tasks and perform them much faster than humans. If you have a simple task which you need to perform lots of times (an example might be to add a template to all pages in a category with 1000 pages) then this is a task better suited to a bot than a human.

ボットを使う前に考えるべきこと

[編集]

(Considerations before creating a bot)

ウィキペディアにはすでに沢山のボットがあります(Wikipedia:Bot#現在動作中のBot)。ソースコードが公開されているものも多く、それを使えば新しいボットを開発する場合にも時間が短縮できます。またWikipedia:AutoWikiBrowserのようなプログラムを使うこともできます。そのほかにもWikipedia:ツール#自動・半自動編集に有用なツールのリストがあります。

There are already a number of bots running on Wikipedia. Many of these bots publish their source code, which can sometimes be reused with little additional development time. In addition, there are a number of semi-bots available to anyone. Most of these take the form of enhanced web browsers with Wikipedia-specific functionality. The most popular of these is AWB; see Wikipedia:Tools/Editing tools for a complete list.

もしあなたにコンピュータプログラムの経験が無い場合、自分でボットを作らなくても、Wikipedia:Bot作業依頼で他の人の作ったボットに作業依頼することもできます。プログラミングの勉強を1から初めてボットを作る場合には、プログラム言語の習得はボット作りの第1歩にしか過ぎないことを覚悟して下さい。しかし、ボット作りは黒魔術でも何でもありませんので、あなたに時間とやる気さえあれば必ず完成できます。頑張ってください!

If you have no previous programming experience, it may be simpler to ask an existing bot to do the job, or ask others to develop a bot for you. These requests can be made at Wikipedia:Bot requests. If you wish to write a new bot anyway, be aware that learning a programming language is a non-trivial task. However, it is not black magic – anyone can learn how to program with sufficient time and effort. Good luck!

あなたがボットを作ることを決めたら、まず十分な計画を立ててください。計画は、エラーが無く、役に立つボットを作るためには必ず必要です。まず、次のようなことを検討すべきでしょう。

  • 完全自動化するか、それとも実行中にユーザーが確認・判断できるようにするか。
  • 一人で全部作るか、他のプログラマーの助言を求めるか。
  • ボットをプログラミングする際のプログラミング言語の選択。
  • ボットの作業記録のログを独自に取るか。ログを取る場合、ローカルのコンピューターに記録するか、ウィキページに記録するか。
  • ウェブブラウザー上のマクロとして実施するか(例えばJavascriptの使用)、それとも独立したアプリケーションとして実施するか。
  • ボットを独立したアプリケーションにする場合、あなたのローカルのコンピューターから実施するか、それともウィキペディア・ツールサーバーなどのリモートサーバーから実施するか。
  • リモートサーバーを使う場合、あなた以外のユーザーも使えるようにするか。

If you decide to create a bot, planning is crucial to obtain an error-free, efficient, and effective program. The following initial considerations are important:
  • Will the bot be manually assisted or fully automated?
  • Will you create the bot alone, or with the help of other programmers?
  • What language will be used to implement the bot?
  • Will the bot's requests, edits, or other actions be logged? If so, will the logs be stored on local media, or on wiki pages?
  • Will the bot run inside a web browser (for example, written in Javascript), or will it be a standalone program?
  • If the bot is a standalone program, will it run on your local computer, or on a remote server such as the Wikimedia Toolserver?
  • If the bot runs on a remote server, will other editors be able to operate the bot or start it running?

ウィキペディア上でのボットの行動

[編集]

(How does a Wikipedia bot work?)

操作方法の概要

[編集]

(Overview of operation)

ボットの動作は、人間の編集者と似ています。つまり、まずウィキペディアのページを読み、内容的に書き換えが必要な場合には編集を行います。ボットは人間と異なり、処理が早く、疲れを知りません。ただし、頭は良くありません。そのため、判断があまりいらない、単純な作業をするのが得意です。

Just like a human editor, a wikipedia bot reads wikipedia pages, and makes changes where it thinks changes need to be made. The difference is that although bots are faster and less prone to fatigue than humans, they are nowhere near as bright as we are. Bots are good at repetitive tasks that have easily defined patterns, where few decisions have to be made.

良く使われる例を説明します。ボットは自分自身のアカウントを持っており、ログインしてから、ウィキペディアの編集ページを読み込みます。そしてその内容を分析し、必要な編集を行います。ページ読み込みには主にAPIが使われます。スクリーンスクレイピングと呼ばれる技術が使われることもあり、その場合、ボットはテキストをHTTPでやり取りし、GETメソッドを使って、アドレス/w/index.php?...=...&...=...をウィキペディアのサーバーに送信します。詳しくは後述します。

In the most typical case, a bot would log in to its own account and request pages from Wikipedia just the way a browser does - though of course it never displays the page, but works on it in memory - and then programmatically examine the page code to see if any changes need to be made. It would then make whatever edits it was designed to do and submit the edits, again using the same codes a browser would use. This method, often called en:screen scraping, uses the standard HTTP GET protocol: whenever you see /w/index.php?...=...&...=... in the browser address bar, everything after the question mark is variables and data sent by the GET method. There are also a handful of other en:Application Programming Interfaces, described below, for getting pages and sending edits to and from Wikipedia.

ボットで編集させる際にも、人間が編集する時と同じように、編集の競合などに注意する必要があります。編集の競合の他、ページタイムアウト(通信エラーで読み込みできない)が起こったり、その他いろいろなトラブルが起こることがあります。普通ボットは多くのページを編集するので、トラブルに見舞われる可能性も高いです。そのため、ボットを作成する際にはそのようなトラブルに対しても十分な対策をしておかなければなりません。

Because bots access pages the same way people do, bots can experience in the same kind of difficulties that human users do. They can get caught in edit conflicts, have page timeouts, or run across other unexpected complications while requesting pages or making edits. Because the volume of work done by a bot is larger than that done by a live person, the bot is more likely to encounter these issues. Thus, it is important to consider these situations when writing a bot.

ボット用API

[編集]

(APIs for bots)

ボットとウィキペディアのサーバーとの応答には、さまざまなAPIを使うことができます。

In order to make changes to Wikipedia pages, a bot necessarily has to retrieve pages from Wikipedia and send edits back. There are several APIs available for that purpose.
  • MediaWiki API (api.php). ボットはこのAPIを使って、データを読み込んでクエリ(データ群)を作り、それに基づいた編集を行うことができます。データ形式にはJSON(JavaScript), XML, YAMLなどが使えます。
使用状況: ウィキメディアプロジェクト全てで使用可能であり、クエリとしての完成度も高いです。API.phpを使えば、ボットはスクリーンスクレイピングを使わずに済みます。

MediaWiki API (api.php). This library was specifically written to permit automated processes such as bots make queries and post changes. Data is available in many different machine-readable formats (en:JSON, en:XML, en:YAML,...). Features have been fully ported from the older Query API interface; Status: Available on all Wikimedia projects, with a very complete set of queries. The ability to edit pages via API.php has also been enabled on all Wikimedia projects, enabling bots to operate entirely without screen scraping.
  • スクリーンスクレイピング (index.php). スクリーンスクレイピングは、先にも簡単に述べたように、ウィキペディアのページから、HTMLコードそのものを読み込みます。インターネットエクスプローラで言うところの「ソースの表示」で表示されるコードです。ボットでこれを使う場合、HTMLコードを解析することになります。この手法には重大な欠点があります: ウィキペディアのインターフェースは利用者に断り無く変更されることがあり、その場合、ボットが正しく機能しなくなります。また、この手法を使うとデータ転送量が多くなり、サーバーに負荷がかかります。「action=render」を使うと、GETは「-w/index.php?title=Wikipedia:...&action=render」という動作をします。このオプションを使えば、上部のタブや左のサイドバーなどのコードを省くことができます。index.phpにはこのほかにも便利なオプション機能があります。詳しくは、Manual:Parameters to index.phpを参照してください。なお、APIの機能が上がった今では、index.phpを使う理由はほとんどありません。
使用状況: 低い。

en:Screen scraping (index.php). Screen scraping, as mentioned above, involves requesting a Wikipedia page, looking at the raw HTML code (what you would see if you clicked View->Source in most browsers), and then analyzing the HTML for patterns. There are certain problems with this approach: the wikipedia interface can change without notice, which may break the bot code, and calling for HTML creates a larger server load than processing the wikitext itself. You can include an action=render GET request -w/index.php?title=Wikipedia:...&action=render - when you call the page to produce a stripped-down version of the page (without the Wikipedia sidebars and tabs) which reduces the amount of transferred data and eases the effects of changes in the user interface. Other parameters of index.php may be useful: see the partial list at Manual:Parameters to index.php. There are very few reasons to use this technique anymore and it is mainly used by older bot frameworks written before the API had as many features; Status: Deprecated.
使用状況: メディアウィキに組み込まれた機能なので、全てのウィキメディアサーバーで使用可能。

Special:Export can be used to obtain bulk export of page content in XML form. See Manual:Parameters to Special:Export for arguments; Status: Built-in feature of MediaWiki, available on all Wikimedia servers.
  • 生のウィキテキスト (Raw Wikitext): クライアントからGETメソッドで「action=raw」や「action=raw&templates=expand」をindex.phpに送ると、サーバーはそのページの未処理ウィキテキストソースコードを送ってくる。

Raw (Wikitext) page processing: sending a action=raw or a action=raw&templates=expand GET request to index.php will give the unprocessed wikitext source code of a page.

ウィキペディアウェブサーバーの一部では、データ圧縮プログラムの一種、gzipの機能を備えています。HTTPリクエストヘッダーに「"Accept-Encoding: gzip"」を入れると、圧縮されたデータが送られてきます。ただし、これはメディアウィキの標準仕様ではないため、対応していないサーバーもあります。むしろ、メディアウィキを利用した他のサイトでは使われていない場合が多いです。

Some Wikipedia web servers are configured to grant requests for compressed (gzip) content. This can be done by including a line "Accept-Encoding: gzip" in the HTTP request header; if the HTTP reply header contains "Content-Encoding: gzip", the document is in gzip form, otherwise, it is in the regular uncompressed form. Note that this is specific to the web server and not to the MediaWiki software. Other sites employing MediaWiki may not have this feature.

ログイン

[編集]

(Logging in)

使用認可されたボットは、編集前にログインしなければなりません。状況によってはログインできなかったり、ログインしていてもサーバートラブルでログアウトされることがあります。ログイン状態でなくてもサーバーからの応答を受け取ることは可能なので、ボット作成者は、ボットがログイン作業を完了したことを必ず確認し、また、ログイン状態にあることを時々確認しなければなりません。ボットフラグを持つボットがログインすると、Mediawiki API (api.php)から普通よりも多くの情報を得ることができます。

Approved bots need to be logged in to make edits. Although a bot can make read requests without logging in, bots that have completed testing should log in for all activities. Bots logged in from an account with the bot flag can obtain more results per query from the Mediawiki API (api.php).

HTTPでやり取りをする場合、セキュリティ上、ボットはログインデータをPOSTメソッドを使って送らなければなりません。GETメソッドのリクエストはURLから簡単に解析できるため、ログインをGETメソッドで行ってはいけません。

For security, login data must be passed using the en:HTTP POST method. because parameters of en:HTTP GET requests are easily visible in URL, logins via GET are disabled.

ボットをMediaWiki APIを使ってログインさせる場合には、URLとPOSTデータを次のようにするとよいでしょう。

To log a bot in using MediaWiki API, use this URL and POST data:

このコードを実行すると、サーバーはログインできたかどうかをXML形式で返します。詳しくはmw:API:Login/jaをご覧下さい。

This will return a result (success or error) in XML form, as documented at mw:API:Login. Other output formats are available.

ログインに成功すると、ウィキメディアサーバーはいくつかのHTTP cookieを返します。ボットはそのクッキーを保存し、サーバーから要求があった場合にはその情報を返さなければなりません。(特に、編集行為を行う場合には必須です。)英語版ウィキペディアでは、クッキーにはenwikiUserID, enwikiToken, and enwikiUserNameといった情報が含まれます。enwiki_sessionクッキーは、編集や実行をする際に必要であり、それが無いとサーバーはMediaWiki:Session fail previewエラーを返します。

A successful login attempt will result in the Wikimedia server setting several HTTP cookies. The bot must save these cookies and send them back every time it makes a request (this is particularly crucial for editing). On the English Wikipedia, the following cookies should be used: enwikiUserID, enwikiToken, and enwikiUserName. The enwiki_session cookie is required to actually send an edit or commit some change, otherwise the MediaWiki:Session fail preview error message will be returned.

編集; 編集トークン

[編集]

(Editing; edit tokens)

ウィキペディアを外部サイトから自由に編集できるようにしていると、悪意のある外部サイトであれば、ウィキペディアに登録しているユーザーがそのサイトのボタンをクリックすることで、そのユーザー自身が編集しているかのように偽装して悪意のある編集をすることが可能になってしまいます。それを防ぐため、ウィキペディアは編集トークンという仕組みを使っています。このトークンは末尾に'+\'が付いた長桁の16進数であり、一種の暗号です。例えば:

d41d8cd98f00b204e9800998ecf8427e+\

のようになっています。

Wikipedia uses a system of edit tokens for making edits to wikipedia pages, as well as some other operations such as rollback. The token looks like a long hexadecimal number followed by '+\', for example: d41d8cd98f00b204e9800998ecf8427e+\. The role of edit tokens is to prevent "edit hijacking", where users are tricked into making an edit by clicking a single link.

編集をHTTPで行う場合、やらなければならないことが2つあります。1つ目は、サーバーに編集トークンを要求することです。2つ目は、ページを編集する場合には、その直前に取得した編集トークンを添えて送信することです。そのため、少なくとも2回のHTTPリクエストが必要となります。

The editing process involves two HTTP requests. First, a request for an edit token must be made. Then, a second HTTP request must be made that sends the new content of the page along with the edit token just obtained. It is not possible to make an edit in a single HTTP request.

次のようなリクエストを送れば、編集トークンが得られます。

  • MediaWiki API (api.php)を使う場合には、リクエストに次のパラメーターを添えて送信します。(詳しくは mw:API:Edit - Create&Edit pages/ja)参照。
    • action=query
    • prop=info
    • titles=PAGENAME
    • intoken=edit

    こうすると、edittoken属性を持つトークンが返されます。

To obtain an edit token, follow these steps: Make a request with the following parameters (see mw:API:Edit - Create&Edit pages). The token will be returned in the edittoken attribute of the response.

たまに、返される編集トークンに16進数が付いておらず、単なる「+\」になってることがあります。これはほとんどの場合、ボットがログインしていないために起こります。ログインできていない理由としては、サーバーがログイン手続きの認証に失敗した、途中で通信が切れた、サーバーの処理が遅くてタイムアウトになった、クッキーが何らかの理由で取得できていなかった、サーバートラブルで勝手にログアウトされてしまった、などが考えられます。この場合には、もしあなたが作ったプログラムにバグが無ければ、ログインし直して、クッキーを再取得するだけで直ります。

If the edit token the bot receives does not have the hexidecimal string (i.e., the edit token is just '+\') then the bot most likely is not logged in. This might be due to a number of factors: failure in authentication with the server, a dropped connection, a timeout of some sort, or an error in storing or returning the correct cookies. If it is not because of a programming error, just log in again to refresh the login cookies.

編集の競合

[編集]

(Edit conflicts)

ボットで編集する場合にも、編集の競合に注意する必要があります。ボットが他のボットと編集競合しそうになる確率は高いです。そのため、必ずそれに対する対策をプログラムに盛り込んでおく必要があります。

Edit conflicts occur when multiple, overlapping edit attempts are made on the same page. Almost every bot will eventually get caught in an edit conflict of one sort or another, and should include some mechanism to test for and accommodate these issues.

Mediawiki API (api.php)を使うボットは、 basetimestamp 属性を設定しておき、サーバーから編集競合エラーが返されていないことを確認しなければなりません。詳しくは[[mw:API:Edit - Create&Edit pages/ja]を参照してください。

Bots that use the Mediawiki API (api.php) should set the basetimestamp attribute, and check the server responses for indications of errors. For more details, see mw:API:Edit - Create&Edit pages.

ボットは自分のやった編集が成功で終わったかどうかをチェックする必要があります。そのチェックをしておかないと、ボットはその作業を「完了」するまで延々と同じ作業を繰り返そうとしたり、あるいは他のボットや利用者と編集合戦を始めるかもしれません。

Generally speaking, if an edit fails to complete the bot should check the page again before trying to make a new edit, to make sure the edit is still appropriate. Further, if a bot rechecks a page to resubmit a change, it should be careful to avoid any behavior that could lead to an infinite loop and any behavior that could even resemble edit warring.

ボット開発手順の概要

[編集]

(Overview of the process of developing a bot)

ボットのプログラムをコーディングする作業は、ボット開発の1部にすぎません。次の図に示す作業を着実にこなしていかなければなりません。もしも見落としがあると、あなたの作ったボットは投稿ブロックされるかもしれません。特にBot使用の方針が守られているかどうかは十分にチェックしなければなりません。

Actually coding or writing a bot is only one part of developing a bot. You should generally follow the development cycle below. Failure to comply with this development cycle, particularly the sections on Wikipedia bot policy, may lead to your bot failing to be approved or being blocked from editing Wikipedia.
Overview of Wikipedia bot development cycle

プログラミング内容の検討:

[編集]

(Software elements analysis:)

  • ボットを作る際にまずやらなければならないことは、自分がボットにやらせたい作業を十分に検討することです。あるいはWikipedia:Bot作業依頼の要望のうち、ウィキペディアにとって有用なものを選ぶ作業です。
  • ただし、あなたがやらせようとする作業を、すでに別のボットがやっているかもしれません。Wikipedia:Bot#現在動作中のBotもよく確認してください。

(1)The first task in creating a Wikipedia bot is extracting the requirements or coming up with an idea. If you don't have an idea of what to write a bot for, you could pick up ideas at requests for work to be done by a bot. (2)Make sure an existing bot isn't already doing what you think your bot should do. To see what tasks are already being performed by a bot, see the list of currently operating bots.

まずはボットにさせたいことを考える

[編集]

(Specification)

  • プログラム仕様の作成は、正確で詳細なプログラムを記述するために必要な工程です。まずは、あなたがやりたい事を詳細にまとめる必要があります。それを他の利用者に提案して、ボットにやらせたいことが有用になるようにします。例えあなたの最初の考えがどれほどすぐれていたにせよ、他の利用者のアドバイスを受ければもっと良くなるのが普通です。
  • 大原則として、ボットは次のようでなければなりません。
  • ボットが有害でないこと。(記事を破壊しないこと。)
  • ボットが有用であること。(そして人間ではできないような作業をしてくれること。)
  • サーバーに負担をかけすぎないこと。

Specification is the task of precisely describing the software to be written, possibly in a rigorous way. You should come up with a detailed proposal of what you want it to do. Try to discuss this proposal with some editors and refine it based on feedback. Even a great idea can be made better by incorporating ideas from other editors. *In the most basic form, your specified bot must meet the following criteria: ::*The bot is harmless (it must not make edits that could be considered vandalism)
  • The bot is useful (it provides a useful service more effectively than a human editor could), and
  • The bot does not waste server resources.
  • Make sure your proposal meets the criteria of Wikipedia bot policy

ボットを作るツールを選ぶ

[編集]

(Software architecture)

  • 次に、あなたはボットをプログラミングするのに使用するプログラム言語やツールを選び、データ構造やアルゴリズムを考えなければなりません(ソフトウェアアーキテクチャ)。それらは、検討中のボットに適したものでなければならないのはもちろんのこと、将来そのボットの機能を拡張することも考えて決めなければなりません。ボットにはいろいろなタイプのものがあり(参考en:Wikipedia:Types_of_bots)、そのタイプに合わせたものでなければなりません。

Think about how you might create it and which programming language and tools you would use. Architecture is concerned with making sure the software system will meet the requirements of the product as well as ensuring that future requirements can be addressed. There are different types of bots and the main body of the article below will cover this technical side.

実際にボットを作る

[編集]

(Implementation)

ここまでの工程で設計したボットのアイディアを、実際にプログラミングコードにする作業です。「ボットを作っている」と強く実感できる工程ですが、ボットを作るうえで最も重要な工程というわけではありません。この工程でしなければならないことを挙げると、

  • ボットを、あなた自身のアカウントで実行してはいけません。そのために、まずはボットのためにアカウントを作成してください。パスワードもあなた自身のアカウントのものと変えて下さい。
  • あなたのボットの利用者ページを作り、あなたのボットの特徴やボットにやらせることを説明してください。また、template:bot等を利用して、あなた自身の利用者ページへのリンクを作成してください。ボットの会話ページも、あなた自身の会話ページへのリダイレクトにしておくとよいでしょう。
  • ボットをプログラミングしてください。
  • Wikipedia:Botの「ボットフラグなし」に登録し、仮運用します。
  • 仮運用が終わったらWikipedia:Bot/使用申請で使用申請してください。

ただし、使用申請の手順はプロジェクト(言語版)ごとに異なります。

Implementation (or coding) involves reducing design to code. It may be the most obvious part of the software engineering job but it is not necessarily the largest portion. In the implementation stage you should:
  • Create a user page for your bot. Your bot's edits must not be made under your own account. Your bot will need its own account with its own username and password.
  • Add these details to your proposal and post it to requests for bot approval
  • Add the same information to the user page of the bot. You should also add a link to the approval page (whether approved or not) for each function. People will comment on your proposal and it will be either accepted or rejected.
  • Code your bot in your chosen programming language.

テスト

[編集]

開発中のボットをテストする場合には、いきなり実際の記事空間に投稿するのではなく、まずはボットに元との差分を表示させて、それをあなたが直接見て、正しく編集が行われているか確認するべきです。Pywikipediaなどにはその機能が備わっています。また、Botの使用申請が完全に認められるまで、試用期間としてそのボットには何らかの制限(編集回数の制限、稼動日数の制限など)が設けられるはずですので、ボットがその制限を越えないように調整し、かつその期間にボットに問題がないことを細かいところまでよくチェックしてください。試用期間が終われば、ボットの本格的な運用が認められます。

A good way of testing your bot as you are developing is to have it show the changes (if any) it would have made to a page, rather than actually editing the live wiki. Some bot frameworks (such as pywikipedia) have pre-coded methods for showing diffs. During the approvals process, the bot will most likely be given a trial period (usually with a restriction on the number of edits or days it is to run for) during which it may actually edit to enable fine-tuning and iron out any bugs. At the end of the trial period, if everything went according to plan, the bot should get approval for full-scale operation.

そのボットの解説を書くこと

[編集]

重要なのに見落としがちなのが、そのボットに現在何をさせているのか、どのようなアルゴリズムで動いているのかを説明する解説文を書くことです。特に、同じボットで複数の作業をさせる場合には重要となります。可能であれば、そのボットのプログラムソースコードを公開することが望ましいです。

An important (and often overlooked) task is documenting the internal design of your bot for the purpose of future maintenance and enhancement. This is especially important if you are going to allow clones of your bot. Ideally, you should post up the source code of your bot on its userpage if you want others to be able to run clones of it. This code should be well documented (usually using comments) for ease of use.

質問や意見の受け付け

[編集]

ボットを使う場合には、ボットの会話ページ、あるいはあなた自身の会話ページで、他のユーザーからの質問や意見を受け付けなければなりません。特に、Wikipedia:著作権など、普段から議論が多い方針に基づいての編集をさせる場合には、十分な配慮と対応が必要です。

You should be ready to respond to queries about or objections to your bot on your user talk page, especially if it is operating in a potentially sensitive area, such as fair-use image cleanup.

保守作業

[編集]

作ったボットのバグをなくしたり、より適切な編集ができるように改造すること、すなわちソフトウェア保守には、ボットを最初に作った時よりもはるかに多くの時間が必要となるでしょう。元々の計画からずれている箇所を直すではなく、あなたが想定していなかった極々まれにしか起こらないようなことにも対応させなければなりません。(ソースコードを公開しておけば、他のユーザーから改造のためのアドバイスを多く受けられるようになるでしょう。)

Maintaining and enhancing your bot to cope with newly discovered bugs or new requirements can take far more time than the initial development of the software. Not only may it be necessary to add code that does not fit the original design but just determining how software works at some point after it is completed may require significant effort (this is another reason to document your code as you go along).
  • If you want to make a major functionality change to your bot in the future, you should request this as above using the requests for bot approval.

ボットを使う場合の一般的な注意事項

[編集]

(General guidelines for running a bot)

ここではボットを利用する際の一般的な注意事項に加えて、ボットを利用し、改良していく上での注意事項を述べます。

In addition to the official bot policy, which covers the main points to consider when developing your bot, there are a number of more general advisory points to consider when developing your bot.

ボットを調整する

[編集]

(Bot best practices)

  • maxlagパラメータを5秒に設定してください。こうすれば、サーバーの負荷が低い時には早く、サーバーの負荷が高い時にはゆっくりと動作するようになるでしょう。
    • もし使っているボットがmaxlagパラメータを設定できないタイプのものであれば、リクエスト(read及びwrite)の合計が1秒間に10を超えないようにして下さい。
  • 可能な限りAPIを使うようにして、さらにリクエストの合計が最小限となるようにするために、クエリの個数をサーバーの最大許容値までに抑えてください。
  • 編集(write)リクエストはreadリクエストよりもサーバー処理時間が多く掛かるのが普通です。そのため、コードを処理する際に、できるだけwriteリクエストの数を減らすように工夫してください。
    • 編集はできるだけまとめて1度に行ってください。小さな処理を10回するよりも、大きな処理を1回にまとめた方が好ましい。
  • 一度に複数のリクエストを出さないで下さい。前のリクエストが完了してから、次のリクエストを出してください。
  • サーバーからエラーを受け取ったら、次の処理をしばらく待ってください。エラーで一番多いのがタイムアウトであり、その時のサーバー負荷が高いことを意味しています。このような状態のサーバーにリクエストを送り続けると、処理がますます遅くなってしまいます。
  • mw:Extension:Assert_Edit/jaを使えば、ウィキペディア上でボットをテストすることが可能です。
  • ボットを自動で本格的に運用する前に、あなたの書いたコードが完璧であることを十分にテストして下さい。試用期間の間に編集した記事を一つ一つ自分でチェックし、動作が完璧になるように調整をして下さい。

  • Use the maxlag parameter with a maximum lag of 5 seconds. This will enable the bot to run quickly when server load is low, and throttle the bot when server load is high.
    • If writing a bot in a framework that does not support maxlag, limit the total requests (read and write requests together) to no more than 10/minute.
  • Use the API whenever possible, and set the query limits to the largest values that the server permits, to minimize the total number of requests that must be made.
  • Edit (write) requests are more expensive in server time than read requests. Be edit-light and design you code to keep edits to a miminum.
    • Try to consolidate edits. One single large edit is better than 10 smaller ones.
  • Do not make multi-threaded requests. Wait for one server request to complete before beginning another
  • Back off upon receiving errors from the server. Errors such as squid timeouts are often an indication heavy server load. Use a sequence of increasingly longer delays between repeated requests.
  • Make use of the Assert Edit extension, an extension explicitly designed for bots to check certain conditions, which is enabled on Wikipedia.
  • Test your code thoroughly before making large automated runs. Individually examine all edits on trial runs to verify they are perfect.

ボットが備えていなければいけない機能

[編集]

(Common bot features you should consider implementing)

半自動モード

[編集]

(Manual assistance)

ボットにできないような複雑な判断が必要な場合には(例えば漢字の間違いを修正するなど)、利用者が状況を見て自分の判断を入力できるようにしておかなければなりません。そのような編集をボットにやらせる場合には、必ず修正するかどうかを人間が一つ一つ確認しなければなりません。

If your bot is doing anything that requires judgement or evaluation of context (e.g., correcting spelling) then you should consider making your bot manually-assisted. That is, not making edits without human confirmation.

緊急停止機能

[編集]

(Disabling the bot) ボットには緊急停止機能を設けておくべきです。また、ボットの動作に文句がある人が、あなたのノートページに文句を書き込んでくれるようにしておくべきです。そうしておけば、誰かがあなたのボットの動作に問題があると気付けばノートページに書き込んでくれるでしょうから、あなたは編集ページの「新しいメッセージが届いています」というメッセージを見ることで問題にすぐに気付くことができます。ボットを作った時のままで使い続けるのではダメであり、こまめに修正する必要があることを思い出してください。また、利用者ページにTemplate:Emergency-bot-shutoffを貼り付けておけば、管理者が貼り付けたテンプレートのボタンをクリックすることでブロックページに飛べますので、管理者がブロックするまでの時間を短縮できます。

It is good bot policy to have a feature to disable the bot's operation if it is requested. You should probably have the bot refuse to run if a message has been left on its talk page, on the assumption that the message may be a complaint against its activities. This can be checked by looking for the "You have new messages..." banner in the HTML for the edit form. Remember that if your bot goes bad, it is your responsibility to clean up after it! You can also have a page that will turn the bot off if True on the page is changed. This can be done by grabbing and checking the page before each edit.

ボット編集を許可しないページへの対応

[編集]

ページによってはTemplate:Nobotsが貼られており、ボットはそのページを編集してはいけません。このテンプレートには色々なオプションが設定できるようになっていますので、このテンプレートのドキュメントを読んで、全て対応できるようにして下さい。

署名をする

[編集]

(Signature)

ボットで会話ページ、ノートページの編集をする場合には、人間が編集するのと同じように、編集の末尾に署名(~~~~)を付けるようにして下さい。もちろん、標準名前空間を編集する際に間違って署名をしないように注意してください。

Just like a human, if your bot makes edits to a talk page on wikipedia, it should sign its post with four tildes (~~~~). It should not sign any edits to text in the main namespace.

ボット製作に向いているプログラム言語とライブラリ

[編集]

(Programming languages and libraries)

ほとんどのプログラム言語でボットを作ることが可能です。そのため、ボットを作る際にはあなたが普段使い慣れているもの、あるいは以前作った類似のソースコード(すなわちライブラリ)があるものを使うとよいでしょう。また、次に挙げるプログラム言語には、ボットを作る際に便利なライブラリがあります。

Bots can be written in almost any programming language. The choice of a language often depends on the experience of the bot writer (which languages are familiar) or on the availability of pre-developed libraries to perform the desired task. The following list includes some languages that have libraries to assist with bot tasks.

Perl

[編集]

Perlインタプリタ言語です。そのため、コンパイラを使ったビルドを行う必要がありません。さらにCommon Gateway Interfaceなどを利用すれば、ブラウザで動作を確認しながらWebサーバ上でプログラムを走らせることも可能です。Perlは多くのオペレーションシステム、例えばMicrosoft WindowsUNIX/Linuxなどで利用可能で、そのためほとんどのウェブサーバ上で動かすことができます。あなたが普段利用しているウェブサーバがCGIプログラムの実行をサポートしていれば、これを使うのが便利でしょう。

Perl has a run-time compiler. This means that it is not necessary to compile builds of your code yourself as it is with other programming languages. Instead, you simply create your program using a text editor such as gvim. You then run the code by passing it to an interpreter. This can be located either on your own computer or on a remote computer (webserver). If located on a webserver, you can start your program running and interface with your program while it is running via the Common Gateway Interface from your browser. Perl is available for most operating systems, including Microsoft Windows (which most human editors use) and UNIX/Linux (which many webservers use). If your internet service provider provides you with webspace, the chances are good that you have access to a perl build on the webserver from which you can run your Perl programs.

Perlプログラミングを解説したサイトには次のようなものがあります。

Guides to getting started with Perl programming:

ライブラリ:

  • MediaWiki::API - A Perl module for interfacing with the MediaWiki API, to allow information retrieval, editing, and file upload/download.
  • Anura -- Perl interface to MediaWiki using libwww-perl. Not recommended, as the current version does not check for edit conflicts.
  • WWW::Mediawiki::Client -- perl module and command line client
  • WWW::Wikipedia -- perl module for interfacing wikipedia
  • Perl Wikipedia ToolKit -- perl modules, parsing wikitext and extracting data
  • perlwikipedia - A fairly-complete Wikipedia bot framework written in Perl.
  • MediaWiki CPAN Package by Edward Chernenko - has a rich API, but also several critical bugs.
  • Mediawiki::API - a library by CBM with robust automatic error handling and wrappers for may common API.php uses. This is not the same as the library on CPAN.

PHP

[編集]

PHPもまた、ボット作りに向いています。PHPを使えば、ユーザーインタフェースをウェブ風にすることができます。例えば、ボットにカテゴリの名前を変えさせるとしましょう。その場合「変更前のカテゴリ」「変更後のカテゴリ」といったテキストボックスを備えたHTMLページを作っておき、「実行」ボタンを押せばボットが動くようにする、といった形にすることが可能です。

PHP can also be used for programming bots. PHP is an especially good choice if you wish to provide a webform-based interface to your bot. For example, suppose you wanted to create a bot for renaming categories. You could create an HTML form into which you will type the current and desired names of a category. When the form is submitted, your bot could read these inputs, then edit all the articles in the current category and move them to the desired category. (Obviously, any bot with a form interface would need to be secured somehow from random web surfers.)

ライブラリ:

その他のページ:

Python

[編集]

Pythonオブジェクト指向分析設計をすることができる言語です。

Python is a popular interpreted language with object-oriented features.

Pythonに関する解説:

Getting started with Python:

ライブラリ:

Microsoft .NET

[編集]

Microsoft .NETはマイクロソフト社製のプログラミング言語一式であり、C#Managed C++Visual Basic .NETJ#JScript .NETIronPythonWindows PowerShellが含まれます。Microsoft Visual Studio .NETdevelopment environmentはフリーウェアなので良く使われます。

Microsoft .NET is a set of languages including C#, Managed C++, Visual Basic .NET, J#, JScript .NET, IronPython, and Windows PowerShell.
Free Microsoft Visual Studio .NET development environment is often used.

Microsoft .NET:

  • あればここに足してください

ライブラリ:

  • a clean full-featured C# API, compiled as DLL library, that allows to build programs and web robots easily to manage information on MediaWiki-powered sites. Detailed documentation is available.
    • WikiFunctions .NET library - Bundled with AWB, is a library of stuff useful for bots, such as generating lists, loading/editing articles, connecting to the recent changes IRC channel and more.

Java

[編集]

JavaプログラムはEclipseのような統合開発環境(IDE)を使って作ります。

Java programs are generally developed with an IDE, such as Eclipse; development using a command line console (with the javac and java programs) is also an option.

Javaの解説:

ライブラリ:

Ruby

[編集]

RWikiBotRubyで書かれたボット開発用のフレームワークです。MediaWikiの公式APIを使っています、機能には制限が多いです。

RWikiBot is a Ruby framework for writing bots. Currently, it is under development and looking for contributors. It uses MediaWiki's official API, and as such is limited in certain capabilities.

ライブラリ:

Chicken Scheme

[編集]

Iron ChickenはScheme用のコンパイラChicken Scheme用のエクステンション(egg)です。S式で記述されたMediawiki APIです。HTMLをS式のXML(SXML)で出力することができる。en:User:Tony Sidaway/scripts/categorymembersの説明が詳しい。

Iron Chicken is an extension or "egg" for Chicken Scheme that makes the Mediawiki API programmable using s-expressions, and presents API and HTML output as SXML which can be queried easily. A simple example that gets members of a category and writes them to a page in the client user's userspace is: User:Tony Sidaway/scripts/categorymembers

ライブラリ:

引用元

[編集]