ویکیپدیا:درخواستهای ربات/دریافت پیوندهای درون جعبه توسط دامپ
ظاهر
# -*- coding: utf-8 -*-
#
#http://dumps.wikimedia.your.org/fawiki/
#http://dumps.wikimedia.your.org/fawiki/20150325/fawiki-20150325-pages-meta-current.xml.bz2
#urllinkmain =u'https://dumps.wikimedia.org/fawiki/latest/fawiki-latest-pages-articles.xml.bz2'
import wikipedia, xmlreader, codecs, re,string
import os
data_d,data_o,data_s,data_b=u'\n',u'\n',u'\n',u'\n'
bot_adress="/data/project/Yourbot/"
TheDay='20150702'
boxes=[u'جعبه اطلاعات دهستان ایران', u'جعبه دهستان ایران']
def boxfind(text_en):
text_en=re.sub("(\{\{(?:[Tt]emplate:|)Infobox ship begin.*?)(\}\})(\s*?\{\{)","\1\3",text_en,re.IGNORECASE)
text_en=re.sub("(\}\}\r?\n?\{\{(?:[Tt]emplate:|)Infobox ship (?:career|characteristics|class overview|image)\r?\n)","",text_en,re.IGNORECASE)
text_en=text_en.replace(u'{{ ',u'{{').replace(u'{{ ',u'{{').replace(u'{{template:',u'{{').replace(u'{{Template:',u'{{')
lines=text_en.split('\n')
start=False
box=u'\n'
diff=1
linebaz,linebasteh=0,0
for our_box in boxes:
our_box=our_box.strip()
for line in lines:
if line==u'':
continue
if line.find(u'{{'+our_box)!=-1 :
start=True
linebaz,linebasteh=0,0
box+=u'{{'+our_box+line.split(u'{{'+our_box)[1]+'\n'
linebaz += string.count( line,"{{" )
linebasteh += string.count( line,"}}" )
diff=linebaz-linebasteh
continue
if start==True and diff!=0:
linebaz += string.count( line,"{{" )
linebasteh += string.count( line,"}}" )
diff=linebaz-linebasteh
box+=line+'\n'
if diff==0 and start==True:
break
return box
urllinkmain='http://dumps.wikimedia.your.org/fawiki/%s/fawiki-%s-pages-meta-current.xml.bz2' %(TheDay,TheDay)
print urllinkmain
os.system('wget '+urllinkmain +" "+bot_adress+"fawiki-"+TheDay+"-pages-meta-current.xml.bz2")
dump = xmlreader.XmlDump(bot_adress+"pywikipedia/fawiki-"+TheDay+"-pages-meta-current.xml.bz2")
pre,noinclude,includeonly,tags1,tags2=u'\n',u'\n',u'\n',u'\n',u'\n'
for entry in dump.new_parse():
box_text=u''
if entry.ns =='0':
text=entry.text.replace(u' /',u'/').replace(u'/ ',u'/').replace(u'< ',u'<').replace(u' >',u'>')
if u'جعبه اطلاعات دهستان ایران' in text or u'جعبه دهستان ایران' in text:
text=text.replace(u'\r',u'')
try:
box_text= re.findall(ur'(\{\{\s*(جعبه اطلاعات دهستان ایران|جعبه دهستان ایران)[_\s](?:\{\{.*?\}\}|[^\}])*\}\})',text, re.VERBOSE | re.DOTALL)
if not box_text:
box_text= re.findall(ur'(\{\{\s*(جعبه اطلاعات دهستان ایران|جعبه دهستان ایران)[_\s](?:\{\{.*?\}\}|[^\}])*\}\})',text, re.DOTALL)
box_text=box_text[0][0].strip()
except:
pass
if not box_text:
box_text=boxfind(text)
if box_text.strip():
box_text=re.sub(ur'\<ref(.*?)\/ref\>',ur"", box_text, re.S)
box_text=re.sub(ur'\<ref(.*?)\/>',ur"", box_text, re.S)
box_text=re.sub(ur'\s*\=\s*',ur"=", box_text)
dehestan,bakhsh,shahrestan,ostan=u'',u'',u'',u''
if u'دهستان=' in box_text:
dehestan=box_text.split(u'دهستان=')[1].split(u'\n')[0].split(u'|')[0].split(u'}')[0].split(u'<')[0].strip()
if u'شهرستان=' in box_text:
shahrestan=box_text.split(u'شهرستان=')[1].split(u'\n')[0].split(u'|')[0].split(u'}')[0].split(u'<')[0].strip()
if u'استان=' in box_text:
ostan=box_text.split(u'استان=')[1].split(u'\n')[0].split(u'|')[0].split(u'}')[0].split(u'<')[0].strip()
if u'بخش=' in box_text:
bakhsh=box_text.split(u'بخش=')[1].split(u'\n')[0].split(u'|')[0].split(u'}')[0].split(u'<')[0].strip()
if dehestan:
if not u'#[[دهستان '+dehestan+u']]' in data_d:
data_d+=u'#[[دهستان '+dehestan+u']]\n'
wikipedia.output(dehestan)
if bakhsh:
if not u'#[[بخش '+bakhsh+u']]' in data_b:
data_b+=u'#[[بخش '+bakhsh+u']]\n'
wikipedia.output(bakhsh)
if shahrestan:
if not u'#[[شهرستان '+shahrestan+u']]' in data_s:
data_s+=u'#[[شهرستان '+shahrestan+u']]\n'
wikipedia.output(shahrestan)
if ostan:
if not u'#[[استان '+ostan+u']]' in data_o:
data_o+=u'#[[استان '+ostan+u']]\n'
wikipedia.output(ostan)
else:
continue
wikipedia.output(u'-------------'+entry.title+u'-------------')
with codecs.open(bot_adress+u'zz_deh infobox.txt' ,mode = 'w',encoding = 'utf8' ) as f:
f.write(data_d)
with codecs.open(bot_adress+u'zz_bakh infobox.txt' ,mode = 'w',encoding = 'utf8' ) as f:
f.write(data_b)
with codecs.open(bot_adress+u'zz_shar infobox.txt' ,mode = 'w',encoding = 'utf8' ) as f:
f.write(data_s)
with codecs.open(bot_adress+u'zz_ost infobox.txt' ,mode = 'w',encoding = 'utf8' ) as f:
f.write(data_o)