ویکی‌پدیا:درخواست‌های ربات/دریافت پیوندهای درون جعبه توسط دامپ

از ویکی‌پدیا، دانشنامهٔ آزاد
# -*- 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)