ویکی‌پدیا:درخواست‌های ربات/فهرست مقاله‌های پربازدید

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

این ربات برای تهیه فهرست مقاله‌های پربیننده کاربرد دارد. روش کار آن به این صورت است که در دو مرحله کار میکند

  1. کد دانلود دیتا بیس:این کد فایل‌ها را دانلود و پس از دریافت مطالب مورد نیاز حذف میکند و به جایشان فایل‌های متنی با حجم ۱ مگ در سرور بر جای میگذارد که این فایل‌ها مورد استفاده کد دوم هستند
  2. کد آنالیز داده‌ها و ایجاد خروجی فهرست‌ها: این کد در صورت اجرا نشدن کد اول کار نمی‌کند.

روش کار[ویرایش]

برای کار کردن با ربات فقط کدهای ۱ و ۲ را به ترتیب روی تول سرور اجرا کنید این ربات نیازمند اینترنت پر سرعت است چون باید ۱ گیگا بایت فایل دانلود نماید. از روی تول‌سرور با سرعت ۹ مگا بایت در ثانیه دانلود میشود.

نکته[ویرایش]

  • با تغییر در 'fa ' به 'fa.s ' یا 'fa.b ' و... در کدهای ۱و۲ میتوان ربات را برای ویکی‌های دیگر نیز استفاده کرد حتی ویکی‌واژه یا ویکی‌نسک و...یا برای زبان‌های دیگر مانند مازندرانی و...
  • به فاصله بعد از 'fa ' توجه کنید نباید حذف گردد.
#!/usr/bin/python
# -*- coding: utf-8  -*-
#
# Reza(User:reza1615), 2011
#
# Distributed under the terms of the CC-BY-SA 3.0 .
import os
from datetime import timedelta,datetime
file=(u'000000',u'000001',u'000002', u'010000',u'010001',u'010002',u'020000',u'020001',u'020002',u'030000',u'030001',u'030002',u'040000',u'040001',u'040002',u'050000',u'050001',u'050002',u'060000',u'060001',u'060002',u'070000',u'070001',u'070002',u'080000',u'080001',u'080002',
      u'090000',u'090001',u'090002',u'100000',u'100001',u'100002',u'110000',u'110001',u'110002',u'120000',u'120001',u'120002',u'130000',u'130001',u'130002',u'140000',u'140001',u'140002',u'150000',u'150001',u'150002',u'160000',u'160001',u'160002',u'170000',u'170001',u'170002',u'180000',u'180001',u'180002',u'190000',u'190001',u'190002',u'200000',u'200001',u'200002',
      u'210000',u'210001',u'210002',u'220000',u'220001',u'220002',u'230000',u'230001',u'230002')
now = datetime.now()
yesterday=str(now-timedelta(1)).replace('-','').split(' ')[0].strip()
#for adress in file:
a=1
adress='000000'
if a==1:
    urllinkmain='http://dammit.lt/wikistats/pagecounts-%s-%s.gz' %(yesterday,adress)
    print urllinkmain
    try:
        os.system('wget '+urllinkmain)
        fileadress='pagecounts-%s-%s.gz' %(yesterday,adress)
        os.system("gzip -d "+fileadress)
        os.system("cat "+fileadress[:-3]+" | grep '^fa ' > "+fileadress[:-2]+"txt")#اینجا باید '^fa ' را به '^fa.s ' برای ویکینسک تبدیل کرد
        os.system("rm "+fileadress)
    except:
        continue
    
