mirror of
https://github.com/ada-dmitry/osint_parser_ada.git
synced 2026-09-24 01:10:20 +00:00
feat: Обновить README и архитектуру проекта, добавить поддержку режима cron и улучшить интерфейс командной строки
This commit is contained in:
@@ -3,10 +3,21 @@
|
||||
Парсер реестров СРО ААС (Саморегулируемая организация аудиторов)
|
||||
|
||||
Автор: [ada]
|
||||
|
||||
Использование:
|
||||
Интерактивный режим:
|
||||
python main.py
|
||||
|
||||
Режим cron (автоматический):
|
||||
python main.py --registry auditors --mode quick
|
||||
python main.py --registry organizations --mode full
|
||||
python main.py -r certificates -m quick
|
||||
python main.py --list # Показать доступные реестры
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import argparse
|
||||
from datetime import datetime
|
||||
|
||||
from config import REGISTRIES
|
||||
@@ -29,6 +40,66 @@ def print_banner():
|
||||
print(banner)
|
||||
|
||||
|
||||
def get_registry_map():
|
||||
"""Получить маппинг реестров"""
|
||||
return {
|
||||
"1": ("auditors", "Реестр аудиторов и индивидуальных аудиторов"),
|
||||
"2": ("organizations", "Реестр аудиторских организаций"),
|
||||
"3": ("certificates", "Реестр квалификационных аттестатов"),
|
||||
"4": ("individual_auditors", "Перечень индивидуальных аудиторов"),
|
||||
"5": ("training_centers", "Реестр учебно-методических центров"),
|
||||
"6": ("oppk_confirmation", "Сведения о подтверждении ОППК"),
|
||||
"7": ("ozo_training", "Сведения о прохождении ПК руководителем"),
|
||||
"8": ("excluded_auditors", "Реестр исключенных аудиторов"),
|
||||
"9": ("excluded_organizations", "Реестр исключенных организаций"),
|
||||
"10": ("cancelled_certificates", "Реестр аннулированных аттестатов"),
|
||||
"11": ("excluded_training_centers", "УМЦ исключенные из реестра"),
|
||||
"12": ("disciplinary_auditors", "Дисциплинарные меры к аудиторам"),
|
||||
"13": ("disciplinary_organizations", "Дисциплинарные меры к организациям"),
|
||||
"14": ("audit_networks", "Перечень сетей аудиторских организаций"),
|
||||
}
|
||||
|
||||
|
||||
def list_registries():
|
||||
"""Вывести список доступных реестров"""
|
||||
print("\n" + "=" * 60)
|
||||
print("ДОСТУПНЫЕ РЕЕСТРЫ ДЛЯ --registry ПАРАМЕТРА:")
|
||||
print("=" * 60)
|
||||
|
||||
registry_map = get_registry_map()
|
||||
|
||||
print("\n📋 ДЕЙСТВИТЕЛЬНЫЕ ЧЛЕНЫ:")
|
||||
print(" auditors - Реестр аудиторов")
|
||||
print(" organizations - Реестр организаций")
|
||||
print(" certificates - Квалификационные аттестаты")
|
||||
print(" individual_auditors - Индивидуальные аудиторы")
|
||||
print(" training_centers - Учебно-методические центры")
|
||||
print(" oppk_confirmation - Подтверждение ОППК")
|
||||
print(" ozo_training - Прохождение ПК руководителем")
|
||||
|
||||
print("\n❌ ИСКЛЮЧЕННЫЕ ЧЛЕНЫ:")
|
||||
print(" excluded_auditors - Исключенные аудиторы")
|
||||
print(" excluded_organizations - Исключенные организации")
|
||||
print(" cancelled_certificates - Аннулированные аттестаты")
|
||||
print(" excluded_training_centers - Исключенные УМЦ")
|
||||
|
||||
print("\n⚠️ ДИСЦИПЛИНАРНЫЕ МЕРЫ:")
|
||||
print(" disciplinary_auditors - Меры к аудиторам")
|
||||
print(" disciplinary_organizations - Меры к организациям")
|
||||
|
||||
print("\n🌐 СЕТИ:")
|
||||
print(" audit_networks - Сети организаций")
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print("Режимы (--mode):")
|
||||
print(" quick - Быстрый (первая страница)")
|
||||
print(" full - Полный (все страницы)")
|
||||
print("=" * 60)
|
||||
print("\nПример:")
|
||||
print(" python main.py --registry auditors --mode quick")
|
||||
print(" python main.py -r organizations -m full\n")
|
||||
|
||||
|
||||
def print_menu():
|
||||
"""Вывод главного меню"""
|
||||
print("\n" + "=" * 60)
|
||||
@@ -245,26 +316,11 @@ def not_implemented():
|
||||
|
||||
|
||||
def main():
|
||||
"""Главная функция приложения"""
|
||||
"""Главная функция - интерактивный режим"""
|
||||
print_banner()
|
||||
|
||||
# Маппинг выбора на реестры
|
||||
registry_map = {
|
||||
"1": ("auditors", "Реестр аудиторов и индивидуальных аудиторов"),
|
||||
"2": ("organizations", "Реестр аудиторских организаций"),
|
||||
"3": ("certificates", "Реестр квалификационных аттестатов"),
|
||||
"4": ("individual_auditors", "Перечень индивидуальных аудиторов"),
|
||||
"5": ("training_centers", "Реестр учебно-методических центров"),
|
||||
"6": ("oppk_confirmation", "Сведения о подтверждении ОППК"),
|
||||
"7": ("ozo_training", "Сведения о прохождении ПК руководителем"),
|
||||
"8": ("excluded_auditors", "Реестр исключенных аудиторов"),
|
||||
"9": ("excluded_organizations", "Реестр исключенных организаций"),
|
||||
"10": ("cancelled_certificates", "Реестр аннулированных аттестатов"),
|
||||
"11": ("excluded_training_centers", "УМЦ исключенные из реестра"),
|
||||
"12": ("disciplinary_auditors", "Дисциплинарные меры к аудиторам"),
|
||||
"13": ("disciplinary_organizations", "Дисциплинарные меры к организациям"),
|
||||
"14": ("audit_networks", "Перечень сетей аудиторских организаций"),
|
||||
}
|
||||
registry_map = get_registry_map()
|
||||
|
||||
while True:
|
||||
print_menu()
|
||||
@@ -304,9 +360,114 @@ def main():
|
||||
input("\n⏸️ Нажмите Enter для возврата в меню...")
|
||||
|
||||
|
||||
def run_cron_mode(registry_key: str, mode: str):
|
||||
"""
|
||||
Запуск в режиме cron (неинтерактивный)
|
||||
|
||||
Args:
|
||||
registry_key: Ключ реестра (auditors, organizations, и т.д.)
|
||||
mode: Режим парсинга (quick или full)
|
||||
"""
|
||||
logger = setup_logger("cron")
|
||||
|
||||
# Проверка валидности реестра
|
||||
if registry_key not in REGISTRIES:
|
||||
logger.error(f"Неизвестный реестр: {registry_key}")
|
||||
print(f"❌ Ошибка: Реестр '{registry_key}' не найден.")
|
||||
print("Используйте --list для просмотра доступных реестров.")
|
||||
sys.exit(1)
|
||||
|
||||
# Определение режима детализации
|
||||
detailed = mode.lower() == "full"
|
||||
mode_str = "полный" if detailed else "быстрый"
|
||||
|
||||
registry_name = REGISTRIES[registry_key]["name"]
|
||||
|
||||
logger.info(f"Запуск в режиме cron: {registry_key} ({mode_str})")
|
||||
print(f"\n🤖 РЕЖИМ CRON")
|
||||
print("=" * 60)
|
||||
print(f"Реестр: {registry_name}")
|
||||
print(f"Режим: {mode_str}")
|
||||
print(f"Детализация: {'Да' if detailed else 'Нет'}")
|
||||
print("=" * 60 + "\n")
|
||||
|
||||
try:
|
||||
# Выбор парсера в зависимости от реестра
|
||||
if registry_key == "auditors":
|
||||
parse_auditors(detailed=detailed)
|
||||
elif registry_key == "organizations":
|
||||
parse_organizations(detailed=detailed)
|
||||
else:
|
||||
parse_generic_registry(registry_key, registry_name, detailed=detailed)
|
||||
|
||||
logger.info(f"Парсинг {registry_key} успешно завершен")
|
||||
print("\n✅ Парсинг успешно завершен")
|
||||
sys.exit(0)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка при парсинге в режиме cron: {e}")
|
||||
print(f"\n❌ Ошибка: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def parse_args():
|
||||
"""Парсинг аргументов командной строки"""
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Парсер реестров СРО ААС",
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
epilog="""
|
||||
Примеры использования:
|
||||
# Интерактивный режим
|
||||
python main.py
|
||||
|
||||
# Режим cron - быстрый парсинг аудиторов
|
||||
python main.py --registry auditors --mode quick
|
||||
|
||||
# Режим cron - полный парсинг организаций
|
||||
python main.py --registry organizations --mode full
|
||||
|
||||
# Список доступных реестров
|
||||
python main.py --list
|
||||
""",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"-r", "--registry", type=str, help="Ключ реестра для парсинга (см. --list)"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"-m",
|
||||
"--mode",
|
||||
type=str,
|
||||
choices=["quick", "full"],
|
||||
default="quick",
|
||||
help="Режим парсинга: quick (быстрый) или full (полный)",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"-l", "--list", action="store_true", help="Показать список доступных реестров"
|
||||
)
|
||||
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
main()
|
||||
args = parse_args()
|
||||
|
||||
# Режим показа списка реестров
|
||||
if args.list:
|
||||
list_registries()
|
||||
sys.exit(0)
|
||||
|
||||
# Режим cron (неинтерактивный)
|
||||
if args.registry:
|
||||
run_cron_mode(args.registry, args.mode)
|
||||
|
||||
# Интерактивный режим (по умолчанию)
|
||||
else:
|
||||
main()
|
||||
|
||||
except KeyboardInterrupt:
|
||||
print("\n\n👋 Программа завершена.")
|
||||
sys.exit(0)
|
||||
|
||||
Reference in New Issue
Block a user