ویکی‌واژه:ربات/ربات تمیزکاری

از ویکی‌واژه
فعالیت‌ها
  • این ربات متن سرواژه‌ها را بر پایهٔ شیوه‌نامهٔ ویکی‌واژه تصحیح می‌کند و همچنین از تمام پارامترهای پیش‌فرض pywikipedia استفاده می‌کند.

<source lang=python>

  1. !/usr/bin/python
  2. -*- coding: utf-8 -*-
  3. BY: Z (User:ZxxZxxZ on fa.wikipedia)
  4. BY: رضا (User:reza1615 on fa.wikipedia)
  5. Distributed under the terms of the CC-BY-SA 3.0 .

import wikipedia as pywikibot import wikipedia import pagegenerators import re, os, codecs, catlib wikipedia.config.put_throttle = 0 wikipedia.put_throttle.setDelay() faSite = wikipedia.getSite('fa') enSite = wikipedia.getSite('en') txtTmp=' ' faChrs = u'ءاآأإئؤبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیًٌٍَُِّْٓيك' enChrs=u'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM' faNums = u'۰۱۲۳۴۵۶۷۸۹' arNums = u'٠١٢٣٤٥٦٧٨٩' enNums = u'0123456789'

msg = u'ربات: اصلاح بر پایه شیوه‌نامه %s'

def BotRun(page,text_fa):

  1. --------------------------------------------------------------action that you want to do on pages-----------------
   text_fa=text_fa.replace(u']]،',u'*\n').replace(u'',u'\n[[').replace(u'\n\n\n',u'\n\n').replace(u'\n\n\n',u'\n\n')
   text_fa=text_fa.replace(u'# ',u)
   text_fa=text_fa.replace(u')=',u'@@=')
   text_fa=text_fa.replace(u')',u')\n')
   text_fa=text_fa.replace(u'@@=',u')=')
   lines=text_fa.split(u'\n')
   text='\n'
   for line in lines:
       line=line.strip()
       if line.find(u'[')!=-1 or line.find(u'#')!=-1 or line.find(u'{')!=-1 or line.find(u'/')!=-1 or line.find(u'=')!=-1 or line== or line.find(u'(')!=-1 or line.find(u')')!=-1 or line.find(u'معین')!=-1 or line.find(u'عمید')!=-1 or line.find(u'دهخدا')!=-1 or line.find(u'لغت')!=-1: 
               textline=line+u'\n'
       else:
           
           if line.find(u'*')!=-1:
               textline=line.replace(u'*',u'#')+u'\n'
           else:
               if  line.find(u'#')==-1:
                   textline=u'# '+line+u'\n'
       line2=textline.replace(u'#',u).strip()
       if line2==:
           textline=u'\n'
       
       textline=textline.replace(u'#=',u'=').replace(u'#*',u'#')
       textline=textline.replace(u'#{',u'{')
       if  line.find(u':')!=-1:
           textline=textline.replace(u'#[[',u'[[')
       text+=textline
   text=text.replace(u'
',u'\n').replace(u'
',u'\n').replace(u'
',u'\n').replace(u'
',u'\n') text=text.replace(u'#(',u'\n(').replace(u'# ؛',u'#').replace(u'#؛',u'#').replace(u'#.',u'#').replace(u'#،',u'#').replace(u'#,',u'#') text=text.replace(u'فرهنگ لغت معین',u'فرهنگ لغت معین\n').replace(u'
',u'\n').replace(u'\n\n\n',u'\n\n').replace(u'\n\n\n',u'\n\n') text=text.replace(u'# فرهنگ',u'* فرهنگ').replace(u'#فرهنگ',u'*فرهنگ') text=text.replace(u'=جُستارهای وابسته=',u'=جستارهای وابسته=').replace(u'=همچنین ببینید=',u'=جستارهای وابسته=') text=text.replace(u'= منبع =',u'=منابع=').replace(u'= منبع‌ها =',u'=منابع=') text=text.replace(u'=منابع=',u'=منابع=').replace(u'=منبع‌ها=',u'=منابع=').replace(u'=منبع ها=',u'=منابع=').replace(u'=مراجع=',u'=منابع=').replace(u'=منبع=',u'=منابع=') text=text.replace(u'=====منابع=====',u'@@@@منابع@@@@').replace(u'====منابع====',u'@@@@منابع@@@@').replace(u'===منابع===',u'@@@@منابع@@@@').replace(u'==منابع==',u'@@@@منابع@@@@').replace(u'=منابع=',u'@@@@منابع@@@@') text=text.replace(u'@@@@منابع@@@@',u'==== منابع ====')
   return text.strip()+u'\n'

  1. ----------------------------------------------------------end of action that you want to do on pages---------------

def faToEn(faTxt, type):

 # changing english to farsi numbers
 faChrsToFrcRplc = u'۰۱۲۳۴۵۶۷۸۹«»٬٫٪،؛؟'
 enChrsToFrcRplc = u'0123456789""`.%,;?'
 if type is 'force':
   for i in range(0,18):
     enTxt = faTxt.replace(enChrsToFrcRplc[i], faChrsToFrcRplc[i])
 elif type is 'safe':
   pass
 return enTxt

def fixCsmtc(faTxt, type):

   # ZWNJ
   if type is 'force':
       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) # در پیش
   elif type is 'safe':
       ###
       a=1
   return enTxt

def run(generator):

       for page in generator: 
           try:
               if not page.canBeEdited():
                   wikipedia.output( u'Skipping locked page %s' % page.title() )
                   continue
               text_fa = page.get()#------------------------------geting pages content
           except wikipedia.NoPage:
               wikipedia.output( u'Page %s not found' % page.title() )
               continue
           except wikipedia.IsRedirectPage:#----------------------geting pages redirects contents
                pageRedirect = page.getRedirectTarget()
                text_fa = pageRedirect.get()
                wikipedia.output( u'Page %s was Redirect but edited!' %  pageRedirect )                
           except:
                continue

           new_text=BotRun(page,text_fa)
           savepart( page,new_text )#---------------saving changes in page with new_text content-----------------------------------


def savepart( page,new_text):

           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 main():

   summary_commandline,template,gen = None,None,None
   exceptions,PageTitles,namespaces = [],[],[]
   autoText,autoTitle = False,False
   genFactory = pagegenerators.GeneratorFactory()
   wikipedia.setAction( msg )
   arg=True#------if you dont want to work with arguments leave it False if you want change it to True---
   if arg==True:
       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:
                   PageTitles.append(wikipedia.input( u'Which Category do you want to chage?' ))
               else:
                   PageTitles.append('Category:'+arg[5:])
           elif arg.startswith( '-template:' ):
               if len(arg) == 10:
                   PageTitles.append(wikipedia.input( u'Which Template do you want to chage?' ))
               else:
                   PageTitles.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( '-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 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)

if __name__ == "__main__":

   try:
       main()
   finally:
       wikipedia.stopme()