ویکی‌پدیا:درخواست‌های ربات/بارگذاری خودکار پرونده‌ها

از ویکی‌پدیا، دانشنامهٔ آزاد

کد بارگذاری پرونده‌های ناموجود و حذف پیوند پرونده‌هایی که حذف شده‌اند.

نسخهٔ بتای کد[ویرایش]

این کد نیازمند بررسی بیشتر است بدون هماهنگی با توسعه‌دهنده نرانید!

<syntaxhighlight lang="python">

  1. !/usr/bin/python

from __future__ import unicode_literals

  1. -*- coding: utf-8 -*-
  2. Reza (User:reza1615) 2014
  3. Distributed under the terms of the CC-BY-SA 3.0 .
  4. python pwb.py imagetransfer -family:wikipedia -lang:en 'File:Question_Mark_Film_Poster.jpg' -tolang:fa -tofamily:wikipedia -keepname
  5. python pwb.py zzimageuploader

import pywikibot,imagetransfer,re from pywikibot import pagegenerators from pywikibot import config from pywikibot.compat import query pywikibot.config.put_throttle = 0 pywikibot.config.maxthrottle = 0 faSite=pywikibot.Site('fa',fam='wikipedia') enSite=pywikibot.Site('en',fam='wikipedia') version=u' (۳.۱)'

def clean_image(imagename,page_title):

   page_title=page_title.replace(u'_',u' ')
   imagepage = pywikibot.Page(faSite, u'File:'+imagename)
   image_text=imagepage.get()
   image_text=image_text.replace(u'\r',u)
   for i in range(0,20):
       image_text=image_text.replace(u'= ',u'=').replace(u' =',u'=').replace(u' |',u'|').replace(u'| ',u'|').replace(u' \n',u'\n').replace(u'{{ ',u'الگو:').replace(u'',u'}}')
   image_text=image_text.replace(u'! date/time||username||resolution||size||edit summary',u'! تاریخ||کاربر||تفکیک‌پذیری||حجم||خلاصهٔ ویرایش')
   image_text=image_text.replace(u'==Summary==',u'== توضیحات ==').replace(u'==Licensing==',u'== اجازه‌نامه ==')
   header=image_text.split(u'==')[0]
   image_text=image_text.replace(header,u)
   image_text=image_text.replace(u'|Description=',u'|Description='+u'کپی از ویکی‌پدیای انگلیسی برای استفاده در '+page_title+u'، توضیحات اصلی : ',1)
   image_text=image_text.replace(u'|Source=',u'|Source='+u'کپی‌شده از ویکی‌پدیای انگلیسی، منبع ذکر شده در ویکی‌پدیای انگلیسی : ',1)
   image_text=image_text.replace(u'=Entire\n',u'=تمام تصویر\n')
   image_text=image_text.replace(u'=Yes\n',u'=بله\n').replace(u'=yes\n',u'=بله\n')
   list_templates=templatequery(u'File:'+imagename)
   if u'Template:Non-free media' in list_templates:#--------------------
       if u'|Article=' in image_text:
           article=image_text.split(u'|Article=')[1].split(u'\n')[0]
           image_text=image_text.replace(u'|Article='+article,u'|Article='+page_title,1)
       if u'|Name=' in image_text:
           article=image_text.split(u'|Name=')[1].split(u'\n')[0]
           image_text=image_text.replace(u'|Name='+article,u'|Name='+page_title,1)
       if u'|Other information=' in image_text:
           otherinfo=image_text.split(u'|Other information=')[1].split(u'}}')[0]
           image_text=image_text.replace(u'|Other information='+otherinfo,u'|Other information=ویکی‌پدیا:سیاست استفاده از تصاویر را مطالعه کنید',1)
   if u'Non-free biog-pic' in image_text:

