Latest_News_Bot

所属分类:Docker
开发工具:Python
文件大小:0KB
下载次数:0
上传日期:2023-08-01 22:16:41
上 传 者sh-1993
说明:  用于解析新闻文章并在电报机器人中阅读它们的API,
(API for parsing news articles and reading them in a Telegram bot,)

文件列表:
Dockerfile (270, 2023-12-06)
LICENSE (1072, 2023-12-06)
alembic.ini (3264, 2023-12-06)
alembic/ (0, 2023-12-06)
alembic/env.py (2596, 2023-12-06)
alembic/script.py.mako (510, 2023-12-06)
alembic/versions/ (0, 2023-12-06)
alembic/versions/0112e416d455_users.py (1336, 2023-12-06)
alembic/versions/04d5a25a9a5f_usermodel_limit_added.py (687, 2023-12-06)
alembic/versions/277a7f3ade68_cascade_option.py (570, 2023-12-06)
alembic/versions/42ec8808acf7_autoincrement.py (569, 2023-12-06)
alembic/versions/44c042d1297b_video_link_added.py (680, 2023-12-06)
alembic/versions/4eab5418ff11_optional_chat_id.py (779, 2023-12-06)
alembic/versions/4eacd65ddb52_video_preview_added.py (699, 2023-12-06)
alembic/versions/6547cda9ef8b_first_migration.py (1834, 2023-12-06)
alembic/versions/7c60f284cfcf_ondelete.py (1240, 2023-12-06)
alembic/versions/da0f329dac4d_autoincrement.py (1026, 2023-12-06)
app/ (0, 2023-12-06)
app/__init__.py (0, 2023-12-06)
app/api/ (0, 2023-12-06)
app/api/__init__.py (0, 2023-12-06)
app/api/endpoints/ (0, 2023-12-06)
app/api/endpoints/__init__.py (222, 2023-12-06)
app/api/endpoints/articles.py (3629, 2023-12-06)
app/api/endpoints/base_interact.py (919, 2023-12-06)
app/api/endpoints/telegram_webhook.py (956, 2023-12-06)
app/api/endpoints/user.py (1221, 2023-12-06)
app/api/jobs.py (2836, 2023-12-06)
app/api/routers.py (628, 2023-12-06)
app/api/templates/ (0, 2023-12-06)
app/api/templates/404.html (854, 2023-12-06)
app/api/templates/__init__.py (0, 2023-12-06)
app/api/templates/article.html (2968, 2023-12-06)
app/api/templates/img_not_found.png (94965, 2023-12-06)
... ...

