ویکیپدیا:درخواستهای ربات/جمعبندی انتخاب نگاره برگزیده
این کاربر یک ربات است | |
---|---|
وظیفه(ها) | ربات وپ:انب را چک می کند و مواردی را که واجد شرایط جمعبندی هستند را مشخص مینماید برگزیدگی نگاره رادر بحث کاربر بارگذار اطلاعرسانی میکند. |
موافق محرومیت؟ | خیر |
موافق خاموششدن اضطراری؟ | بله |
اجازهنامه | CC-BY-SA 3.0 |
تست شده؟ | بله |
این ربات توسط امیر برای جمعبندی وپ:انب طراحی شدهاست. این کد برای جمعبندی تصمیم نمیگیرد فقط موارد جمعبندی شده را به کاربرها اعلام میکند و در پرونده مورد نظر برچسب برگزیدگی میافزاید.
- نکات مهم
- ربات نیازمند داشتن پرچم در ویکیفا و ویکیانبار هست.
- در user-config.py باید کد زیر را بیافزائید تا در ویکیانبار هم ویرایش کند.
usernames['commons']['commons'] = 'Botname'
- که BotName نام ربات شما هست
- ربات به صورت کاملا خودکار کار میکند و نیاز به هیچ آرگومانی نیست.
- نتایج جمعبندی تا ۲ هفته قبل را کنترل میکند.
- برای اجرا باید حداقل ۳-۴ روز یکبار آن را اجرا کرد تا جمعبندیای از قلم نیافتد.
- برای اجرای ربات باید فایل خالی متنیای با نامcache.txt در کنار فایل ربات قرار گیرد تا ربات مواردی را که جمعبندی کردهاست را در آن بنویسد و برای بازخوانی در روزهای بعد آن موارد را جمعبندی مجدد نکند.
- اگر کاربر ویندوز هستید در خط ۲۶ و۴۰و ۴۳ باید آدرس پوشهای که فایل cache.txt در آن قرار دارد را تغییر دهید (به خصوص برای تول سرور، اگر کاربر لینوکس هستید نیاز نیست، در این حالت cache.txt در مسیر /logs از مسیر خانگیتان ذخیره میشود.
- روند کار
- ربات وپ:انب را چک می کند و مواردی را که واجد شرایط جمعبندی هستند را مشخص مینماید (جمعبندی باید توسط کاربرها انجام شود و فقط ربات مواردی را که کاربر تائید کرده است که جمعبندی شدهاند را جمعبندی میکند)
- برگزیدگی نگاره رادر بحث کاربر بارگذار اطلاعرسانی میکند.
- برچسب برگزیدگی را به پروندهها در ویکیفا یا ویکیانبار میافزاید.
- موارد اطلاع رسانیشده را بایگانی میکند.
کد
[ویرایش]<syntaxhighlight lang="python" line start="1">
- -*- coding: utf-8 -*-
- !/usr/bin/python
- Amir, 2011 (developed)
- reza1615 (solved some bugs)
import re, codecs import wikipedia, pagegenerators import time
site=wikipedia.getSite() gen=pagegenerators.ReferringPageGenerator(wikipedia.Page(site,u"الگو:انب نتیجه"), onlyTemplateInclusion = True) pregen=pagegenerators.PreloadingGenerator(gen) comsite=wikipedia.getSite(code="commons",fam="commons") def ANB(imagepage):
pagei=wikipedia.ImagePage(site,imagepage.title()) pregen=pagegenerators.PreloadingGenerator(pagei.usingPages()) for page in pregen: if not u"ویکیپدیا:گزیدن نگاره برگزیده/" in page.title(): continue if u"{{ویکیپدیا:گزیدن نگاره برگزیده/" in page.get(): continue return page.title()
def takefirst(text,a):
if not u"|fawiki" in text: print u"Something is wrong" R0=re.compile(u"(\{\{(?:[Mm]sg:|[Tt]emplate:|)[Aa]ssessments(?:.+?)\}\})") R1=re.compile(u"\{\{(?:[Mm]sg:|[Tt]emplate:|)[Aa]ssessments(.+?)\}\}") R3=re.compile(u"(\|\s*"+a+u"\s*=\s*(?:\d+?))(?:\||\}\})") asss=R0.findall(text)[0] asss2=R1.findall(text)[0] if len(R3.findall(asss2))==0: return text asss4=R3.findall(asss2)[0] asss2=asss2.replace(asss4,u"") asss2=asss2.replace(u"|fawiki=1",asss4+u"|fawiki=1") text=text.replace(asss,"الگو:Assessments"+asss2+u"") return text
def com(fapage):
try: cf=codecs.open(u"/home/amir/cache.txt","r","utf-8") cache=cf.read() cf.close() except: cache=u' ' pass title=fapage.title().replace(u"پرونده:","File:") wikipedia.output("Processing "+title) if title in cache: wikipedia.output( "(Cached) It's OK") return None page=wikipedia.Page(comsite,title) try: text=page.get() except: return None if re.search(u"fawiki *= *1",text): cf=codecs.open(u"/home/amir/cache.txt","a","utf-8") cf.write(title+u",") cf.close() cf=codecs.open(u"/home/amir/cache.txt","r","utf-8") cache=cf.read() cf.close() wikipedia.output("(Already Done) It's OK") return None try: pageANB=ANB(fapage) pageANB=pageANB.replace(u"ویکیپدیا:گزیدن نگاره برگزیده/",u"") except: return None if pageANB==page.title().replace(u"File:",u""): pageANB=u"" else: pageANB=u"\n|fanom="+pageANB if re.search(u"\{\{([Tt]emplate:|[Mm]sg:|)([Aa]ssessments|[Ff]eatured picture mul)\s*(\}\}|\||\n)",text): if re.search(u"\{\{(?:[Tt]emplate:|[Mm]sg:|)([Aa]ssessments [Hh]eader)\s*(?:\}\}|\||\n)",text): text=text.replace(re.compile(u"\{\{(?:[Tt]emplate:|[Mm]sg:|)([Aa]ssessments [Hh]eader)(?:\s*?)(?:\}\}|\||\n)").findall(text)[0],u"ĢỔɵ̯‡♣ΞЧٲצসයઉฟ໑") RE=re.compile(u"(\{\{(?:[Tt]emplate:|[Mm]sg:|)[Aa]ssessments|[Ff]eatured picture mul)(?:.*?)(?:\n|\}\})") text=text.replace(RE.findall(text)[0],RE.findall(text)[0]+u"|fawiki=1"+pageANB) text=takefirst(text,u"featured") text=takefirst(text,u"quality") text=takefirst(text,u"wallpaper") text=takefirst(text,u"POTY") text=takefirst(text,u"POTYyear") for i in [u"ar",u"az",u"ca",u"cs",u"de",u"en",u"es"]: text=takefirst(text,i+u"wiki") text=text.replace(u"ĢỔɵ̯‡♣ΞЧٲצসයઉฟ໑",u"Assessment") page.put(text,u"Bot: Adding fa for Assessments template") else: if re.search(u"\|\s*[Oo]ther[ _]versions\s*=",text): RE=re.compile(u"\| *(other_versions *=(?:.*?))\}\}") text=text.replace(u"\n",u"ĢỔɵ̯‡♣ΞЧٲצসයઉฟ໑") if u"{{" in RE.findall(text)[0]: aa=re.compile(u"\| *(other_versions *=(?:.*?)\}\}(?:.*?))\}\}").findall(text)[0].split(u"}}")[1] else: aa=RE.findall(text)[0] text=text.replace(aa,aa+u"}}\n{{Assessments|fawiki=1"+pageANB+u"\n") text=text.replace(u"ĢỔɵ̯‡♣ΞЧٲצসයઉฟ໑",u"\n") try: page.put(text,u"Bot: Adding fa for Assessments template") except: pass else: categoriesInside =wikipedia.getCategoryLinks(text, comsite) newtext = wikipedia.removeCategoryLinks(text, comsite) newtext=newtext+u"\nالگو:Assessments" newtext = wikipedia.replaceCategoryLinks(newtext, categoriesInside, comsite, True) page.put(newtext,u"Bot: Adding fa for Assessments template")
def change(a):
for i in range(0,10): b=a.replace(u'0123456789'[i], u'۰۱۲۳۴۵۶۷۸۹'[i]) a=b return b
def changeen(a):
for i in range(0,10): b=a.replace(u'۰۱۲۳۴۵۶۷۸۹'[i], u'0123456789'[i]) a=b return b
def baygani(name,timeu):
timeu=timeu.replace(u" ", u" ") page=wikipedia.Page(site, name) history=page.getVersionHistory()[-1][1] #yen=history.split(u"-")[0] #m=history.split(u"-")[1] y=timeu.split(u" ")[4] y=change(y) m=timeu.split(u" ")[1] #wikipedia.output( m) if m=='Jan' or m=='01': mf=u"ژانویه" if m=='Feb' or m=='02': mf=u"فوریه" if m=='Mar' or m=='03': mf=u"مارس" if m=='Apr' or m=='04': mf=u'آوریل' if m=='May' or m=='05': mf=u'مه' if m=='Jun' or m=='06': mf=u'ژوئن' if m=='Jul' or m=='07': mf=u'ژوئیه' if m=='Aug' or m=='08': mf=u'اوت' if m=='Sep' or m=='09': mf=u'سپتامبر' if m=='Oct' or m=='10': mf=u'اکتبر' if m=='Nov' or m=='11': mf=u'نوامبر' if m=='Dec' or m=='12': mf=u'دسامبر' #wikipedia.output( name) pageb=u"ویکیپدیا:گزیدن نگاره برگزیده/"+mf+u"-"+y wikipedia.output( pageb) try: pageb=wikipedia.Page(site,pageb) textb=pageb.get() except: y=change(str(int(y)+1)) pageb=u"ویکیپدیا:گزیدن نگاره برگزیده/"+mf+u"-"+y pageb=wikipedia.Page(site,pageb) textb=pageb.get() if not u"الگو:"+page.title()+u"" in textb: pageb.put(u"الگو:"+page.title()+"\n"+textb,u"ربات: افزودن به بایگانی (کد)") return page.getVersionHistory()[-1][2]
for fapage in [wikipedia.Page(site,u"ویکیپدیا:گزیدن نگاره برگزیده/Derak Mount Shiraz1 Hadi Karimi.jpg")]:
text=fapage.get() if re.search(u"\|\s*الگو:\s*برگزیده شد\s*\s*\|",text): try : RRT=re.compile(u"\{\{نامزد انب/پایان رایگیری\|(.+?)\}\}") timeu=RRT.findall(text)[0] except: continue if time.time()-float(changeen(timeu))>604800: continue timeu=time.ctime(float(changeen(timeu))) RE=re.compile(u"\|\s*الگو:\s*برگزیده شد\s*\s*\|\s*(?:[Ff]ile:|[Ii]mage:|پرونده:|تصویر:|)(.+?) *\}\}") imagename=RE.findall(text)[0] subpagename=fapage.title().replace(u"ویکیپدیا:گزیدن نگاره برگزیده/",u"") RR=re.compile(u"\| *(.+?) *\]\] *===") titleANB=RR.findall(text)[0] user=u"بحث کاربر:"+baygani(fapage.title(),timeu) wikipedia.output( imagename) imagename=imagename.replace(u'.jpg.JPG',u'.jpg').replace(u'.JPG.jpg.',u'.jpg')
try: pagei=wikipedia.ImagePage(site,imagename) rrt=pagei.fileUrl() except: if imagename.find(u".jpg")!=-1: imagename=imagename.replace(u".jpg",u".JPG") if imagename.find(u".JPG")!=-1: imagename=imagename.replace(u".JPG",u".jpg")
try: pagei=wikipedia.ImagePage(site,imagename) rrt=pagei.fileUrl() except: pageerro=wikipedia.Page(site,u"ویکیپدیا:گزیدن نگاره برگزیده/خطای ربات") texterror=pageerro.get() texterror+='\n*'+fapage.title() pageerro.put(texterror,u"ربات: خطای ربات (کد)") wikipedia.output(u"there is something wrong i passed"+fapage.title()) continue pregen=pagegenerators.PreloadingGenerator(pagei.usingPages()) isAnnouced=False for page in pregen: if user in page.title(): isAnnouced=True if not isAnnouced: pageu=wikipedia.Page(site,user) try: textu=pageu.get() addtext=u"\n
گزیدن نگاره برگزیده: "+titleANB+u"
[ویرایش]"
if textu.find(imagename)==-1: pageu.put(textu+addtext,u"ربات: اطلاع به نامزدکننده (کد)") wikipedia.output(pageu) except: pass ipage=wikipedia.Page(site,u"File:"+imagename) try: itext=ipage.get() except:
ipage.put(u"
این یک نگاره برگزیده است، بدین معنی که اعضای جامعه آن را بهعنوان یکی از نگارههای خوب در ویکیپدیای فارسی شناختهاند. اگر شما نگارهای متفاوت با کیفیت مشابه دارید، مطمئن شوید که آن را با برچسب مجوز آزاد بارگذاری میکنید، به مقالهٔ مرتبط میافزایید و آن را نامزد میکنید. |
",u"ربات: افزودن الگوی نگاره برگزیده (کد)")
else: if not u"{{نگاره برگزیده" in itext:
ipage.put(itext+u"\n
این یک نگاره برگزیده است، بدین معنی که اعضای جامعه آن را بهعنوان یکی از نگارههای خوب در ویکیپدیای فارسی شناختهاند. اگر شما نگارهای متفاوت با کیفیت مشابه دارید، مطمئن شوید که آن را با برچسب مجوز آزاد بارگذاری میکنید، به مقالهٔ مرتبط میافزایید و آن را نامزد میکنید. |
",u"ربات: افزودن الگوی نگاره برگزیده (کد)")
garbage=com(wikipedia.Page(site,u"پرونده:"+imagename)) elif re.search(u"\|\s*الگو:\s*برگزیده نشد\s*\s*\|",text): RRT=re.compile(u"\{\{نامزد انب/پایان رایگیری\|(.+?)\}\}") try: timeu=RRT.findall(text)[0] except: RRT=re.compile(u"\{\{الگو:نامزد انب/پایان رایگیری\|(.+?)\}\}") try: timeu=RRT.findall(text)[0] except: continue if time.time()-float(changeen(timeu))>604800: continue timeu=time.ctime(float(changeen(timeu))) user=u"User talk"+baygani(fapage.title(),timeu) else: pass