ویکی‌پدیا:درخواست‌های ربات/جمع‌بندی انتخاب نگاره برگزیده

از ویکی‌پدیا، دانشنامهٔ آزاد
ربات جمع‌بندی کننده نظرخواهی‌های انتخاب نگاره برگزیده ویکی‌پدیا فارسی
این کاربر یک ربات است
وظیفه(ها)ربات وپ:انب را چک می کند و مواردی را که واجد شرایط جمع‌بندی هستند را مشخص می‌نماید

برگزیدگی نگاره‌ رادر بحث کاربر بارگذار اطلاع‌رسانی می‌کند.
برچسب برگزیدگی را به پرونده‌ها در ویکی‌فا یا ویکی‌انبار می‌افزاید.

موارد اطلاع رسانی‌شده را بایگانی می‌کند.
موافق محرومیت؟خیر
موافق خاموش‌شدن اضطراری؟بله
اجازه‌نامهCC-BY-SA 3.0
تست شده؟بله

این ربات توسط امیر برای جمع‌بندی وپ:انب طراحی شده‌است. این کد برای جمع‌بندی تصمیم نمی‌گیرد فقط موارد جمع‌بندی شده را به کاربرها اعلام می‌کند و در پرونده مورد نظر برچسب برگزیدگی می‌افزاید.

نکات مهم
  • ربات نیازمند داشتن پرچم در ویکی‌فا و ویکی‌انبار هست.
  • در user-config.py باید کد زیر را بیافزائید تا در ویکی‌انبار هم ویرایش کند.
usernames['commons']['commons'] = 'Botname'
    • که BotName نام ربات شما هست
  • ربات به صورت کاملا خودکار کار می‌کند و نیاز به هیچ آرگومانی نیست.
  • نتایج جمع‌بندی تا ۲ هفته قبل را کنترل می‌کند.
  • برای اجرا باید حداقل ۳-۴ روز یک‌بار آن را اجرا کرد تا جمع‌بندی‌ای از قلم نیافتد.
  • برای اجرای ربات باید فایل خالی‌ متنی‌ای با نامcache.txt در کنار فایل ربات قرار گیرد تا ربات مواردی را که جمع‌بندی کرده‌است را در آن بنویسد و برای بازخوانی در روزهای بعد آن موارد را جمع‌بندی مجدد نکند.
  • اگر کاربر ویندوز هستید در خط ۲۶ و۴۰و ۴۳ باید آدرس پوشه‌ای که فایل cache.txt در آن قرار دارد را تغییر دهید (به خصوص برای تول سرور، اگر کاربر لینوکس هستید نیاز نیست، در این حالت cache.txt در مسیر /logs از مسیر خانگی‌تان ذخیره می‌شود.
روند کار
  1. ربات وپ:انب را چک می کند و مواردی را که واجد شرایط جمع‌بندی هستند را مشخص می‌نماید (جمع‌بندی باید توسط کاربرها انجام شود و فقط ربات مواردی را که کاربر تائید کرده است که جمع‌بندی شده‌اند را جمع‌بندی می‌کند)
  2. برگزیدگی نگاره‌ رادر بحث کاربر بارگذار اطلاع‌رسانی می‌کند.
  3. برچسب برگزیدگی را به پرونده‌ها در ویکی‌فا یا ویکی‌انبار می‌افزاید.
  4. موارد اطلاع رسانی‌شده را بایگانی می‌کند.

<syntaxhighlight lang="python" line start="1">

  1. -*- coding: utf-8 -*-
  2. !/usr/bin/python
  3. Amir, 2011 (developed)
  4. 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"[ویرایش]

پرونده:"+imagename+u"
نگاره‌ای که نامزد کرده‌بودید برگزیده شد.
نگاره "+titleANB+u" ، با اجماع موافق کاربران برگزیده شد، اگر تصویر دیگری در نظر دارید لطفاً آن را برای برگزیدگی نامزد کنید. امیدواریم در آینده نیز با مشارکت خود کیفیت نگاره‌های برگزیده را بهبود دهید، با سپاس از مشارکت شما. Xqbot (بحث) ‏۲۰ آوریل ۲۰۲۰، ساعت ۱۱:۵۷ (UTC)[پاسخ]

"

               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