ویکیپدیا:درخواستهای ربات/آمار ویرایشگران مقالات برگزیده۲
در این نسخه که نمونهاش در اینجا قابل مشاهده است. حجم تغییرات نمایش داده میشود.
روش استفاده
[ویرایش]ربات را اجرا کنید از شما نام مقاله را میپرسد به کمک این ابزار نام را به صورت درصدی وارد نمائید. سپس آخرین تاریخ را میپرسد که در صورت زدن اینتر یا دکمه y تاریخ امروز را در نظر میگیرد.
برای مقالاتی که قصد دارید آخرین تاریخ غیر از امروز باشد n بزنید و از شما آخرین تاریخ را میپرسد و پس از آن آمار را در بحث مقاله ارائه خواهد داد.
کد
[ویرایش]<syntaxhighlight lang="python">
- /usr/bin/python
- -*- coding: utf-8 -*-
- BY: رضا (User:reza1615 on fa.wikipedia)
- 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)
- ----------------------------------------------------------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()