# -*- coding: utf-8 -*-
 
# Приклад скрипту по створенню статей стабів з Категорії:Населені пункти Росії.
# 
 
really = True
 
import sys, os
import time, datetime
import codecs
import socket
import re
import wikipedia, config
site=None
 
#
##1-й параметр (Назва статі)
parametera = \
    [
               u"Харіно (Сафоновський район)"
 
    ]
 
##2-й параметер (Назва НП скорочена)
parameterb = \
    [
        u"Харіно"
     ]   
 
##3-й параметр (Іншомовна повна)
parameterc = \
    [
               u"Харино (Сафоновский район)"
 
    ]
 
##4-й параметр (Іншомовна назва скорочена)
parameterd = \
    [
        u"Харино"
     ]   
 
##5-й параметр (тип НП - при створені статей про НП Росії враховуйте що город це - місто , поселек - це селище , деревня - перекладається як присілок , але аж ніяк не село , село і є село .)
parametere = \
    [
        u"присілок"
    ]
 
##6-й параметр (субєкт РФ)
parameterf = \
    [
       u"Смоленська область" 
    ]   
 
##7-й параметр (субєкт РФ родовий відмінок)
parameterg = \
    [
        u"Смоленської області"
     ]
 
##8-й параметр (Район)
parameterh = \
    [
               u"Сафоновський район",
 
    ]
 
##9-й параметр (Район родовий відмінок)
parameteri = \
    [
               u"Сафоновського району",
 
    ]
 
##10-й параметр (Сільське поселення)
parameterj = \
    [
               u"Казулінське сільське поселення",
 
    ]
 
##11-й параметр (Сільське поселення родовий відмінок)
parameterk = \
    [
               u"Казулінського сільського поселення",
 
    ]
 
##12-й параметр (Код ЗКАТУ)
##parameterl = \
##    [
##               u"",
##    ]
 
##13-й параметр (Посилання на сайт ЗКАТУ)
##parameterm = \
##    [
##        u""
##    ]    
 
##14-й параметр (Населення)
parametern = \
    [
            u"16 осіб ([[2007]] рік)", 
    ]
 
##15-й параметр (Площа)
##parametero = \
##    [
##        u""
##    ]   
 
##16-й параметр (густота населення)
##parameterq = \
##    [
##        u""
##    ]    
 
##17-й параметр (поштовий індекс)
##parameterp = \
##    [
##        u""
##    ]    
 
##18-й параметр (посилання на сайт про поштовий індекс)
parameterr = \
    [
        u"http://www.moscowindex.ru/rus/67018/"
    ]    
 
##19-й параметр (телефонний код)
##parameters = \
##    [
##        u"48135"
##    ]    
 
##20-й параметр (координати) 
##parametert = \
##    [
##        "{{coord||||N||||E|scale:30000|display=inline,title}}"
##    ]    
 
##21-й параметр (часовий пояс)
parameteru = \
    [
        u"[[UTC+4]]"
    ]
 
##22-й параметр (висота НП, якщо є)
##parameterv = \
##    [
##        u""
##    ]    

def report(text = ""):
    wikipedia.output(text)
 
## Функція, що повертає текст статті «nameru» з рувікі
def articleread (nameru):
    fromsite = wikipedia.getSite('ru')
    pageru = wikipedia.Page(fromsite, nameru)
    txt = pageru.get()
    return txt
 
def despace (txt):
    t=txt
    t=txt.replace(u"</ ref>", u"</ref>")
    while t.find(u"<ref>",0)>=0:
        mi=t.find(u"<ref>",0)
        ma=t.find(u"</ref>",mi)+6
        t=t.replace(t[mi:ma], u"")
    t=t.strip()
    t=t.strip(u"\n")
    return t
 
## Функція, що повертає значення поля «field» з шаблона «template»
def fread (txt, template, field):
    t=u""
    txt.replace(u"| "+field, u"|"+field)
    if (txt.find(u"{{"+template,0)>=0) and ((txt.find(u"|"+field,0)>=0)):
        tablestart=txt.find(u"{{"+template,0)
        mi=txt.find(u"|"+field, tablestart)
        mi=txt.find(u"=",mi)+1
        ma=txt.find(u"|",mi)
        t=txt[mi:ma]
        while (t.count(u"[[")!=t.count(u"]]")) or (t.count(u"{{")!=t.count(u"}}")):
            ma=txt.find(u"|",ma+1)
            t=txt[mi:ma]
        if t.count(u"{{")!=t.count(u"}}") or t.rfind(u"}}", len(t))<t.rfind(u"{{", len(t)):
            ma=t.rfind(u"}}", len(t))
            t=t[0, ma]
        t=despace(t)
    return t 
 
def main():
 
    site=wikipedia.getSite()
 
    global tempfile
    tempfile = None
 
    global page
    page = None
 
## Алфавітне перерахування параметрів.
    for a, b, c, d, e, f, g, h, i, j, k, n, r, u, in zip(parametera, parameterb, parameterc, parameterd, parametere, parameterf, parameterg, parameterh, parameteri, parameterj, parameterk, parametern, parameterr, parameteru):
        page = wikipedia.Page(site, title = (u"" + a))
        if page.exists():
           wikipedia.output(u'WE HAVE SOME PROBLEMS THIS PAGE ARE CREATING BEFORE US! — ' + page.title())
           continue
        else:
                wikipedia.output(u"Creating of page...")
 
 
