ویکیپدیا:درخواستهای ربات/فهرست مقالههای پربازدید
ظاهر
این ربات برای تهیه فهرست مقالههای پربیننده کاربرد دارد. روش کار آن به این صورت است که در دو مرحله کار میکند
- کد دانلود دیتا بیس:این کد فایلها را دانلود و پس از دریافت مطالب مورد نیاز حذف میکند و به جایشان فایلهای متنی با حجم ۱ مگ در سرور بر جای میگذارد که این فایلها مورد استفاده کد دوم هستند
- کد آنالیز دادهها و ایجاد خروجی فهرستها: این کد در صورت اجرا نشدن کد اول کار نمیکند.
روش کار
[ویرایش]برای کار کردن با ربات فقط کدهای ۱ و ۲ را به ترتیب روی تول سرور اجرا کنید این ربات نیازمند اینترنت پر سرعت است چون باید ۱ گیگا بایت فایل دانلود نماید. از روی تولسرور با سرعت ۹ مگا بایت در ثانیه دانلود میشود.
نکته
[ویرایش]- با تغییر در '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' '