ویکیپدیا:درخواستهای ربات/ربات پایپینگ ردهها
این ربات نام یک رده یا مجموعهای از ردهها را از کاربر می گیرد و زیر ردهها و مقالات آن را در صورتی که عبارت ابتدایشان تکراری باشد را براساس عبارتهای غیر تکراری مرتب میکند. نمونهٔ کار ربات این
- آرگومانها
- -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()