## Кожна окрема строка починається зі скобки «u"» і закінчується скобкою «\n" + \», крім останьої - скобка «\n"»
## Початок тексту статі стаба
 
        sss=articleread(c)
 
        l=fread(sss, u"НП-Россия", u"цифровой идентификатор")
 
        o=fread(sss, u"НП-Россия", u"площадь") 
 
        q=fread(sss, u"НП-Россия", u"плотность") 
 
        p=fread(sss, u"НП-Россия", u"почтовый индекс")
 
        s=fread(sss, u"НП-Россия", u"телефонный код")
 
        coord=""
        if fread(sss, u"НП-Россия", u"lat_deg")!=u"":
            coord+="{{coord|"+ fread(sss, u"НП-Россия", u"lat_deg") + u"|" + fread(sss, u"НП-Россия", u"lat_min") + u"|"
            coord+=fread(sss, u"НП-Россия", u"lat_sec") + u"|N|"
            coord+=fread(sss, u"НП-Россия", u"lon_deg") + u"|" + fread(sss, u"НП-Россия", u"lon_min") + u"|"
            coord+=fread(sss, u"НП-Россия", u"lon_sec") + u"|E|scale:30000|display=inline,title}}"
        t=coord
 
        v=fread(sss, u"НП-Россия", u"высота центра НП")
 
        text =u"{{Населений пункт Росії\n" + \
u" |тип                   =" + e + u"  \n" + \
u" |тип_род               =  \n" + \
u" |назва                 =" + b + u" \n" + \
u" |назва ін.             ={{lang-ru|" + d +u"}}   \n" + \
u" |прапор                = \n" + \
u" |опис прапор           = \n" + \
u" |герб                  = \n" + \
u" |опис герба            = \n" + \
u" |розташування          = \n" + \
u" |опис розташування     = \n" + \
u" |зоюраження            = \n" + \
u" |зображення_розмір     = \n" + \
u" |зображення_підпис     = \n" + \
u" | mapx                 = \n" + \
u" | mapy                 = \n" + \
u" |суб'єкт РФ            =[[" + f + u"]]       \n" + \
u" |район                 =[[" + h + u"]] \n" + \
u" |міський округ         = \n" + \
u" |поселення             =[[" + j + u"]] \n" + \
u" |рада                  = \n" + \
u" |код ЗКАТУ             =" + l + u"  <ref>[http://www.ocato.ru/okato.php?code=" + l + u" Код ЗКАТУ для населених пунктів " + i + u"]{{ref-ru}}</ref>\n" + \
u" |засноване             = \n" + \
u" |перша згадка          = \n" + \
u" |завойоване            = \n" + \
u" |статус                = \n" + \
u" |поділ                 = \n" + \
u" |населення             =" + n + u" \n" + \
u" |площа                 =" + o + u" \n" + \
u" |ref-площа             = \n" + \
u" |густота               =" + q + u" \n" + \
u" |поштові індекси       =" + p + u" <ref>[" + r + u" Поштові індекси населених пунктів " + i + u"]{{ref-ru}}</ref>  \n" + \
u" |телефонний код        =" + s + u" \n" + \
u" |координати            =" + t + u" \n" + \
u" |часовий пояс          =" + u + u" \n" + \
u" |висота                =" + v + u" \n" + \
u" |водойма               = \n" + \
u" |станція               = \n" + \
u" |відстань              = \n" + \
u" |залізниця р           = \n" + \
u" |залізниця р           = \n" + \
u" |автошлях р            = \n" + \
u" |автошлях р            = \n" + \
u" |фізична р             = \n" + \
u" |фізична р             = \n" + \
u" |залізниця о           = \n" + \
u" |залізниця о           = \n" + \
u" |автошлях о            = \n" + \
u" |автошлях о            = \n" + \
u" |фізична о             = \n" + \
u" |фізична о             = \n" + \
u" |залізниця с           = \n" + \
u" |залізниця с           = \n" + \
u" |автошлях с            = \n" + \
u" |автошлях с            = \n" + \
u" |фізична с             = \n" + \
u" |фізична с             = \n" + \
u" |схема                 = \n" + \
u" |міста-побратими       = \n" + \
u" |день міста            = \n" + \
u" |катойконіми           = \n" + \
u" |адреса                = \n" + \
u" |веб-сторінка          = \n" + \
u" |голова                = \n" + \
u" |ремарки               = \n" + \
u" |карта розташування1   =Росія "+ f + u" \n" + \
u"}}\n" + \
u" \n" + \
u"'''" + b + u"''' ({{lang-ru|" + d + u"}})  — [[" + e + u"]] [[" + h + u"|" + i + u"]] [[" + f + u"|" + g + u"]] [[Російська Федерація|Росії]]. Входить до складу [[" + j + u"|" + k + u"]].\n" + \
u"Населення —  " + n + u". \n" + \
u" \n" + \
u"== Примітки ==\n" + \
u"{{reflist}}\n" + \
u"\n" + \
u"{{" + j + "}} \n" + \
u"{{Smolen-obl-geo-stub}}\n" + \
u"\n" + \
u"[[Категорія:Населені пункти " + i + u"]]\n" + \
u"\n" + \
u"[[ru:" + c + u"]]\n"
 
## Кінець тексту
 
        if really:
            try:
                status, reason, data = page.put(newtext = text, comment = u"Заливка статей. Допоможіть з перекладом назв [[User:TeoBot/Заливка НП Росії]]")
            except wikipedia.EditConflict, error:
                wikipedia.output(u'Помилка: %s. Зупинено.' % error)
            except (socket.error, IOError, wikipedia.PageNotSaved), error:
                wikipedia.output(u'Помилка: %s. Зупинено.' % error)
            else:
                print status, reason
                continue
 
if __name__ == "__main__":
    try:
        main()
    except:
        wikipedia.stopme()
        raise
    else:
        wikipedia.stopme()
 
    wikipedia.stopme()