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

از ویکی‌پدیا، دانشنامهٔ آزاد
#!/usr/bin/python
# -*- coding: utf-8  -*-
# Reza(User:reza1615), 2013
#
# Distributed under the terms of MIT License (MIT)
version=u'2.0'
import re,codecs
import pywikibot

faSite = pywikibot.Site('fa')
page_lists=[u"ویکی‌پدیا:فهرست_یادمان‌های_ملی_ایران/فارس"]
def check_page(page_title):
    fa_text=u''
    try:
        mypage=pywikibot.Page(faSite,page_title)
        fa_text = mypage.get()
        page_title=mypage.title()
    except pywikibot.IsRedirectPage:
        mypage=mypage.getRedirectTarget()
        try:
            fa_text=mypage.get()
            page_title=mypage.title()
        except:
            pywikibot.output(u"The page %s doesn't exist, skip!" % mypage.title())

    except:
        pywikibot.output(u'\03{lightred}Could not open page\03{default}'+page_title)
    return page_title,fa_text

def get_image(fa_text):
    fa_text=fa_text.replace(u'[[تصویر:',u'[[پرونده:').replace(u'[[file:',u'[[پرونده:').replace(u'[[File:',u'[[پرونده:')
    myimage2=u''
    myimage=re.findall(ur'\| *تصویر *\=(.*?)[\|\n]',fa_text)
    if myimage:
        myimage2=myimage[0].split(u'|')[0].strip()
    if not myimage2 and (u'[[پرونده:' in fa_text):
        myimage2=fa_text.split(u'[[پرونده:')[1].split(u'|')[0].split(u']]')[0].strip()
    myimage2=myimage2.replace(u'[[پرونده:',u'').split(u'|')[0].strip()
    return myimage2

def get_coord(fa_text):
    my_coord1,my_coord2,my_coord=u'',u'',u''
    
    fa_text2=fa_text.replace(u'    =',u'=').replace(u'   =',u'=').replace(u'  =',u'=').replace(u' =',u'=').replace(u' =',u'=').replace(u' =',u'=').replace(u'{{Coord',u'{{coord')
    fa_text2=fa_text2.replace(u'عرض جغرافیایی=',u'عرض‌جغرافیایی=').replace(u'طول جغرافیایی=',u'طول‌جغرافیایی=')
    if u'عرض‌جغرافیایی=' in fa_text2:
        my_coord1=fa_text2.split(u'عرض‌جغرافیایی=')[1].split(u'\n')[0].split(u'|')[0].split(u'}')[0].strip()
    if u'طول‌جغرافیایی=' in fa_text2:
        my_coord2=fa_text2.split(u'طول‌جغرافیایی=')[1].split(u'\n')[0].split(u'|')[0].split(u'}')[0].strip()
    if not my_coord1 and u'{{coord' in fa_text2:
        my_coord=u'{{coord'+fa_text2.split(u'{{coord')[1].split(u'}}')[0].strip()+u'}}'
    
    return my_coord1,my_coord2,my_coord


def get_page(mypage):
    mypage=pywikibot.Page(faSite,mypage)
    mypage_text=mypage.get()
    mypage_text=mypage_text.replace(u'\r',u'').replace(u'عکس= }}',u'عکس=}}').replace(u'عکس= }}',u'عکس=}}')
    mypage_text=mypage_text.replace(u'\r',u'').replace(u'طول جغرافیایی=  |',u'طول جغرافیایی= |').replace(u'طول جغرافیایی=|',u'طول جغرافیایی= |')
    mypage_text=mypage_text.replace(u'\r',u'').replace(u'عرض جغرافیایی=  |',u'عرض جغرافیایی= |').replace(u'عرض جغرافیایی=|',u'عرض جغرافیایی= |')
    mypage_text_old=mypage_text
    mylist=re.findall(ur'(\{\{ردیف_یادمان_ایران\|شناسه\=(.*?)\|توضیح\=(.*?)\|)',mypage_text)
    for item in mylist:
        pywikibot.output(u"+++++++++++++++++")
        total_text=item[0]
        id=item[1].strip()
        page_name=item[2].strip()
        page_title,fa_text=check_page(page_name)
        checkbot=False
        if total_text in mypage_text and fa_text:
            line_text=total_text+mypage_text.split(total_text)[1].split(u'}}')[0].strip()+u'}}'
            line_text_old=line_text

            my_image=get_image(fa_text)
            if my_image and u'عکس=}}' in line_text:
                line_text=line_text.replace(u'عکس=}}',u'عکس='+my_image+u'}}')
                checkbot=True
            my_coord1,my_coord2,my_coord=get_coord(fa_text)
            pywikibot.output(my_coord)
            pywikibot.output(my_coord1)
            pywikibot.output(my_coord2)
            if my_coord1 and my_coord2 and u'عرض جغرافیایی= |' in line_text:
                line_text=line_text.replace(u'عرض جغرافیایی= |',u'عرض جغرافیایی='+my_coord1+u'|')
                line_text=line_text.replace(u'طول جغرافیایی= |',u'طول جغرافیایی='+my_coord2+u'|')
                checkbot=True
            if my_coord and u'عرض جغرافیایی= |' in line_text and not u'مختصات=' in line_text:
                my_coord=my_coord.replace(u'display=title',u'display=inline').replace(u'display=inline,title',u'display=inline').replace(u'display=title,inline',u'display=inline')
                line_text=line_text.replace(u'طول جغرافیایی= |',u'مختصات='+my_coord.replace(u'display=title',u'display=inline')+u'|طول جغرافیایی= |')
                checkbot=True
            line_text=line_text.replace(page_name,page_title)
            if line_text_old!=line_text:
                pywikibot.output(u"line_text=" +line_text)
                if checkbot:
                    mypage_text=mypage_text.replace(line_text_old,line_text[:-2]+u'|ربات=بله}}')
                else:
                    mypage_text=mypage_text.replace(line_text_old,line_text)
    mypage_text=re.sub(u'\<ref\>.*?\<\/ref\>',u'',mypage_text)
    try:
        if mypage_text_old!=mypage_text:
            mypage.put(mypage_text,u'ربات: جایگزین تغییرمسیر+ افزودن پرونده از مقاله + افزودن مختصات از مقاله')
    except:
        wikipedia.output(u"error on save")
        with codecs.open('zz_yadkard.txt' ,mode = 'a',encoding = 'utf8' ) as f:
            f.write(u'\n--------------------'+mypage.title()+u'----------\n'+mypage_text)

for mypage in page_lists:
    get_page(mypage)