ویکیپدیا:چگونه یک ربات بسازیم
رباتهای سایبری ویکیپدیا، ابزارها و فرایندهایی هستند که برای برقرار کردن ارتباط بهصورت اتوماتیک با ویکیپدیا به عنوان ویرایشگرانی که بشر آنها را هدایت میکند استفاده میشوند. در این صفحه راههای توسعه و ساخت ربات را برای استفاده در ویکیپدیا توضیح میدهیم. برای ساخت ربات، در ابتدا باید دانست که هدف ما از ساخت یک ربات چیست؟ تا بتوانیم برای پیشبرد این هدف تمام تلاش خود را انجام دهیم.
چرا من باید یک ربات بسازم؟
[ویرایش]رباتها به صورت خودکار توانایی انجام کارها را دارند و این یعنی سریعتر از انسانها عمل میکنند. برای انجام کارهای ساده نیازی به ربات نیست اما اگر شما نیاز دارید که کاری را به تعداد زیاد انجام دهید مثلاً: ممکن است شما نیاز پیدا کنید که یک الگویی را به تمام مقالههای موجود در یک رده (۱۰۰۰ مقاله) بیفزایید، پس راه مناسب برای انجام این کار طاقت فرسا استفاده از ربات به جای انسان است.
نکات قابل توجه قبل از ایجاد ربات
[ویرایش]اینها تعدادی از رباتهای در حال اجرا در ویکیپدیا هستند.
اگر شما تصمیم به ساخت ربات گرفتهاید برنامهریزی را مد نظر داشته باشید تا از خطاهای احتمالی جلوگیری کرده باشید، این مسایل باید مد نظر قرار گفته شوند:
- آیا به صورت دستی ربات را فعال میکنید یا اینکه ربات بهصورت اتوماتیک کار میکند؟
- آیا ربات را به تنهایی ایجاد کردهاید یا از رباتدارهای سایر زبانها کمک گرفتهاید؟
- از چه زبانی برای پیادهسازی ربات استفاده کردهاید؟
- آیا درخواستی برای پرچم دادهاید و اینکه آیا وارد سیستم شدهاید؟ اگر اینگونهاست، کارهایی که با ربات انجام میدهید در سیاههها و تغییرات اخیر قابل رویت است و در صفحات ویکی ذخیره میشود.
- آیا ربات را برای اجرا در وب آماده کردهاید یا به روشهای دیگر و با زبانهای دیگر همچون جاوا اسکریپت آن را ساختهاید؟
- اگر ربات را بوسیله برنامهای مستقل ساختهایدآیا آن را بر روی رایانه خودتان گذاشتهاید یا بر روی یک سرور مانند Toolserver و از راه دور آن را کنترل میکنید؟
- اگر ربات قابل اجرا بر روی یک سرور از راه دور است، آیا ویراستاران دیگر قادر هستند که کار ربات یا شروع کار آن در زمان اجرا را ببینند؟
چگونه ربات در ویکیپدیا کار میکند؟
[ویرایش]رباتها دقیقاً همانند انسانها ویرایش میکنند با این تفاوت که اگر چه رباتها سریعتر از انسانها هستند و خستگی ناپذیرند اما آنها آن چیز که ما به آنها میگوییم را انجام میدهند. رباتها برای انجام کارهای تکراری همانند گذاشتن الگوها در مکانهای از پیش تعیین شده بسیار مناسب هستند. در اکثر موارد رباتها در ویکیپدیا با حساب کاربری خود وارد میشوند و از ویکیپدیا مانند مرورگرها درخواست صفحه میکنند ولی این صفحات را نمایش نمیدهند بلکه روی آنها در حافظه خود کار میکنند و به سختی روی کدهای صفحه در صورتی که نیاز باشد برای ویرایش کار میکنند و سپس تمام مواردی را که برای انجام آنها طراحی شدهاست را انجام میدهند و در ویکیپدیا ذخیره میکنند مانند مرورگرها. از آنجایی که روباتها مانند انسانها با صفحات وب مواجه میشوند به همین دلیل با مشکلات بسیاری روبرو میشوند از جمله قطع شدن ویرایش و به هم ریختگی ویرایش و خارج شدن از زمان و برخورد کردن با مشکلات غیرقابل پیش بینی. به همین جهت معمولاً رباتها را برای انجام کارهای زیاد طراحی میکنند و در نظر گرفتن راه حل مناسب برای برخورد با این مشکلات در طراحی ربات نقش مهمی دارد.
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 بودند کاربرد داشته است.
وضعیت: نامطلوب
برای تولید خروجی از صفحات در قالب 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: https://fa.wikipedia.org/w/api.php?action=login&format=xml
POST parameters:
lgname=BOTUSERNAME
lgpassword=BOTPASSWORD
اگر پسورد درست بود نتیجه "NeedToken"
و رمز در قالب XML به عنوان نوشته در mw:API:Login
بازمیگردد. فرمتهای دیگر نیز امکانپذیر میباشد همچنین کوکیها را به شرح زیر بازمیگرداند.
درخواست ۲:
URL: https://fa.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». در دانشنامهٔ ویکیپدیای انگلیسی، بازبینیشده در ۳ آگوست ۲۰۱۰.