Участник: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()
|