#!/usr/bin/python
# -*- coding: utf-8  -*-
#
# Reza(User:reza1615), 2011
#
# Distributed under the terms of the CC-BY-SA 3.0 .
import os
from datetime import timedelta,datetime
file=(u'000000',u'000001',u'000002', u'010000',u'010001',u'010002',u'020000',u'020001',u'020002',u'030000',u'030001',u'030002',u'040000',u'040001',u'040002',u'050000',u'050001',u'050002',u'060000',u'060001',u'060002',u'070000',u'070001',u'070002',u'080000',u'080001',u'080002',
      u'090000',u'090001',u'090002',u'100000',u'100001',u'100002',u'110000',u'110001',u'110002',u'120000',u'120001',u'120002',u'130000',u'130001',u'130002',u'140000',u'140001',u'140002',u'150000',u'150001',u'150002',u'160000',u'160001',u'160002',u'170000',u'170001',u'170002',u'180000',u'180001',u'180002',u'190000',u'190001',u'190002',u'200000',u'200001',u'200002',
      u'210000',u'210001',u'210002',u'220000',u'220001',u'220002',u'230000',u'230001',u'230002')
now = datetime.now()
yesterday=str(now-timedelta(1)).replace('-','').split(' ')[0].strip()
for adress in file:
    urllinkmain='http://dammit.lt/wikistats/pagecounts-%s-%s.gz' %(yesterday,adress)
    try:
        os.system('wget '+urllinkmain)
        fileadress='pagecounts-%s-%s.gz' %(yesterday,adress)
        os.system("gzip -d "+fileadress)
        os.system("cat "+fileadress[:-3]+" | grep '^fa ' > "+fileadress[:-2]+"txt")
        if os.path.getsize(fileadress[:-2]+"txt") == 0:
             os.system("rm "+fileadress[:-2]+"txt")
             os.system("rm index.html.1")
        os.system("rm "+fileadress[:-3])
    except:
        continue

کد۲ برای آنالیز اطلاعات[ویرایش]

#!/usr/bin/python
# -*- coding: utf-8  -*-
#
# Reza(User:reza1615), 2011
#
# Distributed under the terms of the CC-BY-SA 3.0 .
import catlib ,pagegenerators
import wikipedia,urllib,gzip
import codecs,query
from collections import defaultdict
from datetime import timedelta,datetime
from StringIO import StringIO
internetoff=False #-----------------------------------bedoone internet------------------------
wikipedia.config.put_throttle = 0
wikipedia.put_throttle.setDelay()
text=u' '
dict={}
file_content=u' '
now = datetime.now()
yesterday=str(now-timedelta(1)).replace('-','').split(' ')[0].strip()
todayup=u"'''به‌روز شده توسط ربات در تاریخ''''': ~~~~~''\n"
titlechart=u'!رتبه!! صفحه!! میزان بازدید در یک روز!!برچسب‌ها!!میان‌ویکی!!تعداد پیوند به!! تعداد رده!!تعداد نگاره!!حجم صغحه (بایت){{سخ}}حجم کمتر از ۱۵ کیلوبایت رنگی نمایش داده میشود !!توضیحات دیگر'+u'\n|-\n'
uppage=todayup+u'\n{| class="wikitable sortable"\n'+titlechart
downpage=u'\n|}\n[[رده:ویکی‌پدیا]]\n[[رده:آمارهای دیتابیس]]\n'
count=0
lines=u' '
file=(u'000000',u'000001',u'000002', u'010000',u'010001',u'010002',u'020000',u'020001',u'020002',u'030000',u'030001',u'030002',u'040000',u'040001',u'040002',u'050000',u'050001',u'050002',u'060000',u'060001',u'060002',u'070000',u'070001',u'070002',u'080000',u'080001',u'080002',
      u'090000',u'090001',u'090002',u'100000',u'100001',u'100002',u'110000',u'110001',u'110002',u'120000',u'120001',u'120002',u'130000',u'130001',u'130002',u'140000',u'140001',u'140002',u'150000',u'150001',u'150002',u'160000',u'160001',u'160002',u'170000',u'170001',u'170002',u'180000',u'180001',u'180002',u'190000',u'190001',u'190002',u'200000',u'200001',u'200002',
      u'210000',u'210001',u'210002',u'220000',u'220001',u'220002',u'230000',u'230001',u'230002')
               
