siam_thetre_world

0

Описание

Siam Theatre World — информационная система для автоматического сбора, анализа и публикации новостей из области театрального искусства стран Юго-Восточной Азии в Telegram-канал. Система предназначена для ведения русскоязычного канала о театральной жизни региона.

Языки

  • Python75,8%
  • HTML16,8%
  • CSS7,4%
README.md

🎭 Siam Theatre World — Агрегатор театральных новостей ЮВА

Информационная система для автоматического сбора, анализа и публикации новостей из области театрального искусства стран Юго-Восточной Азии в Telegram-канал.

Архитектура

┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Web Sources │───▶│ Crawler │───▶│ Analyzer │ │ (15+ сайтов) │ │ (BeautifulSoup)│ │ (Keywords+AI)│ └──────────────┘ └──────────────┘ └──────┬───────┘ │ ┌──────────────┐ ┌───────▼───────┐ │ Telegram │◀───│ Moderator UI │ │ Channel │ │ (FastAPI) │ └──────────────┘ └───────────────┘

Компоненты

ФайлНазначение
config.py
Конфигурация: ключевые слова, источники, промпты
models.py
Модели БД (SQLAlchemy): источники, статьи, лог
crawler.py
Краулер: загрузка страниц, извлечение ссылок и текста
analyzer.py
Двухуровневый анализ: ключевые слова + AI (OpenAI-совместимый)
telegram_publisher.py
Публикация в Telegram-канал
web_app.py
FastAPI: веб-интерфейс модерации
scheduler.py
APScheduler: периодическое сканирование
main.py
Точка входа

Быстрый старт

1. Установка зависимостей

2. Настройка

Отредактируйте

.env
, заполнив:

  • TELEGRAM_BOT_TOKEN — токен бота (получить у @BotFather)
  • TELEGRAM_CHANNEL_ID — ID или @username канала (бот должен быть администратором)
  • AI_API_KEY — ключ AI-провайдера (OpenAI, Polza.ai, Together, OpenRouter и др.)
  • AI_BASE_URL — URL API провайдера (по умолчанию
    https://api.polza.ai/v1
    )
  • AI_MODEL — модель для анализа и перевода (по умолчанию
    gpt-4o-mini
    )
  • MODERATOR_PASSWORD — пароль для входа в панель модерации

3. Запуск

Приложение запустится на

http://localhost:8000
.

4. Использование

  1. Откройте
    http://localhost:8000
    и войдите с паролем модератора
  2. На Дашборде — обзор статистики и ручной запуск сканирования
  3. Модерация — просмотр и обработка найденных новостей
  4. Источники — управление списком сайтов
  5. Ключевые слова — редактирование фильтров

Как работает анализ

Уровень 1: Быстрый фильтр (бесплатно)

Текст проверяется на наличие ключевых слов из списка (русские, английские, тайские). Статьи без совпадений автоматически отклоняются.

Уровень 2: AI-анализ (OpenAI-совместимый API)

Прошедшие фильтр статьи анализируются через настроенный AI-провайдер (Polza.ai, OpenAI, Together, OpenRouter, Ollama и др.):

  • Определение релевантности с оценкой уверенности (0-100%)
  • Классификация (премьера, фестиваль, рецензия, анонс и т.д.)
  • Автоматический перевод и создание текста поста на русском

Принципы отнесения к театральной тематике

Помимо ключевых слов, AI учитывает:

  • Контекст ЮВА (Таиланд, Вьетнам, Индонезия, Мьянма, Камбоджа и др.)
  • Традиционные формы: кхон, лике, лакхон, нанг яй, хун крабок
  • Смежные области: кабаре, перформанс, современный танец
  • Театральные площадки и организации региона

Модерация

Каждая отобранная новость проходит ручную модерацию:

ДействиеОписание
✅ ОдобритьДобавить в очередь публикации
📤 Опубликовать сейчасНемедленная отправка в Telegram
📅 ЗапланироватьПубликация в указанное время
❌ ОтклонитьОтказать в публикации

Модератор может отредактировать текст поста перед публикацией.

Конфигурация

Переменные окружения (.env)

ПеременнаяПо умолчаниюОписание
TELEGRAM_BOT_TOKEN
Токен Telegram-бота
TELEGRAM_CHANNEL_ID
@SiamTheatreWorld
ID канала
AI_API_KEY
Ключ AI-провайдера
AI_BASE_URL
https://api.openai.com/v1
URL API (Polza.ai, OpenRouter и др.)
AI_MODEL
gpt-4o-mini
Модель для анализа и перевода
AI_MAX_TOKENS
1024
Макс. токенов в ответе
AI_TEMPERATURE
0.3
Температура генерации
CRAWL_INTERVAL_MINUTES
120
Интервал сканирования (мин.)
NEWS_NOT_BEFORE_DAYS
7
Свежесть новостей (дней)
MODERATOR_PASSWORD
changeme
Пароль модератора
WEB_PORT
8000
Порт веб-интерфейса

Развёртывание

Docker (рекомендуется)

systemd

API

EndpointМетодОписание
GET /api/stats
Статистика системы
POST /run/crawl
authРучной запуск сканирования
POST /run/analyze
authРучной запуск анализа
POST /run/publish
authПубликация одобренных

Расширение

Добавление нового источника

Через веб-интерфейс (Источники → Добавить) или напрямую в БД.

Поддержка социальных сетей (Facebook, Instagram)

Для парсинга соцсетей рекомендуется:

  • Использовать официальные API (Facebook Graph API)
  • Или headless-браузер (Playwright) для публичных страниц
  • Модуль
    crawler.py
    легко расширяется под эти нужды

Добавление новых языков ЮВА

Добавьте ключевые слова на нужном языке в раздел

THEATRE_KEYWORDS
в
config.py
или через веб-интерфейс (Ключевые слова).