Участник:BsivkoBot/Подключение к проекту астрономииОписаниеМотивацияПодключение к проекту астрономии происходит посредством добавления на странице обсуждения (СО) шаблона {{Статья проекта Астрономия}}. Данный шаблон зачастую не проставляют для статей соответствующей тематики. Помимо этого, не указывают уровень или важность. В то же время, данное действие можно в большинстве случаев сделать автоматически, например, распознав в статье астрономический объект. Задачей бота является выполнение этого действия без участия участников. По обсуждению для случаев, если размер статьи менее 3000 байт и уровень не указан, то проставляется IV уровень. РеализацияБот анализирует, есть ли на странице один из шаблонов {{галактика}}, {{звезда}}, {{экзопланета}}, {{малая планета}} или их перенаправления. Если есть, то СО статьи подлежит обработке. Если страница отсутствует, то она создаётся с содержимым Для параметра «уровень»: если размер статьи менее 3000 байт и уровень не указан, то проставляется IV уровень. Дополнительно подключение по сканированию категории астрономии с исключением веток 'Мир (Земля)', 'Пифагореизм', 'Солнечная система в культуре и искусстве', 'Солнечная энергия', 'Метафизическая космология', 'Геологическая история Земли', 'Климат', 'Континенты', 'Науки о Земле', 'Оболочки Земли', 'Строение Земли', 'Солнечный загар', 'Солнце в культуре', 'Солнцезащитные очки', 'Религиозная космология', 'Лунно-солнечные календари', 'Солнце в культуре', 'Википедия:Статьи о космических объектах без иллюстраций', 'Луна в культуре и искусстве', 'Загрязнение атмосферы Земли', 'Оболочки астрономических объектов', 'Атмосфера Земли', 'Индийская астрология', 'Производители телескопов', 'Оболочки планет', 'Астрономия в Китае', 'Неакадемические направления исследований в астрономии', 'Карл Фридрих Гаусс', 'Автоматические межпланетные станции', 'Геостационарные спутники Земли', 'Физика плазмы', 'Чёрные дыры в фантастике', 'Вымышленные планеты' . Исходный кодimport json import random import pywikibot # args - https://www.mediawiki.org/wiki/Manual:Pywikibot/Page_Generators from pywikibot import pagegenerators from bot_logging.log import log_string from processing.astro_scan import astro_scan from processing.loop_jobs_handler import handle_pages from so_page.astro_files import set_new_astro_titles, load_all_astro_titles, set_all_astro_titles from so_page.astro_list import astro_list, astro_list2 from wiki_requests.redirects import load_all_cache from wiki_requests.site import ru_site NUMBER_TO_PROCESS = -1 # or INFINITE_NUMBER load_all_cache() # alternative - https://petscan.wmflabs.org/ load_all_cache() exclude = ['Мир (Земля)', 'Пифагореизм', 'Астероиды по алфавиту', 'Галактики по алфавиту', 'Звёзды по алфавиту', 'Объекты «Нового общего каталога»', 'Экзопланеты по алфавиту', 'Солнечная система в культуре и искусстве', 'Солнечная энергия', 'Метафизическая космология', 'Геологическая история Земли', 'Климат', 'Континенты', 'Науки о Земле', 'Оболочки Земли', 'Строение Земли', 'Солнечный загар', 'Солнце в культуре', 'Солнцезащитные очки', 'Религиозная космология', 'Лунно-солнечные календари', 'Солнце в культуре', 'Википедия:Статьи о космических объектах без иллюстраций', 'Луна в культуре и искусстве', 'Загрязнение атмосферы Земли', 'Оболочки астрономических объектов', 'Атмосфера Земли', 'Индийская астрология', 'Производители телескопов', 'Оболочки планет', 'Астрономия в Китае', 'Неакадемические направления исследований в астрономии', 'Карл Фридрих Гаусс', 'Автоматические межпланетные станции', 'Геостационарные спутники Земли', 'Физика плазмы', 'Чёрные дыры в фантастике', 'Вымышленные планеты'] def all_in_category_rec(category, titles, scanned, new_titles): if category in exclude: return titles, scanned, new_titles if 'скусственные спутники' in category: return titles, scanned, new_titles cat = pywikibot.Category(ru_site(), 'Категория:' + category) gen = pagegenerators.CategorizedPageGenerator(cat) for page in gen: title = page._link._text if title in titles: continue if not (title in new_titles): new_titles.append(title) log_string(str(len(new_titles)) + ":" + title) if category in scanned: return titles, scanned, new_titles scanned.append(category) cat = pywikibot.Category(ru_site(), 'Категория:' + category) gen = pagegenerators.SubCategoriesPageGenerator(cat) for page in gen: title = page._link._text if title[:10] == "Категория:": name = title[10:] if name in scanned: continue if name != category: log_string("Категория:" + name + " из " + category) titles, scanned, new_titles = all_in_category_rec(name, titles, scanned, new_titles) return titles, scanned, new_titles titles = load_all_astro_titles() scanned = [] new_titles = [] titles, scanned, new_titles = all_in_category_rec('Астрономия', titles, scanned, new_titles) log_string("Articles in set: " + str(titles)) random.shuffle(new_titles) set_new_astro_titles(new_titles) log_string("New articles in set: " + str(new_titles)) context = { 'save': True, 'force': False, 'rdb': False } handle_pages(pywikibot.Site(), new_titles, NUMBER_TO_PROCESS, context=context) for i in new_titles: titles.append(i) set_all_astro_titles(titles) with open("all_astro.json", 'w') as outfile: json.dump(titles, outfile) outfile.close() ТестированиеСостояние и развитие
Обсуждение |