ویکیپدیا:درخواستهای ربات/بارگذاری خودکار پروندهها
کد بارگذاری پروندههای ناموجود و حذف پیوند پروندههایی که حذف شدهاند.
نسخهٔ بتای کد
[ویرایش]این کد نیازمند بررسی بیشتر است بدون هماهنگی با توسعهدهنده نرانید!
<syntaxhighlight lang="python">
- !/usr/bin/python
from __future__ import unicode_literals
- -*- coding: utf-8 -*-
- Reza (User:reza1615) 2014
- Distributed under the terms of the CC-BY-SA 3.0 .
- python pwb.py imagetransfer -family:wikipedia -lang:en 'File:Question_Mark_Film_Poster.jpg' -tolang:fa -tofamily:wikipedia -keepname
- 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'
این تصویر دارای حق تکثیر است و تحت سیاستهای تصویرهای آزاد نیست. با این وجود، استفاده از این پرونده در مقالهٔ «[[')[1].split(u']]» درصورت برقراری شرایط زیر مجاز است:
| |||
|
')[0]
totalpiopic=u'
این تصویر دارای حق تکثیر است و تحت سیاستهای تصویرهای آزاد نیست. با این وجود، استفاده از این پرونده در مقالهٔ «[['+image_text.split(u'
')[0]+u']]» درصورت برقراری شرایط زیر مجاز است:
| |||||||
|
'
image_text=image_text.replace(totalpiopic,u'
این تصویر دارای حق تکثیر است و تحت سیاستهای تصویرهای آزاد نیست. با این وجود، استفاده از این پرونده در مقالهٔ «'+page_title+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)