بات سازی ربات سازی
نویسه گردانی:
BAT SAZY RBAT SAZY
رباتهای سایبری ویکیپدیا، ابزارها و فرایندهایی هستند که برای برقرار کردن ارتباط بهصورت اتوماتیک با ویکیپدیا به عنوان ویرایشگرانی که بشر آنها را هدایت میکند استفاده میشوند. در این صفحه راههای توسعه و ساخت ربات را برای استفاده در ویکیپدیا توضیح میدهیم. برای ساخت ربات، در ابتدا باید دانست که هدف ما از ساخت یک ربات چیست؟ تا بتوانیم برای پیشبرد این هدف تمام تلاش خود را انجام دهیم.
محتویات [نمایش]
چرا من باید یک ربات بسازم؟ [ویرایش]
رباتها به صورت خودکار توانایی انجام کارها را دارند و این یعنی سریعتر از انسانها عمل میکنند. برای انجام کارهای ساده نیازی به ربات نیست اما اگر شما نیاز دارید که کاری را به تعداد زیاد انجام دهید مثلاً: ممکن است شما نیاز پیدا کنید که یک الگویی را به تمام مقالههای موجود در یک رده (۱۰۰۰ مقاله) بیفزایید، پس راه مناسب برای انجام این کار طاقت فرسا استفاده از ربات به جای انسان است.
نکات قابل توجه قبل از ایجاد ربات [ویرایش]
اینها تعدادی از رباتهای در حال اجرا در ویکیپدیا هستند.
اگر شما تصمیم به ساخت ربات گرفتهاید برنامه ریزی را مد نظر داشته باشید تا از خطاهای احتمالی جلوگیری کرده باشید، این مسایل باید مد نظر قرار گفته شوند:
آیابه صورت دستی ربات را فعال میکنید و یا اینکه ربات بهصورت اتوماتیک کار میکند؟
آیا ربات را به تنهایی ایجاد کردهاید و یا از رباتدارهای سایر زبانها کمک گرفتهاید؟
از چه زبانی برای پیادهسازی ربات استفاده کردهاید؟
آیا درخواستی برای پرچم دادهاید و اینکه آیا وارد سیستم شدهاید؟اگر اینگونهاست، کارهایی که با ربات انجام میدهید در سیاههها و تغییرات اخیر قابل رویت است و در صفحات ویکی ذخیره میشود.
آیا ربات را برای اجرا در وب آماده کردهاید و یا به روشهای دیگر و با زبانهای دیگر همچون جاوا اسکریپت آن را ساختهاید؟
اگر ربات را بوسیله برنامهای مستقل ساختهایدآیا آن را بر روی رایانه خودتان گذاشتهاید یا بر روی یک سرور مانند Toolserver و از راه دور آن را کنترل میکنید؟
اگر ربات قابل اجرا بر روی یک سرور از راه دور است، آیا ویراستاران دیگر قادر هستند که کار ربات یا شروع کار آن در زمان اجرا را ببینند؟
چگونه ربات در ویکیپدیا کار میکند؟ [ویرایش]
بررسی اجمالی عملکرد چرخه ویرایش
رباتها دقیقا همانند انسانها ویرایش میکنند با این تفاوت که اگر چه رباتها سریعتر از انسانها هستند و کمتر خسته میشوند اما آنها آن چیز که ما به آنها میگوییم را انجام میدهند. رباتها برای انجام کارهای تکراری همانند گذاشتن الگوها در مکانهای از پیش تعیین شده بسیار مناسب هستند. در اکثر موارد رباتها در ویکیپدیا با حساب کاربری خود وارد میشوند و از ویکیپدیا مانند مرورگرها درخواست صفحه میکنند ولی این صفحات را نمایش نمیدهند بلکه روی آنها در حافظه خود کار میکنند و به سختی روی کدهای صفحه در صورتی که نیاز باشد برای ویرایش کار میکنند و سپس تمام مواردی را که برای انجام آنها طراحی شدهاست را انجام میدهند و در ویکیپدیا ذخیره میکنند مانند مرورگرها. از آنجایی که روباتها مانند انسانها با صفحات وب مواجه میشوند به همین دلیل با مشکلات بسیاری روبرو میشوند از جمله قطع شدن ویرایش و به هم ریختگی ویرایش و خارج شدن از زمان و برخورد کردن با مشکلات غیر قابل پیش بینی. به همین جهت معمولا رباتها را برای انجام کارهای زیاد طراحی میکنند و در نظر گرفتن راه حل مناسب برای برخورد با این مشکلات در طراحی ربات نقش مهمی دارد.
Api برای رباتها [ویرایش]
از آنجایی که برای درست کردن صفحات ویکیپدیا یک ربات نیازمند دریافت و ویرایش و بازپس دادن اطلاعات میباشد. ابزارهای گرافیکی برنامه نویسی بسیاری برای رباتها طراحی شدهاست و در دسترس میباشد.
MediaWiki API
یک کتابخانهای برای دادن اجازه به رباتها- برای پردازش خودکار - برای ساختن کووریها و تغییرات پستها میباشد. این کتابخانه برای زبانهای متفاوتی موجود میباشد جیسون, XML, YAML موارد جدید کاملا با Query API interface قدیمی ساگاری دارد. اینجا را ببینیدAPI manual page.
وضعیت: برای تمام پروژههای ویکی مدیا با زیر مجموعههای کامل موجود میباشد. توانایی برای ویرایش صفحات تمام پروژههای ویکی مدیا از طریق api.php فعال شدهاست و به رباتها اجازه میدهد که تمام عملیاتها را بدون ویرایش تصویری انجام دهد.
Screen scraping index.php
این ابزار در ابتدا کدهای HTML صفحات ویکیپدیا (که میتوان آنها را در مرورگرها در بخش View-"Source دید)را تحلیل میکند و بر اساس جای گیری عناصر موجود در صفحه عمل میکند. این روش چندین مشکل دارد گرفیک ویکیپدیا ممکن هست بدون هیچ اطلاع قبلی تغییر کند که باعث به هم ریختگی کدها میشود همچنین در خواست از سرور برای کدهای HTML در مقایسه با تحلیل متون حجم زیادتری از اطلاعات را از سرور میگیرد. برای کاهش مقدار اطلاعات دریافتی از ویکیپدیا میتوان از دستور action=render استفاده کرد که خروجی w/index.php?title=Wikipedia:... &action=render را میدهد و در نتیجه نوار ابزارهای کناری و زبانههای ویکیپدیا حذف میگردند و کار کردن روی گرافیک اصلی ویکپدیا که انسان میبیند سریع تر و آسان تر میشود.
موارد دیگری از index.php ممکن است مفید باشد مانند لیست Manual:Parameters to index.php که نیاز کمی برای استفاده از تکنیک در حال حاضر احساس میشود و این تکنیک معمولا به وسیله رباتهای قدیمی که قبل از به وجود آمدن API بودند کاربرد داشته
وضعیت: نامطلوب
Special:Export
برای تولید خروجی از صفحات در قالب XML کاربرد دارد برای اطلاع بیشتر به Manual:Parameters to Special:Export مراجعه کنید
وضعیت: در ساختار کلیه سرورهای مدیا ویکی به صورت توکار موجود میباشد
Raw (Wikitext) page processing
با فرستادن action=raw یا action=raw&templates=expandو فرستادن درخواست به index.php متن خام کدهای صفحات ویکی را به صورت پردازش نشده به عنوان خروجی ارایه میدهد. یک query API با prop=revisions&rvprop=content یا prop=revisions&rvprop=content&rvexpandtemplates=۱ دقیقا برابر است و اجازه استخراج اطلاعات بیشتری را میدهد.
وضعیت: در ساختار کلیه سرورهای مدیا ویکی به صورت توکار موجود میباشد
بعضی از سروهای ویکیپدیا تنطیم شدهاند تا اجازه فشرده سازی محتویات را به کاربر بدهند gzip این عمل میتواند با یک خط دستور "Accept-Encoding: gzip" در بخش ابتدایی HTTP میتوان به محتویات فشرده شده دست یافت البته در صورتی که HTTP پاسخ "Content-Encoding: gzip" بدهد متنها به صورت فشرده هستند در غیر این صورت به صورت عادی ذخیره شدهاند. این مورد به نرم افزار ویکی مدیا ربطی ندارد بلکه به سرور بستگی دارد. همچنین ممکن است سایتهایی که از ویکی مدیا استفاده میکنند از فشرده سازی استفاده نکرده باشند.
ورود به سیستم: [ویرایش]
مسلم هست که رباتها مانند انسانها باید در وبسایت برای ویرایش کردن وارد شوند. Login رباتها میتوانند بدون ورود به سیستم مطالب را بخوانند رباتهایی که آزمایش خود را پس دادند میتوانند با ورود به سیستم به ویرایش بپردازند. رباتها در قالب ورود به سیستم و داشتن پرچم میتوانند نتایج بسیاری برای هر query برای API ویکی مدیا داشته باشند. بسیاری از framworks رباتها باید ورود به سیستم و کوکیها را به صورت خودکار انجام دهد. اگر شما از این frameworks ها استفاده نمیکنید باید مراحل زیر را دنبال کنید. برای امنیت، اطلاعات ورود به سیستم باید از متدHTTP POST استفاده کند. به خاطر اینکه پارامتر HTTP GET به راحتی در URL قابل رویت میباشد. و ورود از طریق GET باید غیر فعال گردد. برای ورود ربات به سیستم برای استفاده از API ویکی مدیا دو مرحله درخواست لازم است.
درخواست ۱:
URL: http://en.wikipedia.org/w/api.php?action=login&format=xml
POST parameters:
lgname=BOTUSERNAME
lgpassword=BOTPASSWORD
اگر پسورد درست بود نتیجه "NeedToken" و رمز در قالب XML به عنوان نوشته در mw:API:Login باز میگردد. فرمتهای دیگر نیز امکان پذیر میباشد همچنین کوکیها را به شرح زیر باز میگرداند.
درخواست ۲: URL: http://en.wikipedia.org/w/api.php?action=login&format=xml
POST parameters:
lgname=BOTUSERNAME
lgpassword=BOTPASSWORD
lgtoken=TOKEN
وقتی عبارت TOKEN از نتیجه قبلی بدست آمد کوکی HTML درخواست اول نیز به وسیله درخواست دوم گذرانده میشود. نتیجه ورود به سیستم موفق در سرور ویکی مدیا ایجاد چندین HTTP کوکی میباشد. ربات باید این کوکیها را ذخیره کند و هر زمانی که از سرور درخواست پاسخ میخواهد باید آنها را برای سرور بفرستد (قطعا این عملیات برای ویرایش باید انجام پذیرد).
در ویکیپدیا انگلیسی این کوکیها باید مورد استفاده قرار گیرند:
enwikiUserID, enwikiToken,enwikiUserName
کوکی enwiki_session برای فرستادن و ویرایش و بعضی تغییرات لازم هست. در غیر این صورت پیام خطای MediaWiki:Session fail preview نمایان میگردد.
ویرایش با رمز ویرایش(edit tokens): [ویرایش]
ویکیپدیا از سیستم رمز ویرایش edit tokens برای ویرایش صفحات ویکیپدیا همانند فعالیتهای دیگر مانند بازگشت به قبل rollback استفاده میکند. رمز مانند رشته به طول تقریبا ۲۰-۳۰ حرف با پسوند +\ میباشد. مانند مثال زیر: d41d8cd98f00b204e9800998ecf8427e+\ وظیفه رمز ویرایش (edit tokens) این هست که وقتی کاربر بر روی یک لینک به قصد ویرایش کلیک کرد بدون خروج از مرحله ویرایش بتواند به ویرایش خود ادامه دهد.
روند ویرایش شامل دو درخواست HTTP میباشد
درخواست ساخت رمز ویرایش
درخواست دوم HTTP باید انجام گیرد تا محتویات جدید صفحه همراه با رمز بفرستد.
امکان ویرایش با یک درخواست HTTP نمیباشد رمز ویرایش برای تمام مدت حضور در سیستم به یک مقدار ثابت میماند و فقط یک بار نیاز به بازخوانی آن میباشد و پس از آن برای تمام مراحل ویرایش تا زمانی که کاربراز سیستم خارج نشود میتواند استفاده کند. برای بدست آوردن رمز ویرایش مراحل زیر را دنبال کنید.
(MediaWiki API (api.php [ویرایش]
برای تولید یک درخواست پارامتر زیر را دنبال کنید برای اطلاع بیشتر mw:API:Edit - Create&Edit pages را مطالعه کنید
action=query
prop=info
titles=PAGENAME
intoken=edit
رمز به صورت رمز ویرایش ارایه میگردد. اگر رمز ویرایش دریافتی به صورت رشته به طول تقریبا ۲۰-۳۰ حرف نبود و فقط '+\' بود ربات نتوانسته به سیستم وارد شود.
این مشکل ممکن است به علت موارد متفاوتی باشد:
اشکال در تایید حساب کاربر از طرف سرور میباشد
اتصال اینترنت قطع شدهاست
انواع مختلف خروج از زمان Timeout
اشکال در ذخیره یا بازگرداندن درست کوکیها یا کوکیهای مورد نظر
اگر این خطا به خاطر مشکل برنامه نویسی نباشد. از نو به سیستم وارد شوید تا کوکیها از نو تعریف گردند. رباتها برای تشخیص اینکه در سیستم وارد شدهان یا نه از Assert Edit Extension میتوانند استفاده کنند
این صفحه به ترجمه بیشتر نیاز دارد! برای همکاری میتوانید به این صفحه مراجعه کنید.
منابع [ویرایش]
مشارکتکنندگان ویکیپدیا، «Wikipedia:Creating a bot»، ویکیپدیای انگلیسی، دانشنامهٔ آزاد (بازیابی در ۳ آگوست ۲۰۱۰).
رده: رباتهای ویکیپدیا
Robots or bots are automatic processes which interact with Wikipedia (and other Wikimedia projects) as though they were human editors. This page attempts to explain how to carry out the development of a bot for use on Wikimedia projects and much of this is transferable to other wikis based on Mediawiki. 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.
Contents [show]
[edit]Why would I need to create a bot?
Bots can automate tasks and perform them much faster than humans. If you have a simple task that 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.
[edit]Considerations before creating a bot
It is often far simpler to request a bot job from an existing bot. If you have only periodic requests or are uncomfortable with programming languages, this is usually the best solution. These requests can be made at Wikipedia:Bot requests. In addition, there are a number of semi-bots available to anyone. Most of these take the form of enhanced web browsers with Mediawiki-specific functionality. The most popular of these is AutoWikiBrowser (AWB), a browser specifically designed to assist with editing on Wikipedia and other Wikimedia projects. A complete list of semi-bots can be found at Wikipedia:Tools/Editing tools. Semi-bots, such as AWB, can often be operated with little or no understanding of programming.
If you decide you need a bot of your own due to the frequency or novelty of your requirements, you don't need to write one from scratch. There are already a number of bots running on Wikipedia and many of these bots publish their source code, which can sometimes be reused with little additional development time. There are also a number of standard bot frameworks available for download. These frameworks comprise the vast majority of a bot's code. Since these bot frameworks are in common usage and the complex coding has been done by others and has been heavily tested, it is far easier to get bots based on these frameworks approved for use. The most popular and common of these frameworks is PyWikipediaBot (PWB), a bot framework written in Python, which is well documented and tested and for which, in addition to the framework, many standardized scripts (bot instructions) are available. Other examples of bot frameworks can be found below. For some of these bot frameworks, such as PWB, a general familiarity with scripts is all that is necessary to run the bot successfully as the complex code that makes up the framework has been written and tested by others and is frequently updated (it is important to regularly apply the framework updates for these bots).
If you wish to write a new bot, be aware that it may require significant programming ability and a completely new bot will be required to undergo substantial testing before it will be approved for regular operation. 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?
[edit]How does a Wikipedia bot work?
[edit]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.
In the most typical case, a bot logs in to its own account and requests pages from Wikipedia in much the same way as a browser does – although it does not display the page on screen, but works on it in memory – and then programmatically examines the page code to see if any changes need to be made. It then makes and submits whatever edits it was designed to do, again in much the same way a browser would.
Because bots access pages the same way people do, bots can experience 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.
[edit]APIs for bots
In order to make changes to Wikipedia pages, a bot necessarily has to retrieve pages from Wikipedia and send edits back. There are several Application Programming Interfaces (APIs) available for that purpose.
MediaWiki API (api.php). This library was specifically written to permit automated processes such as bots to make queries and post changes. Data is available in many different machine-readable formats (JSON, XML, YAML,...). Features have been fully ported from the older Query API interface, see the API manual page.
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.
Screen scraping (index.php). Screen scraping 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) 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. An API query with prop=revisions&rvprop=content or prop=revisions&rvprop=content&rvexpandtemplates=1 is roughly equivalent, and allows for retrieving additional information.
Status: Built-in feature of MediaWiki, available on all Wikimedia servers.
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.
[edit]Logging in
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). Most bot frameworks should handle login and cookies automatically, but if you are not using an existing framework, you will need to follow these steps.
For security, login data must be passed using the HTTP POST method. Because parameters of HTTP GET requests are easily visible in URL, logins via GET are disabled.
To log a bot in using the MediaWiki API, 2 POST requests are needed:
Request 1
URL: http://en.wikipedia.org/w/api.php?action=login&format=xml
POST parameters:
lgname=BOTUSERNAME
lgpassword=BOTPASSWORD
If the password is correct, this will return a "NeedToken" result and a "token" parameter in XML form, as documented at mw:API:Login. Other output formats are available. It will also return HTTP cookies as described below.
Request 2
URL: http://en.wikipedia.org/w/api.php?action=login&format=xml
POST parameters:
lgname=BOTUSERNAME
lgpassword=BOTPASSWORD
lgtoken=TOKEN
where TOKEN is the token from the previous result. The HTTP cookies from the previous request must also be passed with the second request.
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.
[edit]Editing; edit tokens
Wikipedia uses a system of edit tokens for making edits to Wikipedia pages, as well as other operations that modify existing content 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.
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. An edit token remains the same for the duration of a logged-in session, so the edit token needs to be retrieved only once and can be used for all subsequent edits.
To obtain an edit token, follow these steps:
MediaWiki API (api.php). Make a request with the following parameters (see mw:API:Edit - Create&Edit pages).
action=query
prop=info
titles=PAGENAME
intoken=edit
The token will be returned in the edittoken attribute of the response.
If the edit token the bot receives does not have the hexadecimal 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. The bots may use Assert Edit Extension to make sure that they are logged in.
[edit]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.
Bots that use the Mediawiki API (api.php) should retrieve the edit token, along with the starttimestamp and the last revision "base" timestamp, before loading the page text in preparation for the edit; prop=info|revisions can be used to retrieve both the token and page contents in one query (example). When submitting the edit, set the starttimestamp and basetimestamp attributes, 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.
[edit]Overview of the process of developing a bot
Actually, coding or writing a bot is only one part of developing a bot. You should generally follow the development cycle below to ensure that your bot follows Wikipedia's bot policy. Failure to comply with the policy may lead to your bot failing to be approved or being blocked from editing Wikipedia.
Overview of Wikipedia bot development cycle
[edit]Idea
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.
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.
[edit]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 disruptive to the smooth running of the encyclopedia)
The bot is useful (it provides a useful service more effectively than a human editor could)
The bot does not waste server resources.
[edit]Software architecture
Think about how you might create it and which programming language(s) 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. Certain programming languages are better suited to some tasks than others, for more details see the section on programming languages below.
[edit]Implementation
Implementation (or coding) involves turning design and planning into 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 the same information to the user page of the bot. It would be a good idea to add a link to the approval page (whether approved or not) for each function.
Code your bot in your chosen programming language.
[edit]Testing
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.
[edit]Documentation
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.
[edit]Queries/Complaints
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.
[edit]Maintenance
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.
[edit]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.
[edit]Bot best practices
Set a custom User-Agent header for your bot, per the Wikimedia User-Agent policy. If you don't, your bot may encounter errors and may end up blocked by the technical staff at the server level.
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 your code to keep edits to a minimum.
Try to consolidate edits. One single large edit is better than 10 smaller ones.
Enable HTTP persistent connections and compression in your HTTP client library, if possible.
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 of 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.
[edit]Common bot features you should consider implementing
[edit]Manual assistance
If your bot is doing anything that requires judgment or evaluation of context (e.g., correcting spelling) then you should consider making your bot manually-assisted, which means that a human verifies all edits before they are saved. This significantly reduces the bot's speed, but it significantly reduces errors.
[edit]Disabling the bot
It is good bot policy to have a feature to disable the bot's operation if it is requested. Remember that if your bot goes bad, it is your responsibility to clean up after it! You could 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 using the API meta=userinfo query (example). Or you could have a page that will turn the bot off if text on the page is changed (e.g. require the page be empty, contain only the word "True", or something similar); this can be checked by loading the page contents before each edit.
[edit]Signature
Just like a human, if your bot makes edits to a talk page on Wikipedia, it should sign its post with four tildes (~~~~). Remember that signatures belong only on talk namespaces, and your bot should not be programmed to sign its name on any other pages.
[edit]Open-source bots
Many bot operators choose to make their code open source, and occasionally it may be required before approval for particularly complex bots. Making your code open source has several advantages:
It allows others to review your code for potential bugs. As with prose, it is often difficult for the author of code to adequately review it.
Others can use your code to build their own bots. A user new to bot writing may be able to use your code as an example or a template for their own bots.
It encourages good security practices, rather than security through obscurity.
If you leave the project, it allows other users to run your bot tasks without having to write new code.
Open-source code, while rarely required, is typically encouraged in keeping with the open and transparent nature of Wikipedia, though there are some cases when code should not be made public. For example, the open proxy-finding code of ProcseeBot could be used for malicious purposes on other sites.
Making code open source can add some extra work to coding. One has to make sure that sensitive information such as passwords is separated into a file that isn't made public.
There are several options available for users wishing to make their code open. Some users choose to put the code in a subpage of the bot's userspace, although this can be a hassle to maintain if not automated and results in the code being multi-licensed under Wikipedia's licensing terms in addition to any other terms you may specify. Another solution is to use a revision control system such as SVN, Git, or Mercurial. Wikipedia has articles comparing the different software options and websites for code hosting, many of which have no cost. The Wikimedia Toolserver also offers SVN hosting for its users.
[edit]Programming languages and libraries
See also: mw:API:Client code
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.
[edit]Perl
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, Mac OS X and UNIX/Linux. 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.
Guides to getting started with Perl programming:
A Beginner's Introduction to Perl
CGI Programming 101: Learn CGI Today!
Perl lessons
Get started learning Perl
Libraries:
MediaWiki::API – A Perl module for interfacing at a low level with the MediaWiki API, allowing information retrieval, editing, and file upload/download.
MediaWiki::Bot – A fairly complete MediaWiki bot framework written in Perl. Provides a higher level of abstraction than MediaWiki::API. Plugins provide administrator and steward functionality.
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
MediaWiki CPAN Package[dead link] 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 many common API.php uses. This is not the same as the library on CPAN.
[edit]PHP
PHP can also be used for programming bots. MediaWiki developers are already familiar with PHP, since that is the language MediaWiki and its extensions are written in. 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.)
The PHP bot functions table may provide some insight into the capabilities of the major bot frameworks.
Current PHP Bot frameworks
Key people[php 1] Name PHP Version last update Uses API[php 2] Exclusion compliant Admin functions Plugins Repository Notes
Adam BasicBot 5 or 4 2007 Unknown Unknown No No wikisum.com Fairly out of date
X!, others Peachy 5.2.1 2010 Yes Yes Yes Yes Google Code Large framework, currently undergoing rewrite. Documentation is down. Stopped at jul/2010.
Kaspo Phpwikibot Unknown 2009 Partial No No No Google Code Uses a single class.
Jarry1250 Wikibot 5 2009 Yes Yes No No enwiki Used solely by LivingBot. A fork of Phpwikibot. Uses a single class.
Foxy Loxy PHPediaWiki 5 2009 Yes No Yes No SourceForge Fork of SxWiki
Sam Korn Pillar 5 2009 Yes Yes Yes No Google Code MIT license
User:nzhamstar Wikimate 5.3.2 2012 Yes No No No Github Supports main article stuff. Authentication, Reading and editing pages/sections, checking if pages exist. Tested and working. Aims to be easy to use.
Григор Гачев Apibot 5.1 2011 Yes Yes Yes No Apibot code Full API support, compression, HTTPS, HTTP auth etc. Over 300 basic module functions. Overlayed iterator framework.
Kaleb Heitzman MediaWIkiBot 5 2012 Yes No No No Github Supports the entire API including uploading and importing. Also supports Semantic MediaWiki. Single Class that creates dynamic methods to work with any of the API calls.
Edward Z. Yang Wikpedia Bot in PHP Unknown 2005 No No No No enwiki "Probably stale" source code
GeorgeMoney Bot Framework 5 or 4 2006 Unknown Unknown Unknown No enwiki Hard to get hold of current code
Cobi wikibot.classes 5 2010 Yes Yes No No enwiki Used by multiple large bots (e.g. ClueBot and SoxBot). Uses several classes.
Chris G botclasses.php 5 2012 Yes Yes Yes No Toolserver Fork of wikibot.classes. Updated for 2010 API changes. Supports file uploading.
^ Does not include those who worked on frameworks forked to create listed framework.
^ Where possible. Excludes uploading images and other such tasks which are not currently supported by the API.
[edit]Python
Python is a popular interpreted language with object-oriented features.
Getting started with Python
Official Python tutorial
Beginner's Guide to coding in python
Dive Into Python
Libraries
PyWikipediaBot — Python Wikipedia Robot Framework (Home Page, SF Project Page)
wikitools — A lightweight bot framework that uses the MediaWiki API exclusively for getting data and editing, used and maintained by Mr.Z-man (downloads)
mwclient — An API-based framework maintained by Bryan
[edit]Microsoft .NET
Microsoft .NET is a set of languages including C#, C++/CLI, Visual Basic .NET, J#, JScript .NET, IronPython, and Windows PowerShell. The Microsoft Visual Studio integrated development environment is often used, or the free Microsoft Visual Studio Express versions. Using Mono Project, .NET programs can also run on Linux, Unix, BSD, Solaris and Mac OS X as well as under Windows.
Getting started:
Add links here!
MSDN Visual Basic portal
MSDN Visual C# portal
Libraries:
DotNetWikiBot Framework – a full-featured client API on .NET, that allows to build programs and web robots easily to manage information on MediaWiki-powered sites. Now translated to several languages. Detailed compiled documentation is available in English.
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.
WikiAccess library
MediaWikiEngine, used by Commonplace upload tool
Tyng.MediaWiki class library, a MediaWiki API written in C# used by NrhpBot
[edit]Java
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.
Getting started:
Getting started
Libraries:
Java Wiki Bot Framework
User:MER-C/Wiki.java
[edit]JavaScript
JavaScript is a scripting language used mainly on web pages. JavaScript can be used to enhance the Wikipedia by adding scripts to your vector.js or your monobook.js pages. In some circumstances it is also possible to execute scripts off-site.
Libraries:
Luasóg is javascript framework of standard requests (e.g. log in, log out, read, edit, etc.) as well as a general wrapper method for the MediaWiki API and includes helpful stuff like throttling. The project includes a rudimentary IDE for off-site development and execution.
[edit]Ruby
Libraries:
MediaWiki::Gateway – Ruby framework for the API. Actively maintained, tested up to MediaWiki 1.16, compatible with Wikimedia wikis.
rbmediawiki is a framework for writing bots in Ruby. It uses MediaWiki's API. Author Ignacio Icke.
[edit]Chicken Scheme
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
Libraries:
irnc-base
[edit]Common Lisp
cl-mediawiki implements MediaWiki API as a Common Lisp package. Is planned to use JSON as a query data format. Supports maxlag and assert edit extensions.
[edit]Haskell
http://hackage.haskell.org/package/mediawiki
[edit]Tcl
MediaWiki Tcl Bot Framework, includes IRC-RC Interface
[edit]С++/Qt4.5
[1] simple media wiki bot, written on С++/Qt and with only few functions like auth, get page source, put page source. (sources are published on Russian language forum – see attachment to topic.)
[edit]VBScript
VBScript is a scripting language based on the Visual Basic programming language. A VBScript engine is installed by default on most Windows machines, making installation of additional frameworks unnecessary (and making distribution of scripts easy). VBScript used by many system administrators as an automation tool. It can be used to easily control Internet Explorer to automate repetitive tasks.
Getting started:
VBScript, MSDN
Windows Script 5.6 Documentation, Microsoft
InternetExplorer Object, MSDN
Document Object, MSDN
Displaying Data by Using Internet Explorer, TechNet
Examples:
User:Smallman12q/Scripts/cleanuplistingtowiki - Login and give preview of edit
User:Smallman12q/VBS/Savewatchlist - Login, get raw watchlist, save to file, logout, close IE
Categories: Wikipedia bots
قس فرانسه
Les robots ou bots sont des contributeurs particuliers de Wikipédia puisqu’ils interagissent selon des processus automatiques ou semi-automatiques. Cet article vous expliquera comment dresser votre propre bot pour l’utiliser sur Wikipédia.
Sommaire [afficher]
Pourquoi créer un bot ?[modifier]
Les bots permettent d’automatiser des tâches répétitives et de les exécuter beaucoup plus rapidement qu’un humain. Si vous avez régulièrement besoin de réaliser des tâches répétitives (ajout d’un modèle, par exemple « bandeau portail » à toutes les pages d’une catégorie), il est plus adapté de les exécuter à l’aide d’un bot.
Qu'est-ce qu'un bot ?
Un bot est un programme qui s'exécute sur votre ordinateur — ou sur un ordinateur distant.
Dresser un bot consiste à programmer ce bot et à le faire fonctionner.
Que fait un bot ?
Comme vous, il opère sur le contenu de l'encyclopédie, en communicant ses opérations aux serveurs hébergeant Wikipédia par les méthodes du protocole http. Les différents types de communication consistent principalement en l'obtention (GET), la publication (POST), l'insertion (PUT) et la suppression (DELETE) de données.
Comme vous, le bot interfère avec la ressource Wikipédia dont il est un agent : Wikipédia lui envoie les informations dont il a besoin — telles que l'historique, le contenu ou des listes de pages — ; le bot les traite afin de déterminer les améliorations à leur apporter ; puis il interfère de nouveau avec Wikipédia pour opérer les améliorations.
Certains jouent aussi le rôle de majordome de salon IRC1.
Il y a bien une différence tout de même ?!
Outre votre humanité et votre traitement réfléchi et volontaire des données de Wikipédia , la différence se situe au niveau des interfaces :
Pour accéder au contenu, vous naviguez avec un navigateur web dans un affichage d'informations codées en langage XHTML (voir le code source de cette page dans le menu « Affichage » de votre navigateur).
Le bot, lui, récupère les données en utilisant l'interface de programmation de MediaWiki. Il accède ensuite par analyse syntaxique de ces données, codées en langage XML ou autres — JSON, YAML, WDDX, PHP sérialisé —, aux informations contenues.
Le bot communique donc par les canaux du Web pour obtenir de Wikipédia un accès aux données, dans le format que l'on souhaite manipuler.
Est-ce que je dois créer un bot moi-même ?[modifier]
Cette page d'aide est plus particulièrement destinée à ceux qui ont une certaine expérience de la programmation, mais ne sont pas sûrs de la façon d'appliquer ces connaissances à la création d'un bot Wikipédia.
Si cette expérience vous manque, mieux vaut faire appel aux bots existants. Des dresseurs expérimentés sauront traiter vos demandes (adaptation de bots, exécution de requêtes particulières) et sauront vous conseiller.
Sachez encore que vous pouvez également utiliser un logiciel semi-automatique comme Auto-Wiki Browser (gratuit) ou comme Robotic Easy (payant).
Si vous voulez néanmoins essayer de créer votre propre bot, alors cet article vous concerne.
Note : Si vous n'avez aucune expérience préalable de la programmation : il faut tout de même savoir que l'apprentissage d'un langage de programmation n'est pas trivial. Néanmoins, ce n'est pas non plus de la magie noire ! Avec suffisamment de temps et de travail, vous pourrez tout de même y parvenir !
Comment fonctionne un bot sur Wikipédia ?[modifier]
Vue d’ensemble[modifier]
À l’instar d’un éditeur humain, un bot peut lire le contenu de Wikipédia, prendre des décisions en fonction du contenu et, le cas échéant, calculer les modifications puis modifier le contenu de Wikipédia. Toutefois, les ordinateurs sont plus efficaces que l'homme pour certaines tâches, mais moins bons pour d'autres. Ils sont plus rapides (les bots sont capables de modifier plusieurs pages par minute) et peuvent mener à bien des tâches répétitives, mais ils ne peuvent faire de modifications importantes sur le fond ou émettre des jugements de valeur pertinents sur le contenu de la page.
Comme un éditeur humain, un bot typique va interopérer avec Wikipédia au travers d'une ou plusieurs requêtes à Wikipédia via la méthode GET du protocole HTTP (tout comme un être humain le fait au travers de son navigateur), puis effectuer des manipulations sur les données renvoyées par le serveur. Si besoin, ce processus peut se répéter plusieurs fois de suite pour compléter le travail.
Par exemple, un bot peut demander au serveur la liste des pages contenant un lien vers une page spécifique ([ Special:Whatlinkshere|liste des pages contenant un lien vers une page spécifique ]) par une requête de type « Je veux Special:Whatlinkshere/Nom ». Le bot agira ensuite en fonction du contenu HTML renvoyé par le serveur.
Interfaces de programmation (API) pour les bots[modifier]
Les API décrivent les fonctions qui permettent d'interagir avec Wikipédia.
L'API la plus commune est la capture de données d'écran. Cela consiste à appeler la page Wikipédia, à en afficher le code HTML brut (à la manière d'un opérateur humain qui demande l'affichage du « code source » via son navigateur) pour en extraire les données intéressantes. Cette manière de faire n'est pas recommandée du fait que l'interface (et donc la structure de la page) peut changer à tout moment et que cela occasionne une forte charge du serveur. Mais c'est actuellement la seule façon de récupérer une page wiki formatée en HTML. C'est également le seul moyen de réaliser des éditions à partir de la page d'édition et faire une publication HTTP (POST) basée sur les informations du formulaire d'édition.
Vous pouvez passer action=render à la page index.php afin de réduire la quantité de données à transférer et la dépendance à l'interface utilisateur. D'autres paramètres d'index.php peuvent être utiles : Manual:Parameters to index.php est une liste partielle de ces paramètres et des valeurs qu'ils peuvent prendre.
D'autres API peuvent être utilisées :
MediaWiki API extension - C'est la nouvelle génération d'API qui devrait un jour être étendue pour inclure la publication de données (data posting) aussi bien que diverses requêtes sur les données. Aujourd'hui, un certain nombre de fonctionnalités ont été implémentées, telles que la révision de contenu, la journalisation des évènements, les listes de suivi et bien d'autres. Les données peuvent être traitées dans différents formats (JSON, XML, YAML, ...). Les fonctionnalités de l'ancienne interface (Query API) de requêtes ont également été portées.
Statut : les fonctions du moteur sont partiellement implémentées ; disponible sur tous les serveurs Wikimédia.
Fonctionnalités pour exporter des pages (export de données au format XML). Voir Parameters to Special:Export pour la liste de paramètres.
Statut : Production. Fonctionnalités des moteurs ; disponible sur tous les serveurs Wikimédia.
Pages natives (brutes) : en passant action=raw ou action=raw&templates=expand à index.php, on peut accéder directement au code source des pages.
Les serveurs Wikipédia sont configurés pour traiter les requêtes sur du contenu compressé au format (gzip). Ceci peut être fait en incluant une ligne « Accept-Encoding: gzip » dans l'en-tête de la requête HTTP. Si la réponse contient « Content-Encoding: gzip », le document est un document compressé, sinon, c'est un fichier au format ordinaire non-compressé ; ne pas vérifier l'entête de la réponse peut conduire à des résultats erronés (notez que cette fonctionnalité est spécifique aux serveurs Wikipédia. Elle n'est pas liée au logiciel MediaWiki. Les autres sites utilisant MediaWiki ne disposent pas forcément de la fonctionnalité).
Exemple[modifier]
API.php
L'interface de programmation du service web (agent "-" ressource) Wikipédia est disponible ici : http://fr.wikipedia.org/w/api.php
Kézako ? Vous (ou votre robot) êtes un agent et Wikipédia est votre ressource. Vous communiquez avec elle via le protocole de requêtes http pour lui demander de vous envoyer certaines données (par exemple le contenu de toutes les pages d'une certaine catégorie, ou la liste des derniers inscrits) qui vous sont remises en XML ou en d'autres formats. Vous ou votre robot pouvez ensuite traiter ces données (par exemple chercher et corriger une faute d'orthographe parmi le texte des articles) puis de nouveau, via le protocole http, utiliser les commandes de l'API. Par exemple, pour remplacer du texte, il faut utiliser les commandes suivantes de l'API : action et ses paramètres login (pour vous logger), query (pour obtenir le texte), edit (pour modifier ce texte) et sans doute quelques autres tels que minor (pour marquer votre modification comme étant mineure) et summary (pour inclure un résumé de votre modification).
Obtenir les informations à propos de la dernière révision de la page Accueil :
api.php ? action=query & prop=info|revisions & titles=Accueil
"?xml version="1.0"?"
"api"
"query"
"pages"
"page pageid="3084756" ns="0" title="Accueil" touched="2009-05-14T15:23:48Z" lastrevid="40759274" counter="0" length="3405""
"revisions"
"rev revid="40759274" minor="" user="Xfigpower" timestamp="2009-05-11T11:35:43Z" comment="corr lien modèle" /"
"/revisions"
"/page"
"/pages"
"/query"
"/api"
Le 14 mai 2009 à 17:36 (CEST), le dernier revisionuser était Xfigpower (d • c • b) - cette information est contenue dans la chaîne « user="Xfigpower" » - le 11 mai 2009, qui a résumé sa modification par le commentaire « corr lien modèle ». Pour connaître le dernier réviseur de la page d'accueil en ce moment, cliquez sur le lien ci-dessus qui affiche ce document XML.
[afficher]
résultat de commandes dans différents formats
Connexion en tant que bot (fonctions d'écriture sur Wikipédia)[modifier]
Il est nécessaire pour un bot agréé de se connecter sous son compte utilisateur avant de pouvoir réaliser des éditions. Un bot est libre de faire des requêtes de lecture sans être connecté, mais il devrait idéalement se connecter pour toute activité.
Le bot peut se connecter de plusieurs manières (remplacer BOTUSERNAME et BOTPASSWORD par les valeurs adéquates) :
via une requête POST passée en URL de la forme http://fr.wikipedia.org/w/index.php?title=Special:Userlogin&action=submitlogin&type=login en passant les données wpName=BOTUSERNAME&wpPassword=BOTPASSWORD&wpRemember=1&wpLoginattempt=Log+in
via API, en utilisant un URL comme http://fr.wikipedia.org/w/api.php?action=login&lgname=BOTUSERNAME&lgpassword=BOTPASSWORD.
pour des questions de sécurité, il est plus sûr d'utiliser le protocole HTTPS https://fr.wikipedia.org/w/api.php?action=login et d'envoyer lgname=BOTUSERNAME&lgpassword=BOTPASSWORD avec la méthode POST.
Une fois connecté, le bot doit sauvegarder les cookies Wikipédia et s'assurer qu'il les renvoie correctement lors des requêtes d'édition.
La réponse contient le paramètre cookieprefix qui contient le préfixe des noms des cookies de login à envoyer systématiquement pour toute nouvelle requête pour utiliser ce login. Ces cookies sont les suivants :
cookieprefixUserID (frwikiUserID pour Wikipédia en français)
Identifiant de l'utilisateur.
cookieprefixToken (frwikiToken pour Wikipédia en français)
Jeton de connexion utilisateur.
cookieprefixUserName (frwikiUserName pour Wikipédia en français)
Nom de l'utilisateur.
cookieprefix_session (frwiki_session pour Wikipédia en français)
Cet Identifiant de session est exigé pour réaliser effectivement l'édition (ou soumettre une modification) ; sinon, ce message apparaît.
Voir API:Login, Hypertext Transfer Protocol et Cookie HTTP pour plus de détails.
Jetons de modification (Edit tokens)[modifier]
Wikipedia utilise un système de jetons de modification ((en)edit tokens) lors de l'édition de pages et pour certaines autres opérations.
La conséquence est que votre bot ne peut envoyer directement de requête POST via HTTP pour éditer une page. À l'image d'un éditeur humain, il doit suivre un certain nombre d'étapes :
Appel de la page à l'aide d'une chaîne comme http://en.wikipedia.org/w/index.php?title=Wikipedia:Creating_a_bot&action=edit ou http://en.wikipedia.org/w/api.php?action=query&prop=info&titles=Wikipedia:Creating_a_bot&intoken=edit
Le bot reçoit une page d'édition avec un champ de texte. Il reçoit également (et c'est important) un jeton de modification, en tant que champ caché dans un code de formulaire html. Le jeton ressemble à quelque chose comme : b66655fjr7fd5drr3411ss23456s65eg\. Ce jeton est associé à la session PHP courante (identifiée par le jeton enwiki_session). Le même jeton peut être utilisé pour éditer d'autres pages, aussi longtemps que la session dure (en général quelques heures). Si vous utilisez l'API, il faut récupérer l'attribut edittoken.
Le bot doit ensuite réaliser l'opération de modification effective de la page en revoyant une requête adaptée accompagnée du jeton de modification.
Pourquoi ai-je reçu un jeton (quasiment) vide ?[modifier]
Il est possible que votre bot reçoive un jeton vide ou "+\". C'est une indication que le bot n'est pas connecté. Cela peut être dû à une erreur lors de l'authentification par le serveur, ou une erreur d'enregistrement et de restitution des cookies corrects.
Conflits d'édition[modifier]
Il y a une forte probabilité que votre bot soit confronté à des "conflits d'édition" : cela a lieu si un utilisateur réalise une édition entre le moment où vous faites une requête de modification (obtention du jeton d'édition) et celui où vous réalisez effectivement la modification. Un autre type de conflit d'édition concerne les éditions/suppressions de page, quand une page est détruite entre le moment où le formulaire d'édition de la page est ouvert et celui où il est publié.
L'erreur en résultant peut provoquer un résultat incorrect si la valeur de la variable wpEdittime figurant dans les données envoyées au serveur est fausse. Il en est de même pour la variable wpStarttime dans le cas de conflits d'édition/suppression.
Malheureusement, pour résoudre de tels conflits, vous aurez à vérifier le document HTML lui-même. De façon générale, si, lors de la soumission du formulaire, le serveur renvoie, dans l'en-tête (header) du fichier HTML, le code "200 OK", alors l'édition n'a pas été réalisée (quelle qu'en soit la raison : conflit, perte de jeton de session, protection, verrouillage de la base de données). En cas de succès, le serveur renvoie le code "302 Moved Temporarily", avec l'URL dans le champ Location.
Vue d'ensemble du processus de développement d'un robot[modifier]
ou Dressage de votre bot.
En fait, le codage ou l'écriture n'est qu'une partie du processus de développement. En règle générale, on peut suivre le cycle de développement ci-dessous. Des manques dans le respect de ce cycle, et particulièrement des sections concernant les règles de Wikipédia (on peut voir, pour information, la version anglaise, en:Wikipedia:Bot policy) peuvent aboutir à un rejet lors de la demande d'agrément du bot, ou au blocage de ses fonctions d'édition.
Vue d'ensemble du cycle de développement (Note : le texte du diagramme reste à traduire. Pour l'instant, les termes en anglais sont signalés dans les paragraphes qui suivent.)
Déterminer ses objectifs (analyse préliminaire)[modifier]
Tâches : Initial bot idea ; Discuss the specification with others.
La première question à se poser lorsqu’on veut créer un bot est de savoir à quoi il servira (identifier les exigences ou l'idée de départ). Si vous n'avez pas d'idées claires dans cette phase, il est possible de consulter les requêtes adressées aux bots.
Assurez-vous qu'il n'existe pas déjà de bot réalisant les fonctions que vous avez identifiées. Pour connaître les fonctionnalités déjà existantes, voir la Liste des bots actifs sur la Wikipédia francophone. Si c’est le cas, contactez-le dresseur pour lui demander des conseils et savoir comment son bot fonctionne.
Écriture de la spécification[modifier]
Tâche : Write the specification.
La spécification consiste à décrire précisément le logiciel à écrire, autant que possible de façon formalisée. Vous devriez aboutir à une proposition détaillée décrivant les actions que votre bot devra effectuer. Discutez de ce projet avec d'autres éditeurs, afin de recueillir des commentaires, qui vous permettront de raffiner votre proposition. Même une bonne idée peut être améliorée en intégrant les idées d'autres personnes.
Même dans sa forme la plus élémentaire, votre bot doit impérativement répondre au moins aux critères suivants :
le bot est inoffensif : il ne doit pas dégrader le contenu des articles (ce qui serait considéré comme du vandalisme) ;
le bot est utile : il fournit un service plus rapide mais tout aussi efficace et précis que ne l'aurait rendu un éditeur humain ;
le bot ne gaspille pas les ressources du serveur.
Assurez-vous que votre proposition est conforme à la politique Wikipédia pour les bots.
Proposer votre bot[modifier]
Tâche : Make a bot proposal.
À ce moment, il est nécessaire de faire quelques opérations de mise en place du projet :
Créez un compte enregistré spécifique à votre bot, car vous ne devez pas éditer en mode bot sous votre propre compte. Idéalement, le nom de votre bot devrait contenir « Bot », et vous devriez choisir un nom du type « Votrenomd’utilisateurBot » ;
Ajoutez ces informations à votre proposition et la publier dans les propositions de bot ;
Indiquez sur la page utilisateur de votre bot quels sont ses objectifs. N’oubliez pas de préciser que votre bot est en phase de test et qu’il n’est pas encore un bot officiel. Vous devriez également ajouter un lien vers la page d'approbation (quel que soit le statut courant) ;
Indiquez dans votre compte principal que vous êtes le dresseur de ce bot.
Votre proposition est alors commentée, et acceptée ou rejetée.
Architecture[modifier]
Tâche : Implement the bot (1).
Lors de cette tâche, vous devez penser Comment vous pourriez développer le programme et quels langages et outils de programmation vous pourriez utiliser. L'architecture s'attache à s'assurer que le système satisfera aux exigences et que des exigences futures pourront être prises en compte (évolutions et maintenance). Il y a différents types de bots (pour information, vous pouvez voir la page anglaise en:Wikipedia:Types of bots, non traduite).
Implémentation (Codage)[modifier]
Tâche : Implement the bot (2).
L'implémentation (ou codage) consiste à transformer la conception en code informatique. Elle peut apparaître comme la partie la plus visible de l'ingénierie logicielle, mais ce n'est pas forcément la phase la plus longue. Dans cette phase, vous devrez :
coder votre bot dans le langage de programmation de votre choix.
Tests[modifier]
Tâches : Test the bot ; Bot approved and deployed
Même accepté, votre bot passe d'abord par une période d'essai pendant laquelle il est utilisé afin d'effectuer des ajustements fins et de détecter et résoudre les problèmes.
Tant que votre bot n’aura pas le statut officiel de bot, vous devriez le tester à vitesse réduite (5 édits/minute) afin de pouvoir vérifier toutes ses modifications et l’arrêter si nécessaire.
Documentation[modifier]
Tâche : Documentation
Une tâche très importante (et souvent négligée) est de documenter la conception interne de votre bot à des fins de de maintenance et d'améliorations futures.
N’hésitez pas à expliquer en détail le fonctionnement de votre bot sur sa page utilisateur et d’y publier le code source. Ce code devrait être bien auto-documenté pour faciliter la tâche. Ainsi vous permettrez aux contributeurs qui voudraient dresser un bot similaire d’utiliser votre travail. Cette documentation vous servira aussi de pense-bête pour les futurs entretiens et perfectionnements de votre bot. Enfin cette documentation permettra aux contributeurs de savoir précisément les actions que votre bot peut réaliser et de vous suggérer éventuellement de nouvelles fonctions.
Si vous désirez partager vos codes et expérience avec d'autre dresseurs, vous pouvez aussi vous inscrire au Projet:Bot.
Soutien et entretien[modifier]
Tâche : Support and maintenance
Vous devez vous attendre à recevoir des questions, commentaires et objections sur votre page de discussion. Cela fait partie de la vie des bots.
Maintenir et améliorer votre bot pour corriger les problèmes qui sont découverts régulièrement ou pour implémenter de nouvelles exigences peut prendre beaucoup plus de temps que l'élaboration initiale du logiciel : le code à ajouter peut être incompatible avec la conception initiale (il faudra donc la modifier). D'autre part, reprendre un logiciel après un certain temps demande un effort important de compréhension de son fonctionnement.
Si vous introduisez de nouvelles fonctionnalités, vous devrez reprendre une série de tests. De même, si des évolutions majeures sont envisagées, il faudra repasser par le processus d'approbation. Enfin, votre bot devra être entretenu et adapté pour faire face aux évolutions régulières du logiciel MediaWiki.
Orientations générales concernant la mise en œuvre d'un bot[modifier]
En plus de la politique officielle des bots, qui couvre les principaux points à considérer lors de l'élaboration du robot, on peut donner un certain nombre de conseils plus généraux à prendre en compte lors du développement du bot.
Bonnes pratiques[modifier]
Quelques recommandations :
Évitez de faire plus de 10 requêtes (lecture et écriture confondues) par minute.
Privilégiez les heures creuses du serveurs pour lancer vos requêtes. Tout au moins, diminuez le taux de requêtes aux heures de pointe (la charge des serveurs peut être vérifiée avec le paramètre Maxlag ; voir (en)Maxlag parameter - non traduit).
Les requêtes d'écriture sont plus coûteuses en temps de traitement côté serveur que les requêtes de lecture. Limitez les éditions !
Ne pas effectuer de requêtes en parallèle : effectuer vos requêtes successivement.
Arrêter son bot lorsqu’il reçoit des messages d’erreur de la part des serveurs, ce qui est souvent une indication de surcharge des serveurs. Dans ce cas, il est inutile d'assaillir le serveur en multipliant les requêtes. Il vaut mieux différer le traitement.
Essayer de regrouper les modifications. Il est préférable de faire une grosse modification qu’une dizaine de petites. Écrivez et testez votre code en gardant ceci à l'esprit.
Utilisez l'extension Assert Edit qui donne au bot accès à quelques flags utiles (actif sur Wikipédia).
Quelques considérations de conception[modifier]
Vous devez vous poser certaines questions au moment de préciser la conception du bot :
est-il exécuté sur le serveur (server-side) ou sur le poste de l'utilisateur (client-side) ?
est-il entièrement automatisé ou nécessite-t-il des interventions manuelles ?
est-ce que les requêtes doivent être enregistrées ?
est-ce qu'un rapport sur ses actions doit être envoyé à un humain ?
Fonctionnalités communes qui devraient être mises en œuvre[modifier]
Limitation de la vitesse d'édition[modifier]
Votre bot ne devrait pas avoir une vitesse d'édition trop importante. Les timers sont une façon pour les bots de contrôler cette vitesse : ils permettent d’interdire à votre bot d’éditer pendant un certain temps après une action (patienter 10 secondes entre chaque édit par exemple). Dans le langage Perl, cela peut être réalisé avec la fonction sleep(10), où 10 représente le nombre de secondes d’inactivité du bot. En C#, vous pouvez utiliser Thread.Sleep(10000); qui fait le même chose (il faut préalablement effectuer la déclaration using System.Threading).
Interventions manuelles[modifier]
Dans certains cas, votre bot peut avoir besoin de l'intervention de l'homme. C'est en particulier le cas si des décisions complexes doivent être prises (par exemple, évaluation du contexte avant modification, correction d'orthographe ou de grammaire, etc.). Il faut alors mettre en place des dispositifs permettant l'intervention humaine pendant l'exécution du bot, en particulier la confirmation manuelle des modifications proposées automatiquement par le bot.
Désactivation du bot[modifier]
Il est souhaitable de disposer d'un moyen pour arrêter votre bot en cas de besoin. Vous pouvez par exemple programmer l’arrêt automatique de votre bot s’il a reçu un message sur sa page de discussion, en faisant l'hypothèse que cela pourrait être une plainte contre ses activités (tester la présence d’une bannière « Vous avez de nouveaux messages… » dans le code HTML). Pensez à expliquer sur cette page que tout nouveau message provoquera l’arrêt automatique de votre bot et proposez une autre page pour les suggestions d'amélioration, requêtes à intégrer, etc. (votre page de discussion, par exemple). Vous pouvez également avoir une page spécifique qui permettra d'arrêter le bot : insérez sur la page une balise True dont la valeur pourra être modifiée. À l'exécution du bot, il suffira de tester cette information avant chaque édition pour autoriser ou interdire le fonctionnement du bot.
Signature[modifier]
Comme tout contributeur, si un bot édite une page de discussion, il devra signer sa contribution de la façon classique, c'est-à-dire avec quatre tildes (~~~~). Néanmoins, un bot n'est pas obligé de signer ses contributions dans l’espace encyclopédique.
Quelle technique et quel langage employer ?[modifier]
Les outils semi-automatisés[modifier]
En complément des vrais bots, il existe des bots semi-automatisés qui sont à la disposition de tous. La plupart d'entre eux se présentent comme des ajouts aux navigateurs web, leur donnant des fonctionnalités supplémentaires. Ils permettent par exemple de charger une page, d’effectuer automatiquement des modifications, puis de les valider manuellement. Le plus populaire est le logiciel AutoWikiBrowser.
Voir aussi :
Liste de bots sur la Wikipédia francophone
Liste complète des bots
Les clones[modifier]
Il y a déjà beaucoup de bots sur Wikipédia, dont un certain nombre qui publient leur code source afin de vous permettre de les télécharger et d'en utiliser une copie (un clone) en vue de réaliser des tâches utiles en parcourant Wikipédia.
Pour cela, contactez les dresseurs concernés.
Développer un nouveau bot[modifier]
Les bots sont de petits programmes ou applets qui peuvent être écrits dans divers langages de programmation. On distingue généralement deux types de bots : ceux exécutés sur le poste client (client-side) et ceux exécutés sur le serveur (server-side). Les premiers sont uniquement exécutés par l'utilisateur via son navigateur, et à sa demande. Les seconds peuvent être hébergés sur votre propre machine ou sur un serveur externe et démarrent automatiquement en fonction des tâches que vous avez programmées. Vous pouvez aussi autoriser leur lancement par d’autres contributeurs.
Un aperçu des différents langages utilisables pour les bots de Wikipédia figure ci-dessous. Dans chaque cas, des références d'articles fournissant des conseils externes sont indiquées, ainsi que les bibliothèques logicielles utilisables (qui vous éviteront de réinventer la roue pour les fonctions de base).
Note : les références sont en anglais. Merci à ceux (celles) qui pourront trouver les équivalences en français.
Perl[modifier]
Perl est un langage interprété : il n'est pas nécessaire de compiler votre code, comme cela se fait pour la plupart des langages de programmation. Il suffit de créer le programme avec un éditeur adapté (par exemple gvim, mais il en existe bien d'autres) puis de l'exécuter au travers d'un interpréteur qui peut résider sur votre ordinateur ou sur un serveur Web distant. Dans ce dernier cas, vous pouvez lancer le programme depuis votre navigateur et communiquer avec lui au travers de l'interface CGI (Common Gateway Interface). Perl est disponible sur la plupart de systèmes d'exploitation, y compris Microsoft Windows (qui existe sur bien des postes individuels client) et UNIX (que l'on trouve sur de très nombreux serveurs Web). Si votre fournisseur d'accès Internet vous met à disposition un espace pour vos pages personnelles, il y a de grandes chances qu'il vous fournisse également un interpréteur Perl que vous pourrez utiliser pour exécuter vos programmes Perl.
Le processus :
Exemple de code Perl :
open (INPUT, "" $filepageid") || &file_open_error("$filepageid");
while ($page_id="INPUT"){
chomp($page_id);
push @page_ids, $page_id;
$hits_upto_sth-"execute($page_id, $start_date);
$hits{upto}{$page_id} = $hits_upto_sth-"fetchrow_array();
$hits_daily_sth-"execute($page_id, $today);
$hits{today}{$page_id} = $hits_daily_sth-"fetchrow_array();
$hits_daily_sth-"execute($page_id, $yesterday);
$hits{yesterday}{$page_id} = $hits_daily_sth-"fetchrow_array();
$hits_range_sth-"execute($page_id, $start_of_30_days,
$end_of_30_days,);
$hits{monthly}{$page_id} = $hits_range_sth-"fetchrow_array();
}
Guides pour débuter en Perl :
(en) A Beginner's Introduction to Perl (Perl pour les débutants)
(en) CGI Programming 101: Learn CGI Today! (Programmation CGI 101 : Apprenez CGI aujoud'hui !)
(en) Perl lessons (Cours de Perl)
(en) Get started learning Perl (Démarrer en Perl)
(fr) [1] (Apprendre le Perl)
Bibliothèques :
(en) Anura -- Interface Perl à base de MediaWiki libwww-perl. Note : cette interface n'est pas recommandée car elle ne traite pas les conflits d'édition.
(en) WWW::Mediawiki::Client -- Les modules Perl et la ligne de commande côté client
(en) WWW::Wikipedia -- Les modules Perl pour interfacer Wikipédia)
(en) Perl Wikipedia ToolKit -- Modules Perls, analyse du texte et extraction des données
(en) perlwikipedia : un environnement de développement à peu près complet développé en Perl pour Wikipédia.
PHP[modifier]
PHP peut également être utilisé pour programmer les bots. PHP est particulièrement adapté si vous désirez fournir à votre bot une interface basée sur les formulaires web. Par exemple, supposons que vous vouliez créer un bot pour renommer des catégories. Vous pourriez créer un formulaire HTML dans lequel vous pourriez saisir l'ancien et le nouveau nom de la catégorie. Au moment où le formulaire est envoyé, votre bot lit ces données, puis édite tous les articles contenant la catégorie courante avant de les déplacer dans la catégorie désirée (il faut évidemment que ce type de bots soient sécurisés contre les internautes qui pourraient y accéder par hasard).
Pour vous connecter à votre bot, vous devez savoir comment utiliser PHP pour envoyer et recevoir des cookies. Pour éditer avec votre bot, vous devez savoir comment envoyer des variables dans un formulaire. Des bibliothèques comme (en) Snoopy permettent de simplifier ces actions.
Bibliothèques :
(en) BasicBot - Un environnement basique avec des exemples de scripts pour les bots basé sur (en) Snoopy.
(en) SxWiki - Un environnement de développement extrêmement simple.
Article détaillé : Catégorie:Bot publié en PHP.
Python[modifier]
Juste une introduction...
Un exemple de code Python :
def addt5(x):
return x+5
def dotwrite(ast):
nodename = getNodeName()
label=symbol.sym_name.get(int(ast[0]),ast[0])
print ' %s [label="%s' % (nodename, label) ,
if isinstance(ast[1], str):
if ast[1].strip():
print '= %s "];' % ast[1]
else:
print '"]'
else:
print '"]'
children = []
for n, child in enumerate(ast[1:]):
children.append(dotwrite(child))
print ' %s -" {' % nodename,
for name in children:
print '%s' % name,
Commencer avec Python :
(en) Official Python tutorial -- Tutoriel officiel de Python.
(en) Beginner's Guide to coding in python -- Coder en Python pour les débutants.
(fr) [2] -- Apprendre Python
Bibliothèques :
(en) PyWikipediaBot -- Projet : "Environnement de développement pour les bots Wikipédia" (Home Page, SF Project Page)
Article détaillé : Catégorie:Bot publié en python.
Microsoft .NET[modifier]
Cet environnement comprend les langages C#, Managed C++, Visual Basic .NET, J#, JScript .NET, IronPython, et Windows PowerShell.
Il existe une version gratuite de Microsoft Visual Studio (Visual Studio Express), avec des fonctionnalités réduites.
Exemple de code C# pour les bots (extrait de (en) DotNetWikiBot Framework) :
using System;
using DotNetWikiBot;
class MyBot : Bot
{
public static void Main()
{
Site enWP = new Site("http://en.wikipedia.org", "myLogin",
"myPassword");
Page p = new Page(enWP, "Art");
p.Load();
p.AddToCategory("Visual arts");
p.Save("comment: category link added", true);
PageList pl = new PageList(enWP);
pl.FillFromPageHistory("Science", 30);
pl.LoadEx();
pl.SaveXMLDumpToFile("Dumps\\ScienceArticleHistory.xml");
}
}
Débuter avec .NET :
à compléter
Bibliothèques :
(en) DotNetWikiBot Framework -- Une API propre et complète en C# disponible sour forme de dll qui permet de créer des programmes et des robots facilement afin de gérer les information sur les sites qui utilisent MediaWiki. Une documentation détaillée est disponible.
(en) WikiFunctions .NET library - Livrée avec AWB, c'est une bibliothèque d'utilitaires pour les bots (générations de listes, chargement/édition d'articles, connexion aux IRC de chargement récents, et bien d'autres).
(en) WikiAccess library -- Bibliothèque WikiAccess.
(en) MediaWikiEngine -- Moteur MediaWiki utilisé par Commonplace upload tool.
(en) Tyng.MediaWiki class library -- API MediaWiki API utilisée by NrhpBot.
Java[modifier]
Souvent développé grâce à l'IDE Eclipse.
Exemple de code :
public static void main(String [] args) throws Exception {
MediaWikiBot bot = new MediaWikiBot("http://en.wikipedia.org/w/");
bot.login("user", "pw");
SimpleArticle a = null;
try {
a = new SimpleArticle(bot.readContent("Main Page"));
}catch(Exception e){
System.out.println("The bot could not find the main page");
}
modifyContent(a);
bot.writeContent(a);
}
Pour débuter avec Java :
(en) Getting started -- débuter avec Java.
Bibliothèques :
(en) Java Wiki Bot Framework -- Environnement de développement Java pour les bots Wiki.
en:User:MER-C/Wiki.java
Ruby[modifier]
RWikiBot est un environnement basé sur Ruby pour la création de bots. Actuellement, il est en cours de développement et a besoin de contributeurs. Il implémente l'API officielle MediaWiki et, de ce fait, présente un certain nombre de limitations.
Un exemple simple :
require "rubygems"
require "rwikibot"
# Créer un bot
bot = RWikiBot.new "TestBot", "http://site.tld/wiki/api.php"
# Authentification
bot.login
# Récupère le contenu de l'article "Cheval"
content = bot.content "cheval"
Bibliothèques :
RWikiBot
(en) Chicken Scheme[modifier]
Iron Chicken est une extension (appelée aussi egg) de Chicken Scheme (voir l'article anglais : en:Chicken Scheme) qui rend l'API de Mediawiki programmable au moyen des S-expressions, et permet de convertir les pages HTML et les contenus retournés par l'API en SXML (voir l'article anglais : en:SXML), de manière à les traiter plus facilement.
Un exemple simple qui récupère les articles d'une catégorie et les écrit dans une sous-page utilisateur :
en:User:Tony Sidaway/scripts/categorymembers
Librairies :
(en) irnc-base
JavaScript[modifier]
Article détaillé : Utilisateur:Dr_Bot/Scripts.
Références[modifier]
Sur les autres projets Wikimedia :
Créer un bot, sur Wikibooks
(en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Wikipedia:Creating a bot » (voir la liste des auteurs)
↑ http://inamidst.com/phenny/
Projet Bot
Catégorie : Wikipédia:Bot
قس روسی
Бот нужен для массовых работ, когда очень занудно повторять одно и то же действие много раз. Пусть машина делает «грязную» работу, а человек может мыслить над новой статьёй.
Ниже приведено несколько примеров.
[править]переименование категорий
Основная статья: mw:Manual:Pywikipediabot/category.py
Для переименования категорий есть специальный модуль pywikipediabot’а.
python category.py move -from:"старое название категории" -to:"новое название категории"
Этой командой создаётся новая категория (если её ещё нет) как точная копия старой, во всех статьях, включённых в категорию меняется название категории и в конце отмечается теперь уже пустая старая категория к удалению. Переименование категорий с помощью бота гораздо предпочтительнее переименования вручную, так как это не только экономит время (особенно, если в категорию включено много страниц), но и позволяет избежать случайных ошибок, весьма вероятных при ручной обработке.
[править]переименование статей
Основная статья: mw:Manual:Pywikipediabot/movepages.py
Для переименования статей есть специальный модуль pywikipediabot’а.
python movepages.py -from:'старое название статьи' -to:'новое название статьи'
Этой командой создаётся новая статья (если её ещё нет) как точная копия старой, а в старой статье остаётся перенаправление на новую. При использовании параметра -del старая статья помечается к удалению или удаляется, если бот имеет флаг администратора.
Переименование страниц с помощью бота имеет смысл при большом объёме работ, например при перемещении в другое пространство имён.
python movepages.py -prefix:'новое название пр-ва имён'
Существенно облегчает работу наличие файла для автоматического переименования. Файл должен быть в формате [ название статьи ] [ новое название ] [ название статьи ] [ новое название ] …
python movepages.py -pairs:'название файла'.dat
python movepages.py -cat:название_категории -from:'старое название статьи' -to:'новое название статьи'
Пример: Условно нужно исправить одинаковую ошибку во всех названиях из категории Категория:Округа Франции, условная ошибка - дополнение к названию (округ), меняем маленькую «о» на заглавную «О».
Для этого пишем: movepages.py -always -cat:Округа_Франции -from:'(округ)' -to:'(Округ)'
Бот дважды просит подтвердить задание на выполнение n / y / all (выбираем all), после чего бот приступает в автоматическом режиме переименовывать все статьи из категории.
Внимание, для переименования не пишите просто -from:'о' -to:'О' в этом случае все «о» названия статьи будут изменены на заглавную «О» (БОрдО (Округ)).
Параметр -always: требуется для массового переименования.
Параметр -cat: позволяет переименовывать все статьи из заданной категории.
Параметр -noredirect: подавляет перенаправление.
[править]интервики
Основная статья: mw:Manual:Pywikipediabot/interwiki.py/ru
Бот для заданного названия страницы (это может быть статья, категория и т. д.) или для целого ряда страниц (из списка) или по всем страницам проходит по заданным на странице интервики-ссылкам и смотрит там, какие интервики записаны на тех страницах. В идеальном случае (если нет интервики-конфликтов) он добавляет на страницу в нашем разделе недостающие интервики и удаляет ссылки на несуществующие страницы в других разделах. Примеры:
python interwiki.py 'название страницы'
python interwiki.py -file:'название списка'
python interwiki.py -start:! -force (проходит по всем статьям и удаляет неправильные ссылки)
python interwiki.py -start:Category:A -until:B (проходит по категориям от A до B)
python interwiki.py -new:100 (проверяет 100 новейших статей, устанавливаемое число может быть любым)
дополнительный параметр -lang: (interwiki.py -lang:fr -new:100) позволяет проверять новейшие статьи в другом разделе ВП
python interwiki.py -cat:'название категории' (проверяет статьи из категории, пример: interwiki.py -cat:Учебные_самолёты)
*категории состоящие из более одного слова должны быть соединены (тире снизу _ ) или включены в апострофы (')
python interwiki.py -catr:'название категории' (проверяет категорию и (в отличии от -cat:) все подкатегории заданной категории)
python interwiki.py -usercontribs:Editor -namespace:14 -number:150
(интервикифицирует вклад участника "Editor" в пространстве имён "Категория", выборка из последних 150 правок)
python interwiki.py -links:Москва
(интервикифицирует все статьи, которые ссылаются на статью "Москва")
python interwiki.py -transcludes:'название шаблона'
(интервикифицирует все статьи, которые содержат шаблон "название шаблона")
Для работы в автоматическом режиме следует добавить параметр -autonomous. Пример: interwiki.py -autonomous -start:Ф (проверяет все статьи начинающиеся на букву Ф)
в проблемных случаях когда бот не знает стоит добавлять интервики или нет, такие случаи записываются в файл autonomous_problems.dat, данный файл при необходимости создаётся автоматически в папке pywikipedia на вашем жёстком диске.
Примечание: из-за некоторых особенностей работы шаблонов не рекомендуется использовать интервики-бот в пространстве имён «шаблон» в автономном режиме, все правки в этом пространстве следует тщательно проверять, чтобы избежать ошибок с расстановкой тегов "noinclude".
[править]разрешение интервикиконфликтов
Здесь дан пример.
[править]исправление ссылок
Часто бывает, что статьи ссылаются на страницу разрешения неоднозначности. Это с помощью бота легко исправлять в полуавтоматическом режиме.
python solve_disambiguation.py 'название страницы разрешения неоднозначности'
Программа создаёт меню из всех ссылок на странице дизамбига и назначает каждой ссылке отдельный номер. Потом бот проходит по всем страницам, которые ссылаются на страницу разрешения неоднозначности и показывает 30 знаков от текста этой страницы. Остаётся набирать нужный номер и бот заменяет ссылку на дизамбиг ссылкой, которая соответствует этому номеру.
Когда задан параметр -main, то бот обрабатывает только статьи и игнорирует другие пространства имён (как обсуждения, Википедия: и т.д.).
см. Список страниц неоднозначностей, отсортированных по количеству включений — обширное поле деятельности для ботовода.
[править]исправление двойных перенаправлений
Бот с успехом справляется и с этой задачей
python redirect.py double
[править]исправление ссылок на многозначные термины
python disambredir.py G
Бот разгребает категорию Многозначные термины, начиная (в данном случае) с буквы G. Можно выбирать из опций ничего не делать, исправлять ссылку, изменять текст ссылки и превращение ссылки в текст.
[править]исправление орфографических, смысловых ошибок и ошибок вики-синтаксиса
Основная статья: mw:Manual:Pywikipediabot/replace.py/ru
Возможно и такое! Для этого можно использовать боты replace.py или user-fixes.py. Но для начала проще воспользоваться функцией «Regex typo fixing» в AWB. Выражения для исправления ошибок в этом случае берутся со страницы Википедия:AutoWikiBrowser/Typos
replace.py может исправлять ошибки вики-синтаксиса (не рекомендуется запускать в автоматическом режиме)
python replace.py -fix:syntax -file:'файл со списком статей'
В примере бот пройдётся по категории Напитки и заменяет «вино» на «пиво» и «красное» на «светлое»
python replace.py -cat:Напитки "вино" "пиво" "красное" "светлое"
[править]удаление спама
python spamremove.py spammedsite.com
[править]удаление ссылок на страницу
python unlink.py 'название страницы' -namespace:0 -namespace:6
Удаляет ссылки на страницу [ название страницы ] в статьях и описаниях изображений.
[править]найти пересечения по двум критериям
Иногда потребуется список статей, которые удовлетворяют выполнению двух критериев, например все города Германии, расположенные на реке Эльба. Для этой задачи можно использовать модуль List comparer программы AutoWikiBrowser. В списке 1 задаётся Category (recursive) «Города Германии», во втором списке Category «Города на Эльбе». Можно использовать фильтр для отсеивания других пространств имён кроме основного. Нажатием на Compare мы получаем список пересечений, который можно сохранить в списке.
[править]Особенности кириллицы
При работе с pywikipedia ботом.
Для корректной работы с категориями и буквами на кириллице под Windows нужно прописать в файл user-config.py следующие строки:
# -*- coding: utf-8 -*-
console_encoding = 'cp1251'
Список кодов по странам — Википедия:Рекомендации юному ботоводу/Список кодов.
[править]Обработка группы статей
-cat:"Название категории" (обработка всех статей в данной категории)
-catr:"Название категории, которая обрабатывается вместе с подкатегориями"
-subcat: (то же самое)
-file:"Название файла, который содержит список статей"
-transcludes:"Название шаблона" (обработка всех статей, которые содержат шаблон)
-new:"Число новых статей"
-start:"Буква, с которой начинается обработка"
-until:"Буква, на которой заканчивается обработка"
-usercontribs:"Название учётной записи" (обработка вклада участника)
-links:"название статьи" (обработка всех статей, ссылки на которых есть в статье)
-ref:"название статьи" (обработка всех статей, ссылающих туда)
[править]С чего начать?
Рекомендуется тренироваться с помощью АвтоВикиБраузера. Удобный графический интерфейс позволяет перед каждой правкой посмотреть результат правки. Если обнаруживается ошибка, то можно её исправить перед сохранением. Далее рекомендовано ознакомиться с «регулярными выражениями» (regular expressions). Чем лучше вы разбираетесь в них, тем эффективнее бот может работать.
[править]На какие грабли можно наступить?
интервики
По умолчанию страницы разрешения неоднозначности (с шаблоном {{disambig}}, {{неоднозначность}} или подобными) не должны быть связаны с обычными статьями. Pywikipediabot безжалостно удаляет такую связь, даже, если шаблон в одном из разделов поставлен (или отсутствует) по ошибке.
Расставлять интервики в шаблонах нужно крайне осторожно.
Исправление орфографических ошибок без просмотра может привести к самым неожиданным результатам. Если хочется исправить всем знакомое трёхбуквенное слово на «половой член», то глупый бот изменит также слово «застрахуйтесь!».
[править]namespace:
Пространство имён.
namespace:0 — Статья
namespace:1 — Обсуждение статьи
namespace:2 — Участник
namespace:3 — Обсуждение участника
namespace:4 — Википедия (ВП:Проект/... и т.д.)
namespace:5 — Обсуждение Википедии
namespace:6 — Файл
namespace:10 — Шаблон
namespace:11 — Обсуждение шаблона
namespace:14 — Категория
namespace:100 — Портал
namespace:101 — Обсуждение портала
namespace:102 — Инкубатор
namespace:103 — Обсуждение инкубатора
namespace:104 — Проект
namespace:105 — Обсуждение проекта
[править]Шаблон:Nobots
Бывают случаи, что обработка страницы ботом нежелательна (например, в некоторых часто употребляемых шаблонах категории и интервики перенесены на подстраницу «Документация»). Хотя об этом может быть написано на странице шаблона в комментариях ("!-- Интервики пожалуйста в документацию!!! --"), боты неустанно игнорируют эту просьбу.
В таких случаях можно избавиться от забот, помещая на страницу шаблон {{nobots}}. Также можно запретить правку страницы отдельными ботами. Подробнее см. на странице описания шаблона.
[править]Полезные ссылки
Википедия:Боты/FAQ
Википедия:AutoWikiBrowser
Википедия:AutoWikiBrowser/Typos
Установка и использование бота pywikipedia
Pywikipediabot/Scripts — список скриптов из pywikipedia
Latitude/Установка и использование бота pywikipedia
Категория: Википедия:Боты
واژه های همانند
هیچ واژه ای همانند واژه مورد نظر شما پیدا نشد.