def condition(text):
      wikipedia.config.put_throttle = 0
      wikipedia.put_throttle.setDelay()
      if internetoff==True:
          return u'||\n|-\n'
      alarm=' '
      try:
         page = wikipedia.Page( wikipedia.getSite( u'fa' ),text )
         wikipedia.output( u'opening %s ...' % page.title() )
         #if page.botMayEdit!=False:
             #alarm=u'||'+u'||'+u'||'+u'||'+u'||'+u'||'+u'||'+u'||'+u'||'+u'||'+u'||'+u'ربات اجازه ورود ندارد!\n|-\n'
             #return alarm 
         text = page.get()
         alarm+=u' '
         objective=u'||'
        #----------------------------------------------refrences-------------------
         if text.find(u'{{منبع')!=-1:
             alarm+=u'نیازمند منبع ،'
         if text.find(u'{{بهبود')!=-1:
              alarm+=u'بهبود منبع ،'           
         if text.find(u'{{بدون منبع')!=-1:
              alarm+=u'بدون منبع ،'
         if text.find(u'{{متخصص')!=-1:
             alarm+=u'متخصص ،'
         if text.find(u'{{مقاله خوب}}')!=-1:
             alarm+=u'{{قلم رنگ|سورمه‌ای|فیلی|مقاله خوب}}'
         if text.find(u'{{مقاله برگزیده}}')!=-1:
             alarm+=u'{{قلم رنگ|سفید|خاکستری|مقاله برگزیده}}'
        #----------------------------------------------khord----------------------
         if text.find(u'خرد}}')!=-1:
           alarm+=u'خرد ،'
         if text.find(u'نیاز}}')!=-1:
           alarm+=u'نیازمند به ،'
         if text.find(u'{{طرفداری')!=-1:
             alarm+=u'عدم‌بی‌طرفی ،'
         if text.find(u'{{درستی')!=-1:
             alarm+=u'عدم توافق در درستی ،'
         if text.find(u'{{ادغام')!=-1:
             alarm+=u'ادغام ،'
         if text.find(u'{{در دست ویرایش')!=-1:
             alarm+=u'ویرایش ،'
         if text.find(u'{{ویکی‌سازی')!=-1:
             alarm+=u'ویکی‌سازی ،'
         if text.find(u'{{تمیزکاری')!=-1:
             alarm+=u'تمیزکاری ،'
         if text.find(u'{{لحن')!=-1:
             alarm+=u'لحن ،'
         if text.find(u'{{اصلاح')!=-1:
             alarm+=u'نیازمند ترجمه ،'
         if text.find(u'{{ابهام‌زدایی')!=-1:
             alarm+=u'ابهام‌زدایی ،'
         if text.find(u'{{بازنویسی')!=-1:
             alarm+=u'بازنویسی ،'
         if text.find(u'{{به روز رسانی')!=-1:
             alarm+=u'به‌روز رسانی ،'
         if text.find(u'{{به‌روز رسانی')!=-1:
             alarm+=u'به‌روز رسانی ،'

         
        #--------------------------------------------------------------------------

             
         if alarm[-1]==u'،':
             alarm=alarm[0:-1].strip()   
         interwikis=u'{{subst:formatnum:'+str(len(page.interwiki()) ).strip()+u'}}'
         cats=u'{{subst:formatnum:'+str(len(page.categories(api=True))).strip()+u'}}'
         linked=u'{{subst:formatnum:'+str(len(page.linkedPages())).strip()+u'}}'
         image=u'{{subst:formatnum:'+str(len(page.imagelinks())).strip()+u'}}'
         alarm+=u'||'+interwikis+u'||'+linked+u'||'+cats+u'||'+image+u'||{{حجم مقاله|'+page.title().strip()+u'|15000}}||\n|-\n'
         return alarm
      except wikipedia.IsRedirectPage:
          #page = page.getRedirectTarget()
          #title=str(page.title()).split('#')[0]
          #alarm=u'||'+u'||'+u'||'+u'||'+u'||'+u'||تغییر مسیر به [['+title+u']]\n|-\n '
          #return alarm
          return False
      except:
          #alarm=u'||'+u'||'+u'||'+u'||'+u'||'+u'||این صفحه موجود نیست!\n|-\n'
          return False