# Latest News ![latest_news_workflow](https://github.com/AbbadonAA/Latest_News_Bot/workflows/latest_news_workflow/badge.svg) ## Описание **Latest News** - это API сервиса для парсинга новостных статей с интегрированным ботом Telegram. API может быть использован для взаимодействия со сторонними ботами Telegram или иными сервисами - новостными агрегаторами. **Основной функционал API:** - Запуск парсеров для заполнения БД новостными статьями; - Очистка БД от устаревших новостных статей; - Управление пользователями: регистрация, аутентификация, авторизация, редактирование; - Получение из БД записей с новостными статьями с возможностью фильтрации. Полученные пользователем статьи помечаются прочитанными и исключаются из ответа при следующих запросах; - Формирование html-шаблона статьи для корректного отображения при помощи InstantView Telegram. **Реализован парсинг следующих новостных ресурсов:** - РБК; - ИноСМИ. **Настроены:** - Автоматическое создание первого суперпользователя при запуске проекта; - CI/CD (GitHub Actions + Docker-Compose). ## Ключевые технологии и библиотеки: [![Python][Python-badge]][Python-url] [![FastAPI][FastAPI-badge]][FastAPI-url] [![Scrapy][Scrapy-badge]][Scrapy-url] [![Python-telegram-bot][Python-telegram-bot-badge]][Python-telegram-bot-url] [![Postgres][Postgres-badge]][Postgres-url] [![SQLAlchemy][SQLAlchemy-badge]][SQLAlchemy-url] [![Docker][Docker-badge]][Docker-url] [![Nginx][Nginx-badge]][Nginx-url] ## Полная установка для локального запуска 1. Склонируйте репозиторий: ```shell git clone git@github.com:AbbadonAA/Latest_News_Bot.git ``` 2. Активируйте venv и установите зависимости: ```shell python3 -m venv venv source venv/bin/activate pip install -r requirements.txt ``` 3. Создайте в корневой директории файл .env со следующим наполнением: ```dotenv # Переменные API APP_TITLE=LATEST_NEWS_PARSER # (пример) название приложения DEBUG=False # True для включения режима отладки HOST=0.0.0.0 # хост PORT=8080 # порт DOMAIN=False # имеется ли DOMAIN_NAME DOMAIN_NAME=https://example.com # пример при наличии (необходим сертификат SSL) PARSER_FREQUENCY=5 # периодичность запуска парсеров (минуты) STORAGE_DAYS=30 # срок хранения данных в БД SECRET=539e2390-9cc3-4bc7-aec1-2e96471ba49f # (пример) uuid для хеширования FIRST_SUPERUSER_EMAIL=admin@gmail.com # (пример) email первого суперпользователя FIRST_SUPERUSER_PASSWORD=AdmiN_123456789 # (пример) пароль суперпользователя # Переменные бота IP=127.0.0.1 # (пример) адрес вашего сервера WEBHOOK=False # True для запуска бота в режиме webhook BOT_TOKEN=5157247582:ATFpZanqlutiNMJfvO6tiNUDPnBkFAmiVi4 # (пример) токен бота Telegram # Переменные базы данных POSTGRES_DB=news_db # название БД POSTGRES_USER=postgres # имя пользователя БД POSTGRES_PASSWORD=postgres # пароль БД DB_HOST=localhost # хост БД (для запуска через docker-compose заменить на имя сервиса с БД) DB_PORT=6100 # порт БД (можно указать любой, но не забудьте внести изменения в файлы docker-compose) ``` > **Warning**: > Для локального запуска рекомендуется не указывать домен (DOMAIN=False) и запускать бота в режиме polling (WEBHOOK=False). В случае запуска бота в режиме webhook требуется наличие доменного имени с установленным сертификатом SSL. Иначе потребуется использовать Ngrok.
Использование Ngrok ---- Ngrok позволяет создавать временный общедоступный адрес (туннель) локального сервера. Подробнее: https://ngrok.com/ - Установите Ngrok, следуя официальным инструкциям: https://ngrok.com/download - Запустите Ngrok и введите команду: ```shell ngrok http 8080 ``` - Задайте значение переменной окружения (.env): ```dotenv DOMAIN_NAME=https://1234-56-78-9.eu.ngrok.io # Пример ``` ----
4. Запустите контейнер с базой данных PostgreSQL (должен быть установлен Docker): ```shell cd infra/ docker-compose -f docker-compose.local.yml up -d news_db ``` 5. В корневой директории примените миграции для создания таблиц в БД: ```shell alembic upgrade head ``` 6. Проект готов к запуску. ## Управление при локальном запуске: В корневой директории выполните команду: ```shell python run.py ``` Сервис будет запущен и доступен по следующим адресам: *(при условии, что в файле .env: HOST=0.0.0.0, PORT=8080)* - http://127.0.0.1:8080 - API - http://127.0.0.1:8080/docs - документация Swagger - http://127.0.0.1:8080/redoc - документация ReDoc Также будет запущен бот Telegram, токен которого указан в файле .env. В БД будет автоматически создан первый суперпользователь (email, password указаны в файле .env).
Упрощенный вариант установки для запуска в контейнерах 1. Создайте директорию для приложения: ```shell mkdir LATEST_NEWS (пример) ``` 2. Разместите в созданной директории файл .env со следующим наполнением: ```dotenv # Переменные API APP_TITLE=LATEST_NEWS_PARSER # (пример) название приложения DEBUG=False # True для включения режима отладки HOST=0.0.0.0 # хост PORT=8080 # порт DOMAIN=False # имеется ли DOMAIN_NAME DOMAIN_NAME=https://example.com # пример при наличии (необходим сертификат SSL) PARSER_FREQUENCY=5 # периодичность запуска парсеров (минуты) STORAGE_DAYS=30 # срок хранения данных в БД SECRET=539e2390-9cc3-4bc7-aec1-2e96471ba49f # (пример) uuid для хеширования FIRST_SUPERUSER_EMAIL=admin@gmail.com # (пример) email первого суперпользователя FIRST_SUPERUSER_PASSWORD=AdmiN_123456789 # (пример) пароль суперпользователя # Переменные бота IP=127.0.0.1 # (пример) адрес вашего сервера WEBHOOK=False # True для запуска бота в режиме webhook BOT_TOKEN=5157247582:ATFpZanqlutiNMJfvO6tiNUDPnBkFAmiVi4 # (пример) токен бота Telegram # Переменные базы данных POSTGRES_DB=news_db # название БД POSTGRES_USER=postgres # имя пользователя БД POSTGRES_PASSWORD=postgres # пароль БД DB_HOST=news_db # хост БД DB_PORT=6100 # порт БД (можно указать любой, но не забудьте внести изменения в файлы docker-compose) ``` 3. В директории приложения создайте директорию /infra: ```shell mkdir infra ``` 4. Разместите в директории /infra файл docker-compose.local.yml 5. В директории /infra запустите docker-compose: ```shell docker-compose -f docker-compose.local.yml up -d ``` 6. Проект запущен в двух контейнерах: - latest_news_bot - latest_news_db
## Установка на сервере и получение сертификата SSL 1. Создайте на сервере директорию для приложения: ```shell mkdir latest-news (пример) ``` 2. Разместите в созданной директории файл .env со следующим наполнением: ```dotenv # Переменные API APP_TITLE=LATEST_NEWS_PARSER # (пример) название приложения DEBUG=False # True для включения режима отладки HOST=0.0.0.0 # хост PORT=8080 # порт DOMAIN=True # имеется ли DOMAIN_NAME DOMAIN_NAME=https://example.com # (пример) PARSER_FREQUENCY=5 # периодичность запуска парсеров (минуты) STORAGE_DAYS=30 # срок хранения данных в БД SECRET=539e2390-9cc3-4bc7-aec1-2e96471ba49f # (пример) uuid для хеширования FIRST_SUPERUSER_EMAIL=admin@gmail.com # (пример) email первого суперпользователя FIRST_SUPERUSER_PASSWORD=AdmiN_123456789 # (пример) пароль суперпользователя # Переменные бота IP=127.0.0.1 # (пример) адрес вашего сервера WEBHOOK=True # Запуск бота в режиме webhook BOT_TOKEN=5157247582:ATFpZanqlutiNMJfvO6tiNUDPnBkFAmiVi4 # (пример) токен бота Telegram INSTANT_VIEW=True # Активация режима чтения статей через Instant View RHASH=f4642197829222 # (пример) rhash вашего шаблона Instant View # Переменные базы данных POSTGRES_DB=news_db # название БД POSTGRES_USER=postgres # имя пользователя БД POSTGRES_PASSWORD=postgres # пароль БД DB_HOST=news_db # хост БД DB_PORT=6100 # порт БД (можно указать любой, но не забудьте внести изменения в файлы docker-compose) ``` > **Warning**: > Следует учитывать, что режим Instant View корректно работает только с мобильной версией Telegram. При попытке просмотра статей в Telegram через браузер или десктопное приложение могут возникать различные ошибки. Это связано с самой реализацией Instant View. Для стабильной и корректной работы приложения на всех устройствах, вероятно, следует пожертвовать Instant View, не добавляя соответствующие строки в файл .env. - В этом случае пользователь будет получать ссылку и открывать её в браузере. 3. В случае запуска отображения статей в режиме Instant View - создайте свой [шаблон IV](https://instantview.telegram.org/) и укажите его rhash в файле .env: ```dotenv RHASH=f4642197829222 # (пример) rhash вашего шаблона IV ``` 4. Создайте директорию /infra: ```shell mkdir infra ``` 5. Разместите в директории /infra файл docker-compose.prod.yml 6. Уточните в файле docker-compose.prod.yml переменные окружения: ```dotenv VIRTUAL_HOST=example.com (укажите Ваш домен) LETSENCRYPT_HOST=example.com (укажите Ваш домен) LETSENCRYPT_EMAIL=your_email@example.com (укажите Ваш email) ``` 7. Разместите в директории /infra (лучше создать отдельную директорию) файл docker-compose.nginx.yml 8. Создайте сеть Docker: ```shell docker network create nginx-proxy ``` 9. Запустите контейнеры: ```shell docker-compose -f docker-compose.nginx.yml up -d docker-compose -f docker-compose.prod.yml up -d ``` 10. Проект запущен в четырех контейнерах: - latest_news_bot - latest_news_db - nginx-proxy - letsencrypt Получен сертификат SSL и настроено автоматическое обновление сертификатов. ## Лицензия - ### **MIT License** ### Автор Pushkarev Anton pushkarevantona@gmail.com [Python-url]: https://www.python.org/ [Python-badge]: https://img.shields.io/badge/Python-14354C?style=for-the-badge&logo=python&logoColor=white [FastAPI-url]: https://fastapi.tiangolo.com/ [FastAPI-badge]: https://img.shields.io/badge/FastAPI-005571?style=for-the-badge&logo=fastapi [Scrapy-url]: https://pypi.org/project/Scrapy/ [Scrapy-badge]: https://img.shields.io/badge/-Scrapy-forestgreen?style=for-the-badge& [Python-telegram-bot-url]: https://github.com/python-telegram-bot/python-telegram-bot [Python-telegram-bot-badge]: https://img.shields.io/badge/python--telegram--bot-2CA5E0?style=for-the-badge [Postgres-url]: https://www.postgresql.org/ [Postgres-badge]: https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge&logo=postgresql&logoColor=white [SQLAlchemy-url]: https://pypi.org/project/SQLAlchemy/ [SQLAlchemy-badge]: https://img.shields.io/badge/-SQLAlchemy-dimgrey?style=for-the-badge& [Docker-url]: https://www.docker.com/ [Docker-badge]: https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white [Nginx-url]: https://nginx.org [Nginx-badge]: https://img.shields.io/badge/nginx-%23009639.svg?style=for-the-badge&logo=nginx&logoColor=white~~

近期下载者

相关文件


收藏者