Участник:Latitude/Программа по созданию ботостатей

Источники сбора информации для ботозаливки

Что касается сбора информации из других вики-разделов то для этого есть несколько способов. Самый простой, использовать базу данных тульсервера templatetiger (подробнее читай тут нем. или анг.), тут собраны все данные из шаблонов, практически в готовом для дальнейшего использования виде. Примеры;

  • русская-вики, все данные из русского шаблона Река
  • немецкая-вики, все данные из немецкого шаблона «Замок»
  • украинская-вики, все данные из украинского шаблона Коммуны Франции

С помощью фильтра поиска можно сортировать информацию.

Другой, но более сложный, однако лучший т.к. данные шаблона тут актуальные, способ получения нужных данных это

Здесь требуется задать нужную категорию, сохранить файл, открыть, например, с помощью Excel и извлечь нужные данные из шаблонов.

Пояснения и сама программа

Бот берёт из каждого параметра одну строчку и на основании этих данных создаёт ботостатьи. В конце каждого слова parameter стоит определёная буква (parametera, parameterb, parameterc...), их необходимо вставлять в шаблон или текст статьи в виде «" + a + u"», «" + b + u"» или «" + c + u"» (см. пример).

При необходимости можно добавить необходимое количество дополнительных параметров, например для координат или других данных.
Пояснения:

{{НП-Россия
 |статус              = " + e + u"     означает; в эту строчку вставлять данные из параметра «e» (parametere)
 |русское название    = " + b + u"     означает; в эту строчку вставлять данные из параметра «b» (parameterb)
 
# -*- 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"Проект:Заливка новых статей/Булатово",
                u"Проект:Заливка новых статей/Нижнее Абдряшево",
                u"Проект:Заливка новых статей/Северный",

    ]
##2-й параметр (Название в тексте ботостатьи)
parameterb = \
    [
   	       u"Булатово",
                u"Нижнее Абдряшево",
                u"Северный",

    ]

##3-й параметр (Сельсовет, окончание убрано, т.к. в тексте встречаются несколько окончаний -ий, -ому)
parameterc = \
    [
   	       u"Аскаровск",
                u"Гусевск",
                u"Давлетовск",

    ]

##4-й параметр (Район, с окончанием так-же, -ий, -ом)
parameterd = \
    [
   	       u"Абзелиловск",
                u"Альшеевск",
                u"Архангельск",

    ]

##5-й параметр
parametere = \
    [
   	       u"деревня",
                u"село",
                u"город",

    ]

##6-й параметр (Код ОКАТО)
parameterf = \
    [
   	       u"57401005644",
                u"90201804789",
                u"70201804865",

    ]

##7-й параметр (Население)
parameterg = \
    [
   	       u"649",
                u"158",
                u"71",

    ]

##8-й параметр (Почтовый индекс)
parameterh = \
    [
   	       u"7487",
                u"1946",
                u"7855",

    ]


def report(text = ""):
    wikipedia.output(text)


def main():

    site=wikipedia.getSite()

    global tempfile
    tempfile = None

    global page
    page = None
    
## Алфавитное перечисление параметров.
    for a, b, c, d, e, f, g, h  in zip(parametera, parameterb, parameterc, parameterd, parametere, parameterf, parameterg, parameterh):
        page = wikipedia.Page(site, title = (u"" + a))
        if page.exists():
           wikipedia.output(u'Ошибка: статья существует! — ' + page.title())
           continue
        else:
                wikipedia.output(u"Создаю страницу...")

## Каждая отдельная строчка начинается со скобки «u"» и закрывается скобкой «\n" + \», кроме последней - скобка «\n"»
## Начало текста ботостатьи
            
        text =u"{{НП-Россия\n" + \
u" |статус                   = " + e + u" \n" + \
u" |русское название         = " + b + u" \n" + \
u" |оригинальное название    = \n" + \
u" |герб                     = \n" + \
u" |флаг                     = \n" + \
 u" |lat_deg = |lat_min = |lat_sec = \n" + \
 u" |lon_deg = |lon_min = |lon_sec = \n" + \
 u" |CoordAddon = \n" + \
 u" |CoordScale = \n" + \
u" |ЯндексКарта              = \n" + \
u" |размер карты региона     = \n" + \
u" |размер карты района      = \n" + \
u" |регион                   = Урал \n" + \
u" |регион в таблице         = Урал \n" + \
u" |вид района               = \n" + \
u" |район                    = " + d + u"ий район Урала{{!}}" + d + u"ий \n" + \
u" |район в таблице          = \n" + \
u" |вид поселения            = Сельсовет \n" + \
u" |поселение                = " + c + u"ий (" + d + u"ий район){{!}}" + c + u"ий \n" + \
u" |поселение в таблице      = \n" + \
u" |внутреннее деление       = \n" + \
u" |глава                    = \n" + \
u" |дата основания           = \n" + \
u" |первое упоминание        = \n" + \
u" |прежние имена            = \n" + \
u" |статус с                 = \n" + \
u" |площадь                  = \n" + \
u" |высота центра НП         = \n" + \
 u" |население               = " + g + u" \n" + \
 u" |год переписи            = 2010 \n" + \
 u" |плотность               = \n" + \
 u" |агломерация             = \n" + \
 u" |национальный состав     = \n" + \
 u" |конфессиональный состав = \n" + \
 u" |этнохороним             = \n" + \
u" |почтовый индекс          = " + h + u" \n" + \
u" |почтовые индексы         = \n" + \
u" |телефонный код           = \n" + \
u" |цифровой идентификатор   = " + f + u" \n" + \
u" |категория в Commons      = \n" + \
u" |сайт                     = \n" + \
u"}}\n" + \
u" \n" + \
u"'''" + b + u"''' — " + e + u" в [[" + d + u"ий район Урала|" + d + u"ом районе Урала]], относится к " + c + u"ому сельсовету.\n" + \
u"Население на 1 января [[2010 год]]а составляло " + g + u" человек.<ref name='справочник'>Единый электронный справочник муниципальных районов Урала, ст. 59.</ref>\n" + \
u"Почтовый индекс — " + h + u", код ОКАТО — " + f + u".\n" + \
u"\n" + \
u"== Примечания ==\n" + \
u"{{примечания}}\n" + \
u"\n" + \
u"== Ссылки ==\n" + \
u"* [http://www.yandex.ru Совет муниципальных образований Урала].\n" + \
u"\n" + \
u"{{Stub-meta}}\n" + \
u"[[Категория:" + d + u"ий район Урала]]\n"

## Конец текста

        if really:
            try:
                status, reason, data = page.put(newtext = text, comment = u"Описание правки")
            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()