ویکیپدیا:درخواستهای ربات/ربات پایپینگ ردهها
این ربات نام یک رده یا مجموعهای از ردهها را از کاربر می گیرد و زیر ردهها و مقالات آن را در صورتی که عبارت ابتدایشان تکراری باشد را براساس عبارتهای غیر تکراری مرتب میکند. نمونهٔ کار ربات این
- آرگومانها
- -cat:نام رده با پسوند یا بدون پسوند
- -start:category:! برای شروع از ابتدای ویکی
- نکته
ربات برای جلوگیری از خرابکاری فقط بر روی مقالاتی کار میکند که عنوانشان با ردهٔ اصلی وجه اشتراک داشته باشد ولی برای زیر ردهها این محدودیت وجود ندارد.
کد
[ویرایش]<syntaxhighlight lang="python">
- !/usr/bin/python
- -*- coding: utf-8 -*-
- Reza(User:reza1615), 2014
- Distributed under the terms of the CC-BY-SA 3.0 .
- -*- coding: utf-8 -*-
import catlib,query,config,sys import pagegenerators,re import wikipedia wikipedia.config.put_throttle = 0 wikipedia.put_throttle.setDelay()
- ------------------------------------------
faSite=wikipedia.getSite('fa') local_category=u'رده' black_list=[u'بر',u'از',u'در',u'با',u'و',u'،'] msg=u'ربات:افزودن پیشفرض برای '
- ------------------------------------------
def run(catname):
catname=catname.replace(u'_',u' ') wikipedia.output(u'\03{lightpurple}-----------Work on '+catname+u' ----------\03{default}') cat_list=[] article_list=[] #------------------------for articles--------------------- oldCat = catlib.Category(faSite, catname) cat_text=oldCat.get().replace(u'{{ ',u'الگو:').replace(u'',u'}}')
if u'
این رده در صفحههای بهکاررفته دیده نخواهد شد؛ مگر آن که ترجیحات کاربری متناسب برای آن (نمایش صفحه ← ردههای پنهان نمایش داده شود) فعال شدهباشد. |
' in cat_text or u'
مدیران؛ لطفاً این رده را در صورت خالی بودن پاک نکنید! این رده ممکن است گاه و بیگاه یا بیشتر وقتها خالی باشد یا احتمال پر شدن آن در آینده بالا باشد. |
این الگو تنها باید در فضا(ها)ی نام category تراگنجانیده شود. |
' in cat_text or u'
این رده در صفحههای بهکاررفته دیده نخواهد شد؛ مگر آن که ترجیحات کاربری متناسب برای آن (نمایش صفحه ← ردههای پنهان نمایش داده شود) فعال شدهباشد. |
' in cat_text or u'الگو:Hidden cat' in cat_text or u'الگو:Hiddencategory' in cat_text or u'
این رده در صفحههای بهکاررفته دیده نخواهد شد؛ مگر آن که ترجیحات کاربری متناسب برای آن (نمایش صفحه ← ردههای پنهان نمایش داده شود) فعال شدهباشد. |
' in cat_text:
return gen = pagegenerators.CategorizedPageGenerator(oldCat,recurse=False) preloadingGen = pagegenerators.PreloadingGenerator(gen) counter=0 for article in preloadingGen: article_list.append(article.title()) counter+=1 if counter>420: wikipedia.output(u'\03{lightred}Bot do not work on cates more than 420 members\03{default}') article_list=[] break article_dict=check_name (article_list) wikipedia.output(u'----add to article----') set_cat(article_dict,catname)
#------------------------for subcat--------------------- gen = pagegenerators.SubCategoriesPageGenerator(oldCat,recurse=False) preloadingGen = pagegenerators.PreloadingGenerator(gen) for subcategory in preloadingGen: cat_list.append(subcategory.title()) counter+=1 if counter>420: wikipedia.output(u'\03{lightred}Bot do not work on cates more than 400 members\03{default}') cat_list=[] break cat_dict=check_name (cat_list) wikipedia.output(u'----add to subcat----') set_cat(cat_dict,catname)
def set_cat(dict,catname):
for title in dict: if u'سید ' in title: wikipedia.output(u'\03{lightred}Bot do not work on Peoples article (seied)\03{default}') continue first_part_cat=catname.split(u' ')[0].replace(u'رده:',u).strip() if not local_category+u':' in title: if not first_part_cat in title: wikipedia.output(u'\03{lightred}page does not have main categoies words!'+first_part_cat+u'not in '+title+u'\03{default}') continue wikipedia.output(u'----'+title) add=u fapage = wikipedia.Page( faSite,title) text_old=fapage.get() text_old = re.sub(u'الگو:(?:DEFAULTSORT)', u'{{ترتیبپیشفرض:', text_old) text_old=re.sub(ur'الگو:(ترتیبپیشفرض\n?', ur, text_old)
text_old=text_old.replace(u'[[ ',u'').replace(u' ',u']]').replace(local_category+u' :',local_category+u':').replace(u'category:',local_category+u':').replace(u'Category:',local_category+u':') text_old=text_old.replace(u'category :',local_category+u':').replace(u'Category :',local_category+u':') text=text_old if u'{{ترتیبپیشفرض:' in text: wikipedia.output(u'\03{lightred}Bot do not work on pages with so it is passed!\03{default}') continue if u'[[رده:زادگان' in text or u'[[رده:درگذشتگان' in text or u'[[رده:اهالی' in text or u'[[رده:افراد' in text or u'سید ' in title: wikipedia.output(u'\03{lightred}Bot do not work on Peoples article (category1)\03{default}') continue
cats= re.findall(ur'(\[\['+local_category+u'\:.*?\]\])',text, re.S) object_type=True person_cat_words=[u'نخستوزیران',u'مسئولان روابط عمومی',u'درگذشتگان',u'زادگان',u' اهل ',u'اهالی',u'نمایندگان',u'بازیگران',u'بازیکنان',u'سیاستمدار'] for i in person_cat_words: if i+u' ' in u'-'.join(cats): object_type=False break if not object_type: wikipedia.output(u'\03{lightred}Bot do not work on Peoples article (category2)\03{default}') continue
stub_temps=[u"کشتی",u"شیمی",u"زیستشناسی",u"سیارک",u"آهنگساز",u"اتومبیلران_فرمول_۱",u"اتوموبیلران_فرمول_۱",u"افراد-انگلستان",u"افراد",u"اقتصاددان", u"اندیشمند",u"بازیکن_فوتبال",u"بازیکنان_فوتبال",u"بازیگر",u"بازیگر-پورنو",u"بازیگر_سینما",u"تاریخدان",u"خواننده", u"دانشمند",u"دانشمندان",u"داور",u"ریاضیدان",u"زبانشناس",u"زندگینامه",u"زندگینامه_اهالی_ایران",u"زندگینامه_اهالی_سوریه", u"زندگینامه_ایرانی",u"زندگینامه_مسلمان",u"سیاستمدار",u"سیاستمدار_ایرانی",u"سیاستمدار_ژاپنی",u"سیاستمداران",u"شخصیت_ورزشی", u"فضانورد",u"فضانوردان",u"فوتبالیست",u"فوتبالیست_انگلستان",u"فیزیکدان",u"فیلسوف",u"مخترع",u"معمار",u"مهندس",u"مهندسان", u"موسیقی_دان",u"موسیقیدان",u"نقاش",u"نماینده_مجلس_شورای_اسلامی",u"نوازنده",u"نویسنده",u"نویسندگان",u"پادشاه",u"ژیمناستیک",u"کارگردان",u"کشتیگیر"]
object_type=True for i in stub_temps: if u'الگو:'+ i+u'-خرد' in text or u'الگو:'+ i.replace(u' ',u' ')+u'-خرد' in text : object_type=False break if not object_type: wikipedia.output(u'\03{lightred}Bot do not work on Peoples article (khord)\03{default}') continue
for category in cats: if u'|' in category or catname!=category.replace(u'',u'').replace(u'',u): continue first_category=category.replace(u']]',u) add=title.replace(dict[title],u).strip() for a in black_list: if a+u' ' in add: if add[:len(a)+1]==a+u' ': add=add[len(a)+1:] break text=text.replace(category,first_category+u'|'+add+u']]',1) if text!=text_old: wikipedia.output(u'\03{lightgreen}'+first_category+u']] > '+first_category+u'|'+add+u']]\03{default}') fapage.put(text,msg+first_category+u']] > '+first_category+u'|'+add+u']]')
def check_name (list):
result_dict={} repeated_dict=check_repeating(list,u) for i in repeated_dict: result_dict[i]=repeated_dict[i] while repeated_dict: repeated_dict=get_dict(repeated_dict) for i in repeated_dict: result_dict[i]=repeated_dict[i] result_dict=clean_dict(result_dict) return result_dict
def clean_dict(result_dict):
new_dict={} for list in result_dict: if len(result_dict[list])<3: continue for i in result_dict[list]: if i==list: continue if not i in new_dict: new_dict[i]=list elif len(new_dict[i])< len(list): new_dict[i]=list else: continue return new_dict
def get_dict(result_dict):
repeated_dict_old={} for list in result_dict: rest=[] for i in result_dict[list]: if list+u' ' in i: rest.append(i.replace(list+u' ',u)) repeated_dict_old=check_repeating(rest,list+u' ') return repeated_dict_old
def check_repeating(list,prefix):
names={} repeated_name={} for page_title in list: first_part=page_title.split(u' ')[0] if not first_part.strip(): continue if not first_part in names: names[first_part]=(prefix+page_title).strip() else: if (prefix+first_part).strip() in repeated_name: repeated_name[(prefix+first_part).strip()]=repeated_name[(prefix+first_part).strip()]+u'|'+(prefix+page_title).strip() else: repeated_name[(prefix+first_part).strip()]=names[first_part]+u'|'+(prefix+page_title).strip() for i in repeated_name: repeated_name[i]=repeated_name[i].split(u'|') return repeated_name
def main():
CatTitles,gen=u,u genFactory = pagegenerators.GeneratorFactory() for arg in wikipedia.handleArgs(): if arg.startswith( '-cat' ): if len(arg) == 4: CatTitles=wikipedia.input( u'Which page do you want to chage?' ) else: CatTitles= arg[5:] CatTitles=local_category+u':'+CatTitles.replace(local_category+u':',u).replace(u'Category:',u).replace(u'category:',u) break else: generator = genFactory.handleArg(arg) if generator: gen = generator if CatTitles: run(CatTitles) gen=u if not gen: wikipedia.stopme() sys.exit() preloadingGen = pagegenerators.PreloadingGenerator(gen,pageNumber = 60) for catname in preloadingGen: run(catname.title())
if __name__ == '__main__':
main()