Участник:Бот-заполнитель Товарища Аарона
Перейти к навигации
Перейти к поиску
Аварийное выключение бота
Смотрителям: Нажмите на кнопку, если бот делает что-то не то.
Это бот Товарища Аарона который облегчает создание статей.
Как работает[править]
Бот проходится по категории в Википедии, Рисованные мультфильмы СССР и если нет статьи в ЦП, но есть статья в категории на Википедии, то создаёт подстраницу, и заполняет параметры шаблона Мультфильм беря информацию из Викиданных. Потом владелец проверяет и публикует эти статьи.
Исходный код[править]
import pywikibot
from pywikibot import pagegenerators
wiki_site = pywikibot.Site("ru", "wikipedia")
cp_site = pywikibot.Site("ru", "cyclowiki")
repo = wiki_site.data_repository()
category = pywikibot.Category(
wiki_site,
"Категория:Рисованные мультфильмы СССР"
)
pages = pagegenerators.CategorizedPageGenerator(category)
limit = 1
count = 0
def get_labels(item, property_id):
if property_id not in item.claims:
return ""
values = []
for claim in item.claims[property_id]:
target = claim.getTarget()
if isinstance(target, pywikibot.ItemPage):
target.get()
label = target.labels.get('ru') or target.labels.get('en')
if label:
values.append(label)
else:
values.append(str(target))
return ", ".join(values)
for page in pages:
if count >= limit:
break
title = page.title()
cp_page = pywikibot.Page(cp_site, title)
if cp_page.exists():
continue
try:
item = pywikibot.ItemPage.fromPage(page)
item.get()
except:
continue
director = get_labels(item, "P57")
writer = get_labels(item, "P58")
composer = get_labels(item, "P86")
country = get_labels(item, "P495")
studio = get_labels(item, "P272")
year = ""
if "P577" in item.claims:
date = item.claims["P577"][0].getTarget()
year = str(date.year)
wikidata_link = f"https://www.wikidata.org/wiki/{item.id}"
# -------- Краткое описание --------
intro = f"'''{title}''' — советский рисованный мультипликационный фильм"
if year:
intro += f" {year} года"
intro += " производства."
if director:
intro += f" Режиссёр: {director}."
if writer:
intro += f" Сценарист: {writer}."
if composer:
intro += f" Композитор: {composer}."
# -------- Шаблон --------
fields = []
if year:
fields.append(f"| Год = {year}<ref name='wd' />")
if director:
fields.append(f"| Режиссёр = {director}<ref name='wd' />")
if writer:
fields.append(f"| Сценарист = {writer}<ref name='wd' />")
if composer:
fields.append(f"| Композитор = {composer}<ref name='wd' />")
if country:
fields.append(f"| Страна = {country}<ref name='wd' />")
if studio:
fields.append(f"| Студия = {studio}<ref name='wd' />")
template = "{{Мультфильм\n| Название = " + title + "\n" + "\n".join(fields) + "\n}}"
text = template + "\n\n" + intro + f"""
== Источники ==
<ref name="wd">[{wikidata_link} Информация о мультфильме на Викиданных]</ref>
"""
subpage_title = f"Участник:Товарищ_Аарон/Для_бота/{title}"
subpage = pywikibot.Page(cp_site, subpage_title)
if subpage.exists():
continue
subpage.text = text
subpage.save(summary="Создание черновика с полной карточкой из Wikidata")
print("Создано:", subpage_title)
count += 1
print("Готово.")