biopic2=image_text.split(u'

')[0]

totalpiopic=u'

'

image_text=image_text.replace(totalpiopic,u'

',1)

   imagepage.put(image_text,u'ربات:ترجمه و اصلاح متن پرونده'+version)

def upload_image(imagename,page_title):

       imagename=endig(imagename)
       try:
           imagepage = pywikibot.Page(enSite, u'File:'+imagename)
           imagepage = iter([imagepage])
           bot=imagetransfer.ImageTransferBot(imagepage, interwiki=False, targetSite=faSite,keep_name=True)
           bot.run()
       except:
          return
       clean_image(imagename,page_title)

def check_image(imagename):

   try:
       en_imagepage = pywikibot.Page(enSite, u'File:'+imagename)
       en_image_text=en_imagepage.get()
   except:
       pywikibot.output(u"\03{lightred}The image not existed in en.wikipedia. so it is passed!\03{default}")
       return False
   list_templates=templatequery(u'File:'+imagename)
   if list_templates:
       balck_list=[u'Template:Db',u'Template:Duplicate',u'Template:Db-meta',u'Template:Deletable image',u'Template:Deletable file']
       for i in balck_list:
           if  i in list_templates:
               pywikibot.output(u"\03{lightred}The image condidated for delete. so it is passed!\03{default}")
               return False
       if u'Template:Non-free media' in list_templates:
           #try:
           fa_imagepage = pywikibot.Page(faSite, u'File:'+imagename)
           link_list=fa_imagepage.getReferences()
           counter=0
           for repage in link_list:
               counter+=1
               if counter>1:
                   pywikibot.output(u"\03{lightred}the image was Non-Free and in fa.wikipedia it used on many pages. so it is passed!\03{default}")
                   return False
               if repage.namespace()!=0:
                   pywikibot.output(u"\03{lightred}the image was Non-Free and in fa.wikipedia it used on other namespaces (not Article)\03{default}")
                   return False
           #except:
           #   return False
       pywikibot.output(u"\03{lightgreen}The image is Ok! continue...\03{default}")
       return True
   else:
       pywikibot.output(u"\03{lightred}The image on en.wikipedia does not have standard template. so it is passed!\03{default}")
       return False

def endig(a):

   for i in range(0,10):
      b=a.replace(u'۰۱۲۳۴۵۶۷۸۹'[i], u'0123456789'[i])
      a=b
   return b

def checksite(image):

   queryresult = pywikibot.data.api.Request(site=faSite, action="query", prop="imageinfo",titles='File:'+image.replace(u" ",u"_"))
   queryresult=queryresult.submit()
   try:
       items=queryresult['query']['pages']
       for item in items:
           if queryresult['query']['pages'][item]['imagerepository']=='shared':
               return True
           else:
               return True
   except:
       return False

def templatequery(enlink):

   temps=[]
   enlink=enlink.replace(u' ',u'_')
   categoryname = pywikibot.data.api.Request(site=enSite, action="query", prop="templates",titles=enlink,redirects=1,tllimit=500)
   categoryname=categoryname.submit()
   try:
       for item in categoryname[u'query'][u'pages']:
           templateha=categoryname[u'query'][u'pages'][item][u'templates']
           break
       for temp in templateha:
           temps.append(temp[u'title'].replace(u'_',u' '))         
       return temps
   except: 
       return []

def upload_fatext(text,fa_page,image_case):

   try:    
       pywikibot.output(u"ربات:حذف تصویر ناموجود"+u" پرونده:"+ image_case+u"")

text=text.replace(u'\r',u).replace(u'دربارهٔ این پرونده [[:مدیا:|Play]] ',u).replace(u'

',u).replace(u'

',u)

       text=gallerycheck(text)
       text=text.replace(u'تصویر:',u'پرونده:').replace(u'تصوير:',u'پرونده:').replace(u'پرونده:',u'پرونده:')
       text=text.replace(u'پرونده:',u'پرونده:').replace(u'پرونده:',u'پرونده:').replace(u'File:',u'پرونده:').replace(u'file:',u'پرونده:')
       text=text.replace(u'تصویر:|\n',u)
       text=text.replace(u'پرونده:|\n',u)
       text=text.replace(u'تصوير:|\n',u)
       fa_page.put(text,u"ربات:حذف تصویر ناموجود"+u" پرونده:"+ image_case+u""+version)
   except Exception as inst:
       pywikibot.output(inst)
       pass  

def remove_image(fa_page,text,imagename):

if text.find(u'

')==-1:

           return    
       pywikibot.output(u"----------------------------------")
       pywikibot.output( fa_page.title())
       if re.search(u"[۰۹۸۷۶۵۴۳۲۱]",imagename):
           if checksite(endig(imagename)):
               text_old=text    
               text=text.replace(imagename.replace(u"_",u" "),endig(imagename).replace(u"_",u" "))
               text=text.replace(imagename,endig(imagename))
               if text_old!=text:
                   pywikibot.output(u"ربات: تصحیح پیوند به پرونده:"+imagename+"")            
                   fa_page.put(text,u"ربات: تصحیح پیوند به پرونده:"+imagename+""+version)
               return
       list_of_files=[imagename.replace(u"_",u" "),imagename[0].lower()+imagename[1:],imagename[0].lower()+imagename[1:].replace(u"_",u" "),imagename,imagename.replace(u"_",u"%20"),imagename[0].lower()+imagename[1:].replace(u"_",u"%20"),imagename.replace(u"_",u" ")]
       done=True
       for image_case in list_of_files:
           original_text=text
           if text==original_text:
               escaped = re.escape(image_case)    
               escaped = re.sub('\\\\[_ ]', '[_ ]',escaped)
               regexfa=ur'\[\[ *(?:پرونده|تصویر|[Ff]ile|[Ii]mage)\s*:\s*'+ escaped+ ur' *(?:\|[^\n]+|) *\]\]'
               try:
                   REfa=re.compile(regexfa)
                   items=REfa.findall(text)
                   text=text.replace(items[0]+'\r\n',u).replace(items[0]+'\n\r',u).replace(items[0]+'\n',u).replace(items[0]+'\r',u).replace(items[0],u)    
                   if text!=original_text:
                       upload_fatext(text,fa_page,image_case)
                       done=False
                       break
               except:
                   pass
           if text==original_text:
               file_regex=ur"(\[\[(?:پرونده|تصویر|[Ff]ile|[Ii]mage) *?: *?(?:"+image_case+ur")(?:.*?)\]\])"
               try:
                   RE=re.compile(file_regex)
                   for file_re in RE.findall(text):
                       pywikibot.output(file_re)
                       if file_re.count(ur"[[")>1:
                           text=more(text,file_regex)
                       else:
                           text=text.replace(file_re+'\r\n',u,1).replace(file_re+'\n\r',u,1).replace(file_re+'\n',u,1).replace(file_re+'\r',u,1).replace(file_re,u,1)
                   if text!=original_text:
                       upload_fatext(text,fa_page,image_case)    
                       done=False
                       break
               except:
                   pywikibot.output(u'rigex was wrong')    
       if text==original_text and u"<gallery" in text:
               for gall in text.split(u"<gallery")[1:]:
                   gall=gall.split("</gallery>")[0]
                   for image_case in list_of_files:
                       RE=re.compile(ur"((?:پرونده|تصویر|[Ff]ile|[Ii]mage) *?: *?(?:"+image_case+ur")(?:.*?))(?:\n|$)")
                       for file_re in RE.findall(gall):
                           text=text.replace(file_re+'\r\n',u,1).replace(file_re+'\n\r',u,1).replace(file_re+'\n',u,1).replace(file_re+'\r',u,1).replace(file_re,u,1)
       if text==original_text:
               for image_case in list_of_files:
                   text=text.replace(image_case,u,1)
       if text!=original_text and done:    
           upload_fatext(text,fa_page,image_case)

def Go_to_remove_image(imagename,page_title):

       #try:
       fa_imagepage = pywikibot.Page(faSite, u'File:'+imagename)
       link_list=fa_imagepage.getReferences()
       #except:
       #   return False
       for fa_page in link_list:
           try:
               fa_text=fa_page.get()
           except:
               continue
           fa_text=fa_text.replace(u'\r',u)
           fa_text=remove_image(fa_page,text,imagename)

def main(page_name=False):

       if not page_name:
           categoryname = pywikibot.data.api.Request(site=faSite, action="query", meta="allmessages",ammessages="broken-file-category",amenableparser=)
           categoryname=categoryname.submit()
           categoryname = categoryname['query']['allmessages'][0]['*']
           pywikibot.output(u"Getting list of pages from category '%s' ..." % categoryname)

           pageslist = pywikibot.data.api.Request(site=faSite, action="query", list="categorymembers",cmlimit="max",cmtitle=u'Category:%s' % categoryname)
           pageslist=pageslist.submit()
           pageslist=pageslist['query']['categorymembers']
       else:
           pageslist=[page_name]
       for page_title in pageslist:
           if not page_name:
               page_title=page_title['title']
           else:
               page_title=page_title.replace(u' ',u'_')
           pywikibot.output("\03{lightpurple}-------------Working on page '%s' ..." % page_title+u'---------------\03{default}')
           imagelist = pywikibot.data.api.Request(site=faSite, action="query", prop="images",imlimit="max",titles=page_title)
           imagelist=imagelist.submit()
           for image in imagelist['query']['pages'].values()[0]['images']:
               imagesinfo = pywikibot.data.api.Request(site=faSite, action="query", prop="imageinfo",titles=image['title'])
               imagesinfo=imagesinfo.submit()
               for imageinfo in imagesinfo['query']['pages'].values():
                   imagename = re.match(r'(?:' + '|'.join(faSite.namespace(6, all = True))\
                   + ')\:(.*)', image['title']).group(1)
                   #try:
                   if (imageinfo['missing']=="" and imageinfo['imagerepository']==""):
                           pywikibot.output("\03{lightpurple}++++Working on image '%s' ..." % imagename+u'++++\03{default}')
                           check_result=check_image(imagename)
                           if check_result:
                               upload_image(imagename,page_title)
                           else:
                               Go_to_remove_image(imagename,page_title)
                   #except:
                   #    pywikibot.output("Skiping image '%s'..." % imagename)

if __name__ == "__main__":

   pywikibot.output(u'\03{lightpurple}      *******************************\03{default}')  
   pywikibot.output(u'\03{lightpurple}      *     Code version is '+version+u'    *\03{default}')
   pywikibot.output(u'\03{lightpurple}      *******************************\03{default}')
   page_name=False
   main(page_name)