ویکیپدیا:درخواستهای ربات/تصویر همسنگ
این کاربر یک ربات است | |
---|---|
وظیفه(ها) | دریافت تصویر از مقالهٔ ویکی انگلیسی و افزودن آن به مقالهٔ فارسی (در صورتی که تصویر در ویکیانبار باشد) |
موافق محرومیت؟ | خیر |
موافق خاموششدن اضطراری؟ | بله |
اجازهنامه | CC-BY-SA 3.0 |
تست شده؟ | بله |
کد زیر رباتی برای افزودن تصویر به مقالات فارسی است
شروع به کار
[ویرایش]برای شروع شما میتوانید از آرگومانهای استاندارد یا یکی از روشهای زیر عمل کنید.
- تذکر
- برای نام مقالهها یا ردهها (در ویندوز) باید آنها را به صورت درصدی نوشت
آرگومانهای پرکاربرد
[ویرایش]- آرگومان -safe برای رباتهای اتوماتیک
برای رباتهایی که از روی تولسرور یا به صورت اتوماتیک اجرا میشوند استفاده از آرگومان -safe پیشنهاد میگردد.
زمانی که در مقالهٔ انگلیسی در بخش infobox هیچ نگارهای نباشد در صورتی که برای ربات -safe تعریف شدهباشد آن مقاله را رها کرده و به مقاله بعد میرود (حالت امن) و در صورتی که -safe تعریف نگردد ربات با مراجعه به متن مقاله دنبال نگاره آزاد میگردد و اولین نگارهای را که یافت به جعبه اطلاعات مقاله ویکیفا میافزاید البته قبل از افزودن نگاره از رباتران میپرسد که آیا برای افزودن آن نگاره اطمینان دارد یا نه، در صورت دریافت پاسخ y یا yes نگاره را میافزاید در غیر اینصورت مقاله را رها میکند.
- نام صفحه
با استفاده از آرگومان -page: می توانید نام صفحه مورد نظر در ویکیفارسی را مشخص کنید تا در صورت بودن، نگاره موجود در جعبهٔ اطلاعات مقالهٔ انگلیسی را به مقالهٔ ویکیفا بیافزاید.
python X.py -page:%D8%B1%D8%A7%D8%B3%DA%A9%D9%88%20%D8%A2%D8%B1%D8%A8%D9%88%DA%A9%D9%84
نکته: کد درصدی بالا نام مقالهٔ راسکو آربوکل بود که به کمک ابزار مبدل به صورت درصدی درآمده است.
- نام رده
با استفاده از آرگومان -cat: می توانید نام رده مورد نظر در ویکیفارسی را مشخص کنید تا جعبه های موجود در مقالات ویکی انگلیسی را جستجو کند و در صورت موجود بودن نگارهٔ آزاد (ویکیانبار) آن را به مقالهها بیافزاید
python X.py -cat:%D9%85%D9%82%D8%A7%D9%84%D8%A7%D8%AA%20%D8%A8%D8%A7%D8%B2%DB%8C%DA%AF%D8%B1
در این مثال کد درصدی برابر با مقالات بازیگر بود که به معنی رده:مقالات بازیگر است.
- تذکر
برای نوشتن نام رده از پیشوند رده: استفاده نکنید.
کد
[ویرایش]<syntaxhighlight lang="python" line start="1">
- !/usr/bin/python
- -*- coding: utf-8 -*-
- BY: رضا (User:reza1615 on fa.wikipedia)
- Distributed under the terms of the CC-BY-SA 3.0.
import wikipedia import pagegenerators,query,sys import re, os, codecs, catlib wikipedia.config.put_throttle = 0 wikipedia.put_throttle.setDelay() secondwiki='en' faSite = wikipedia.getSite('fa') enSite = wikipedia.getSite(secondwiki) txtTmp= faChrs = u'ءاآأإئؤبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیًٌٍَُِّْٓيك' msg = u'ربات: افزودن نگارهٔ آزاد به مقاله (کد)'
def fixCsmtc(faTxt):
# ZWNJ txt=faTxt txt = re.sub(u'{2,}', u'', txtTmp) # پشتسرهم txt = re.sub(u'\[\[([^\]\|]*?)]](%s+)' % faChrs, ur'\1\2', txt) # Piping txt = re.sub(u'(?![ئاآأإژزرذدوؤةبپتثجچحخسشصضطظعغفقکگلمنهیيًٌٍَُِّْٰٓٔ]|[\u0900-\u097F]|ֹ)', , txt) # در پس txt = re.sub(u'(?<![ئبپتثجچحخسشصضطظعغفقکگلمنهیيًٌٍَُِّْٰٓٔ]|[\u0900-\u097F]|f|ֹ)', , txt) # در پیش return txt
def checksite(image):
if image.find(u'.ogg')!=-1 or image.find(u'.oga')!=-1 or image.find(u'.ogv')!=-1 or image.find(u'.mid')!=-1: return u'local' params = { 'action': 'query', 'titles': 'File:'+image,#Image name 'prop': 'imageinfo' } try: queryresult = query.GetData(params, encodeTitle = True) items=queryresult['query']['pages'] for item in items: if queryresult['query']['pages'][item]['imagerepository']=='shared': return u'commons' else: return u'local' except: return u'error'
def enwikiimagecheck(text_en2,safefa):
try: im = re.search(ur'\|\s*(?:[Ff]ile|[Pp]hoto|[Ii]mage).*?\=\s*([^\|]*?)\s*\|', text_en2) imagename=im.group(0).split(u'=')[1].replace(u'|',u).strip() return imagename except: if safefa==False: im = re.search(ur'\[\[([Ff]ile|[Ii]mage):.*?\|', text_en2) imagename=im.group(0).split(u':')[1].replace(u'|',u).strip() ask=wikipedia.input(u'Are you sure that you want to add "'+imagename+u'" to fawiki?it is not in enwiki infobox! (y/n) ').decode('utf-8') if ask==u'y' or ask==u'Y' or ask==u'yes' or ask==u'Yes' or ask==u'YES': ask=True else: ask=False if ask==True: return imagename
def BotRun(page,text_fa,text_en,safefa):
try: pagename=page.replace(u'Fa:',u).replace(u'fa:',u).replace(u'',u'').replace(u'',u).strip() except: pagename=unicode(str(page),'UTF-8').replace(u'Fa:',u).replace(u'fa:',u).replace(u'',u'').replace(u'',u).strip() page=wikipedia.Page(faSite,pagename)
- --------------------------------------------------------------action that you want to do on pages-----------------
text_fa2=text_fa.replace(u'\n',u).replace(u'\r',u) text_en2=text_en.replace(u'\n',u).replace(u'\r',u) imagename=u try: imagename=enwikiimagecheck(text_en2,safefa) if imagename: if checksite(imagename)==u'commons': try: imfa = re.search(ur'\|\s*(?:عکس|نگاره|تصویر).*?\=.*?\|', text_fa2) if imfa: try: imagenamefa=imfa.group(0).split(u'=')[1].replace(u'|',u).strip()
if imagenamefa.find(u'Replace this image male.svg')!=-1 or imagenamefa.find(u'Replace this image female.svg')!=-1: text_fa2=text_fa2.replace(u'Replace this image male.svg',u,1).replace(u'Replace this image female.svg',u,1) text_fa=text_fa.replace(u'Replace this image male.svg',u,1).replace(u'Replace this image female.svg',u,1) imfa = re.search(ur'\|عکس|نگاره|تصویر.*?\=.*?\|', text_fa2) imagenamefa=imfa.group(0).split(u'=')[1].replace(u'|',u).strip() if imagenamefa!=u: wikipedia.output(u'infobox has image') return False imageparameter=imfa.group(0).split(u'=')[0] text_fa=text_fa.replace(imageparameter+u'=',imageparameter+u'='+imagename.strip(),1) wikipedia.output( u"\03{lightpurple} --image added to infobox!-- \03{default}" ) try: imfasize = re.search(ur'\|\s*(?:سایز تصویر|اندازه تصویر|عرض تصویر|سایز نگاره|اندازه نگاره|عرض نگاره|سایز عکس|انداز عکس|عرض عکس|سایز_تصویر|اندازه_تصویر|عرض_تصویر|سایز_نگاره|اندازه_نگاره|عرض_نگاره|سایز_عکس|انداز_عکس|عرض_عکس).*?\=.*?\|', text_fa2) imagenamesize=imfasize.group(0).split(u'=')[1].replace(u'|',u).strip() imagesizeparameter=imfasize.group(0).split(u'=')[0] text_fa=text_fa.replace(imagesizeparameter+u'='+imagenamesize,imagesizeparameter+u'=200px',1) except: pass return text_fa except: wikipedia.output( u"--infobox doesn't be in fa.wiki--" ) return False except: wikipedia.output( u"--infobox doesn't be in fa.wiki page---" ) return False else: wikipedia.output( u"--en wiki's image is local!--" ) return False except: wikipedia.output( u"--en infobox doesn't has image--" ) return text_fa
- ----------------------------------------------------------end of action that you want to do on pages---------------
def enpageget(interwiki):
text_en=u' ' for inter in interwiki: inters=str(inter) if inters.find(secondwiki+':')!=-1: enSite = wikipedia.getSite(secondwiki) page=wikipedia.Page(enSite,inter.title()) try: if not page.canBeEdited(): wikipedia.output( u'Skipping locked page %s' % page.title() ) return u' ' text_en = page.get()#------------------------------geting pages content return text_en except wikipedia.NoPage: wikipedia.output( u'Page %s not found' % page.title() ) continue except wikipedia.IsRedirectPage:#----------------------geting pages redirects contents pageRedirect = page.getRedirectTarget() text_en = pageRedirect.get() wikipedia.output( u'Page %s was Redirect but edited!' % pageRedirect ) return text_en except: continue return u' '
def run(generator,safefa):
for pages in generator: try: pagename=unicode(str(pages),'UTF-8').replace(u'Fa:',u).replace(u'fa:',u).replace(u'',u'').replace(u'',u).strip() except: pagename=str(pages).replace(u'Fa:',u).replace(u'fa:',u).replace(u'',u'').replace(u'',u).strip() if pagename.find(u':')!=-1: continue pagefa=wikipedia.Page(faSite,pagename) try: if not pagefa.canBeEdited(): wikipedia.output( u'Skipping locked page %s' % pagefa.title() ) continue text_fa = pagefa.get()#------------------------------geting pages content interwikis= pagefa.interwiki() except wikipedia.NoPage: wikipedia.output( u'Page %s not found' % pagefa.title() ) continue except wikipedia.IsRedirectPage:#----------------------geting pages redirects contents pageRedirect = pagefa.getRedirectTarget() text_fa = pageRedirect.get() interwikis= pagefa.interwiki() wikipedia.output( u'Page %s was Redirect but edited!' % pageRedirect ) except: continue if interwikis==[]: wikipedia.output( u'---------------------------') wikipedia.output( pagename) wikipedia.output( u"dosen't have english page!") continue text_en=enpageget(interwikis) try: test=text_en.replace(u'\n',u) except: wikipedia.output( u'---------------------------') wikipedia.output( pagename) wikipedia.output( u"dosen't have english page!") continue if text_en==u' ' or text_en==u: wikipedia.output( u'---------------------------') wikipedia.output( pagename) wikipedia.output( u"dosen't have english page!") continue wikipedia.output( u'---------------------------') wikipedia.output( pagename) new_text=BotRun(pagename,text_fa,text_en,safefa) if new_text: savepart(pagename,new_text )#---------------saving changes in page with new_text content----------------------------------- else: wikipedia.output( u'Skipping %s ' % pagename )
def savepart( page,new_text):
pagename=page.replace(u'Fa:',u).replace(u'fa:',u).replace(u'',u'').replace(u'',u).strip() page=wikipedia.Page(faSite,pagename) try: page.put( new_text,msg % page ,watchArticle = None,minorEdit = True) except wikipedia.EditConflict: wikipedia.output( u'Skipping %s because of edit conflict' % ( page.title() ) ) except wikipedia.SpamfilterError,url: wikipedia.output( u'Cannot change %s because of blacklist entry %s' % ( page.title(),url ) )
def categorydown(listacategory):
wikipedia.config.put_throttle = 0 wikipedia.put_throttle.setDelay() count=1 for catname in listacategory: count+=1 if count==200: break gencat = pagegenerators.SubCategoriesPageGenerator(catname, recurse=False) for subcat in gencat: try: wikipedia.output(subcat) except: wikipedia.output(str(subcat)) if subcat in listacategory: continue else: listacategory.append(subcat) return listacategory
def facatlist(facat):
wikipedia.config.put_throttle = 0 wikipedia.put_throttle.setDelay() count=0 listenpageTitle=[] PageTitle=facat.replace(u'',u'').replace(u'',u).strip() language='fa' PageTitles =[PageTitle] for PageTitle in PageTitles: cat = catlib.Category( wikipedia.getSite(language),PageTitle ) listacategory=[cat] listacategory=categorydown(listacategory) for enpageTitle in listacategory: enpageTitle=str(enpageTitle).split(u'|')[0].split(u']]')[0].replace(u'[[',u).strip() cat = catlib.Category( wikipedia.getSite(language),enpageTitle ) gent = pagegenerators.CategorizedPageGenerator( cat ) for pagework in gent: count+=1 try: link=str(pagework).split(u'|')[0].split(u']]')[0].replace(u'[[',u).strip() except: pagework=unicode(str(pagework),'UTF-8') link=pagework.split(u'|')[0].split(u']]')[0].replace(u'[[',u).strip() wikipedia.output(link) fapagetitle=link wikipedia.output(u'adding '+fapagetitle+u' to fapage lists') listenpageTitle.append(fapagetitle) if listenpageTitle==[]: return False return listenpageTitle
def main():
summary_commandline,template,gen = None,None,None exceptions,PageTitles,namespaces = [],[],[] cat= safefa=False autoText,autoTitle = False,False genFactory = pagegenerators.GeneratorFactory() wikipedia.setAction( msg ) arg=False#------if you dont want to work with arguments leave it False if you want change it to True--- if arg==False: for arg in wikipedia.handleArgs(): if arg == '-autotitle': autoTitle = True elif arg == '-autotext': autoText = True elif arg.startswith( '-page:' ): if len(arg) == 6: PageTitles.append(wikipedia.input( u'Which page do you want to chage?' )) else: PageTitles.append(arg[6:]) elif arg.startswith( '-cat:' ): if len(arg) == 5: cat=wikipedia.input( u'Which Category do you want to chage?' ) else: cat='Category:'+arg[5:] elif arg.startswith( '-template:' ): if len(arg) == 10: template.append(wikipedia.input( u'Which Template do you want to chage?' )) else: template.append('Template:'+arg[10:]) elif arg.startswith('-except:'): exceptions.append(arg[8:]) elif arg.startswith( '-namespace:' ): namespaces.append( int( arg[11:] ) ) elif arg.startswith( '-ns:' ): namespaces.append( int( arg[4:] ) ) elif arg.startswith( '-safe' ): safefa=True elif arg.startswith( '-summary:' ): wikipedia.setAction( arg[9:] ) summary_commandline = True else: generator = genFactory.handleArg(arg) if generator: gen = generator else: PageTitles = [raw_input(u'Page:> ').decode('utf-8')] if cat!=: facatfalist=facatlist(cat) if facatfalist!=False: run(facatfalist,safefa) if PageTitles: pages = [wikipedia.Page(faSite,PageTitle) for PageTitle in PageTitles] gen = iter( pages ) if not gen: wikipedia.stopme() sys.exit() if namespaces != []: gen = pagegenerators.NamespaceFilterPageGenerator( gen,namespaces ) preloadingGen = pagegenerators.PreloadingGenerator( gen,pageNumber = 60 )#---number of pages that you want load at same time run(preloadingGen,safefa)
if __name__ == "__main__":
try: main() finally: wikipedia.stopme()