for adress in file:  
    del file_content
    file_content=' '
    #'''#----------------------------------------------------computer file---------------------
    try:
        #urllinkmain='C:\Users\Reza\Downloads\data\pagecounts-'
        #yesterday=u'20110915'
        #ulinks=urllinkmain+yesterday+'-'+adress+'.gz'
        #print ulinks+'======================================='
        #yesterday=u'20110915'
        openfile = open('pagecounts-%s-%s.txt' %(yesterday,adress), 'r')
        file_content=openfile.read()
        #f = gzip.open(ulinks, 'rb')
        #file_content = f.read()
        openfile.close()
        del openfile
    
    except:
        continue
    lines=' '
    line=' '
    del lines
    del line
    lines=file_content.split('\n')
    count=0
    del count
    count=0
    try:
        for line in lines:
                if 'fa ' in line[0:3]:
                    if '.css' in  line:
                        continue
                    line=line.replace('.','%')
                    line=line.replace('25','')
                    count+=1
                    urltext=line[3:]
                    #for a in range(0,10):
                    try:
                        urltext=urllib.unquote_plus(urltext).decode('utf8').strip()
                        urltext=urltext.replace('%','.')
                        if urltext.find(u':')!=-1 or urltext.find(u'=')!=-1 or urltext.find(u'.jpg')!=-1 or urltext.find(u'.gif')!=-1 or urltext.find(u'.js')!=-1 or urltext.find(u'.ogg')!=-1:
                            continue
                        
                        if urltext.split(' ')[0] in dict:
                            dict[urltext.split(' ')[0]]=int(dict[urltext.split(' ')[0]])+int(urltext.split(' ')[1])
                        else:
                            dict[urltext.split(' ')[0]]=int(urltext.split(' ')[1])
                            del urltext
    
                    except:
                        print count
                        continue
        
    except Exception as inst:
        print inst
        a=1
    
del count
count=0
inverse= defaultdict( list )
for k, v in dict.items():
    inverse[int(v)].append( k )
del dict
del lines
del adress
del file_content
for k in sorted(inverse, reverse=True):
    if count>5000:
                break
    for i in range(0,len(inverse[k])):
            count+=1
            if count>1500:
                break
            if condition(inverse[k][i].replace('_',' '))==False:
                count-=1
                continue
            text+=u'|{{subst:formatnum:'+str(count)+u'}}||[['+inverse[k][i].replace('_',' ').strip()+u']]||{{subst:formatnum:'+str(k)+u'}}||'+condition(inverse[k][i].replace('_',' '))
            if count==500 or count==1000 or count==1500:
               text=uppage+text.strip()+downpage
               #---------------------------------------------------------wiki upload----------------------
               countf=str(count).replace(u'0',u'۰').replace(u'1',u'۱').replace(u'2',u'۲').replace(u'3',u'۳').replace(u'4',u'۴').replace(u'5',u'۵').replace(u'6',u'۶').replace(u'7',u'۷').replace(u'8',u'۸').replace(u'9',u'۹')
               countl=str(count-499).replace(u'0',u'۰').replace(u'1',u'۱').replace(u'2',u'۲').replace(u'3',u'۳').replace(u'4',u'۴').replace(u'5',u'۵').replace(u'6',u'۶').replace(u'7',u'۷').replace(u'8',u'۸').replace(u'9',u'۹')             
               uptitle=u'ویکی‌پدیا:گزارش دیتابیس/فهرست مقاله‌های پربیننده از %s تا %s/فهرست' %(countl,countf)
               page = wikipedia.Page( wikipedia.getSite( u'fa' ),uptitle)
               page.put(text, u'ربات:به‌روزرسانی ([[وپ:درخواست‌های ربات/فهرست مقاله‌های پربازدید|کد]])', minorEdit = True)
               '''#---------------------------------------------------------computer save--------------------
               with codecs.open( 'page'+str(count)+'.txt',mode = 'w',encoding = 'utf8' ) as f:
                                f.write( text )
               #'''#----------------------------------------------------------------------------------------------
               del text
               text=u' '