ویکی‌پدیا:درخواست‌های ربات/آمار ویرایشگران مقالات برگزیده۲

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

در این نسخه که نمونه‌اش در اینجا قابل مشاهده است. حجم تغییرات نمایش داده می‌شود.

روش استفاده[ویرایش]

ربات را اجرا کنید از شما نام مقاله را می‌پرسد به کمک این ابزار نام را به صورت درصدی وارد نمائید. سپس آخرین تاریخ را می‌پرسد که در صورت زدن اینتر یا دکمه y تاریخ امروز را در نظر می‌گیرد.

برای مقالاتی که قصد دارید آخرین تاریخ غیر از امروز باشد n بزنید و از شما آخرین تاریخ را می‌پرسد و پس از آن آمار را در بحث مقاله ارائه خواهد داد.

<syntaxhighlight lang="python">

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

__version__ = '$Id: $' import wikipedia,sys,pagegenerators import re, os, codecs, catlib,string from datetime import timedelta,datetime from collections import defaultdict wikipedia.config.put_throttle = 0 wikipedia.put_throttle.setDelay() faSite = wikipedia.getSite('fa') enSite = wikipedia.getSite('en') txtTmp=' ' msg = u'ربات:درصد ویرایش کاربرها در مقاله' savepage=u'کاربر:reza1615/test03' dateinput = u' ' def BotRun(pages,number,text_history,dateinput):

   wikipedia.output( pages.title())
   start=text_history[-1][1].split('T')[0]
   wikipedia.output( start)
   maxdate=dateinput
   maxyear=int(unicode(maxdate.split('-')[0],'UTF-8'))
   maxmonth=int(unicode(maxdate.split('-')[1],'UTF-8'))    
   maxday=int(unicode(maxdate.split('-')[2],'UTF-8'))
   time,user,size=' ',' ',' '
   lastsize,count=0,0
   dictc,dicts,inverse,dictsdel,dicts={},{},{},{},{}
   hiatory=text_history
   lent=len(text_history)-1
   size2=0
   for l in range(lent,0,-1) :
       line=hiatory[l]
       time=line[1]
       date=time.split('T')[0].strip()
       year=int(date.split('-')[0].strip())
       month=int(date.split('-')[1].strip())
       day=int(date.split('-')[2].strip())
       datenum=(year-2000)*365+(month)*30+day
       datenummax=(maxyear-2000)*365+(maxmonth)*30+maxday
       if datenummax>=datenum:
           count+=1
           size1=int(line[4])
           size=size1-size2
           size2=size1
           user=line[2]
           if user in dictc:
               dictc[user]=int(dictc[user])+1
               if size>0:
                   if user in dicts:
                       dicts[user]=int(dicts[user])+size
                   else:
                       dicts[user]=size
               else:
                   if user in dictsdel:
                       dictsdel[user]=int(dictsdel[user])+size
                   else:
                       dictsdel[user]=size
           else:
               dictc[user]=1
               if size>0:
                   if user in dicts:
                       dicts[user]=int(dicts[user])+size
                   else:
                       dicts[user]=size
               else:
                   if user in dictsdel:
                       dictsdel[user]=int(dictsdel[user])+size
                   else:
                       dictsdel[user]=size
   inverse= defaultdict(list)
   for k, v in dictc.items():
       inverse[int(v)].append( k )
   chart(pages,inverse,count,maxdate,start,dicts,dictsdel)

def chart(pages,dictc,count,maxdate,start,dicts,dictsdel):

   counter=0
   line=u" "
   top=u'\n==آمار ویرایش‌های '+pages.title()+u'==\nمقاله ([{{fullurl:{{{1}}}|action=edit}} ویرایش] | [[|بحث]] | [{{fullurl:{{{1}}}|action=history}} تاریخچه] | [{{fullurl:{{{1}}}|action=protect}} حفاظت] | [{{fullurl:{{{1}}}|action=delete}} حذف] | [{{fullurl:Special:Whatlinkshere/{{{1}}}|limit=999}} پیوندها] | [{{fullurl:{{{1}}}|action=watch}} پی‌گیری] | سیاهه‌ها | مشاهده‌ها)\n\nمشارکت ۱۰ کاربر فعال در مقالهٔ '+pages.title()+u' از تاریخ '
   top+=unicode(str(start),'UTF-8')
   top+=u' تا تاریخ برگزیدگی ('+str(maxdate)+u')به شرح زیر است.Xqbot (بحث) ‏۲۰ آوریل ۲۰۲۰، ساعت ۱۱:۵۵ (UTC)\n'
   charttop=u'{| class="wikitable sortable"\n!ردیف!!کاربر!!درصد مشارکت!!تعداد ویرایش‌ها از '+str(count)+u' عدد ویرایش!!حجم افزوده!!حجم حذف‌کرده\n|-\n'
   chartdown=u'\n|}'
   for k in sorted(dictc, reverse=True):    
           if counter>10:
                   break
           for i in range(0,len(dictc[k])):
               counter+=1
               if counter>10:
                   break                
               try:
                   delet= dictsdel[dictc[k][i]]*-1
               except:
                   delet="0"
               try:
                   add=dicts[dictc[k][i]]
               except:
                   add='0'
               line+=u'|'+str(counter)+u'||[[کاربر:'+dictc[k][i]+u'|'+dictc[k][i]+u']]||'+str(k*۱۰۰/count)+u' %||'+str(k)+u'||'+str(add)+u'||'+str(delet)+u'-\n|-\n'
   chart=top+charttop+line.strip()+chartdown
   chart=chart.replace(u'۰-',u'۰')    
   wikipedia.output( 'ok')
   savepart(u'بحث:'+pages.title(),chart)[پاسخ]
  1. ----------------------------------------------------------end of action that you want to do on pages---------------

def run(generator,dateinput):

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

           BotRun(page,counters,versionhistory,dateinput)


def savepart( page,new_text):

    faSite = wikipedia.getSite('fa')
    savepage=wikipedia.Page(faSite,page)
    if new_text!=None and page!=None and new_text.find( u'#تغییرمسیر')==-1 and  new_text.find( u'#ridirect')==-1 and  new_text.find( u'#Ridirect')==-1:
           try:
               text=savepage.get()
               savepage.put( text+'\n'+new_text,msg ,watchArticle = None,minorEdit = True)
           except wikipedia.EditConflict:
               wikipedia.output( u'Skipping %s because of edit conflict' % ( savepage.title() ) )
           except wikipedia.SpamfilterError,url:
               wikipedia.output( u'Cannot change %s because of blacklist entry %s' % ( savepage.title(),url ) )

def main():

   summary_commandline,template,gen = None,None,None
   exceptions,PageTitles,namespaces = [],[],[]
   autoText,autoTitle = False,False
   genFactory = pagegenerators.GeneratorFactory()
   wikipedia.setAction( msg )
   PageTitles = [raw_input(u'Page Name:> ').decode('utf-8')]
   dateinput = raw_input(u'Max-Date is Today,is it Ok?(y/n) defult is y :> ').decode('utf-8')
   if dateinput==u or dateinput==u'y' or dateinput==u'Yes' or dateinput==u'YES':
       dateinput=str(datetime.now()).split(' ')[0].replace('/','-').strip()
   if dateinput==u'n' or dateinput==u'N' or dateinput==u'NO' or dateinput==u'no' or dateinput==u'No':
       dateinput = raw_input(u'Type Max-Date (2011-11-02):> ' )
   pages = [wikipedia.Page(faSite,PageTitle.strip()) 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,dateinput)

main()