Telegram News Aggregator - це веб-додаток, який дозволяє збирати та відображати новини з обраних Telegram-каналів на єдиній веб-сторінці. Проект використовує FastAPI як веб-фреймворк, Uvicorn як ASGI-сервер та Jinja2 для рендерингу шаблонів.
- Автоматичне збирання новин з налаштованих Telegram-каналів
- Зберігання новин у SQLite базі даних
- Завантаження та відображення медіа-файлів (зображення, відео, аудіо, документи)
- Розумне керування дисковим простором (обмеження розміру завантажуваних файлів)
- Автоматичне видалення застарілих новин
- Відображення актуальних курсів валют (USD, EUR) та об'єднаний графік з динамікою їх змін
- Python 3.7+
- Доступ до Telegram API (api_id та api_hash)
# Створення віртуального середовища
python3 -m venv venv
source venv/bin/activate
# Встановлення залежностей
pip install fastapi uvicorn jinja2 pytz requests bs4 telethon
# Створення віртуального середовища
python -m venv venv
venv\Scripts\activate
# Встановлення залежностей
pip install fastapi uvicorn jinja2 pytz requests bs4 telethon
Створіть файл config.json
у кореневій директорії проекту з наступною структурою:
{
"api_id": "YOUR_TELEGRAM_API_ID",
"api_hash": "YOUR_TELEGRAM_API_HASH",
"phone_number": "YOUR_PHONE_NUMBER",
"MAX_FILE_SIZE_MB": 10,
"days_to_keep": 1,
"news_update_in_minutes": 15,
"debug": false,
"channels": {
"channel1": "Опис першого каналу",
"channel2": "Опис другого каналу",
"channel3": "Опис третього каналу"
}
}
api_id
- Ідентифікатор додатку Telegram (отримується на https://my.telegram.org)api_hash
- Хеш API Telegram (отримується на https://my.telegram.org)phone_number
- Номер телефону, пов'язаний з вашим акаунтом TelegramMAX_FILE_SIZE_MB
- Максимальний розмір медіа-файлів для автоматичного завантаження (в МБ)days_to_keep
- Кількість днів, за які зберігаються новиниnews_update_in_minutes
- Інтервал оновлення новин (у хвилинах)channels
- Словник каналів у форматі "ідентифікатор_каналу": "опис_каналу"
uvicorn app:app --reload --host <ip_address> --port 8000
uvicorn app:app --host <ip_address> --port 8000
Якщо у вас Ubuntu, то створіть файл /etc/systemd/system/tg_news.service, в якому пропишіть наступний код (підкорегуйте шляхи до проекту та environment):
[Unit]
Description=Telegram News FastAPI Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/tg_news
ExecStart=/root/tg_news/env/bin/python main.py
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Після запуску програми відкрийте веб-браузер і перейдіть за адресою http://<ip_address>:8000
. Ви побачите стрічку новин з налаштованих каналів.
- У боковому меню, зверху вниз відображаються - кнопки "Очистити" (очистити всі канали від новин) та "Налаштування" (перехід на сторінку налаштувань), курси валют, графік з динамікою курсів валют та назви каналів
- Медіа-файли, розмір яких менший за
MAX_FILE_SIZE_MB
, відображаються автоматично у вигляді preview - Для великих файлів відображається кнопка завантаження
- Після завантаження великого файлу з'являється preview та кнопка для його видалення
main.py
- для запуску проекту через службу systemdapp.py
- Основний файл додатку з FastAPI маршрутамиconfig.json
- Конфігураційний файлnews.db
- SQLite база даних з новинамиtemplates/
- Директорія з Jinja2 шаблонамиstatic/
- Директорія для статичних файлів (CSS, JavaScript)media/
- Директорія для завантажених медіа-файлівmodules/
- Директорія модулів програми