Coder Social home page Coder Social logo

yalinerkaya / latest_news_bot Goto Github PK

View Code? Open in Web Editor NEW

This project forked from abbadonaa/latest_news_bot

0.0 0.0 0.0 357 KB

API for parsing news articles and reading them in a Telegram bot

License: MIT License

Python 94.54% HTML 4.54% Mako 0.61% Dockerfile 0.32%

latest_news_bot's Introduction

Latest News

latest_news_workflow

Описание

Latest News - это API сервиса для парсинга новостных статей с интегрированным ботом Telegram.

API может быть использован для взаимодействия со сторонними ботами Telegram или иными сервисами - новостными агрегаторами.

Основной функционал API:

  • Запуск парсеров для заполнения БД новостными статьями;
  • Очистка БД от устаревших новостных статей;
  • Управление пользователями: регистрация, аутентификация, авторизация, редактирование;
  • Получение из БД записей с новостными статьями с возможностью фильтрации. Полученные пользователем статьи помечаются прочитанными и исключаются из ответа при следующих запросах;
  • Формирование html-шаблона статьи для корректного отображения при помощи InstantView Telegram.

Реализован парсинг следующих новостных ресурсов:

  • РБК;
  • ИноСМИ.

Настроены:

  • Автоматическое создание первого суперпользователя при запуске проекта;
  • CI/CD (GitHub Actions + Docker-Compose).

Ключевые технологии и библиотеки:

Python FastAPI Scrapy Python-telegram-bot Postgres SQLAlchemy Docker Nginx

Полная установка для локального запуска

  1. Склонируйте репозиторий:
git clone [email protected]:AbbadonAA/Latest_News_Bot.git
  1. Активируйте venv и установите зависимости:
python3 -m venv venv 
source venv/bin/activate 
pip install -r requirements.txt 
  1. Создайте в корневой директории файл .env со следующим наполнением:
# Переменные 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=[email protected]  # (пример) 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 и введите команду:

    ngrok http 8080
  • Задайте значение переменной окружения (.env):

    DOMAIN_NAME=https://1234-56-78-9.eu.ngrok.io  # Пример

  1. Запустите контейнер с базой данных PostgreSQL (должен быть установлен Docker):
cd infra/
docker-compose -f docker-compose.local.yml up -d news_db
  1. В корневой директории примените миграции для создания таблиц в БД:
alembic upgrade head 
  1. Проект готов к запуску.

Управление при локальном запуске:

В корневой директории выполните команду:

python run.py

Сервис будет запущен и доступен по следующим адресам:

(при условии, что в файле .env: HOST=0.0.0.0, PORT=8080)

Также будет запущен бот Telegram, токен которого указан в файле .env.

В БД будет автоматически создан первый суперпользователь (email, password указаны в файле .env).

Упрощенный вариант установки для запуска в контейнерах
  1. Создайте директорию для приложения:
mkdir LATEST_NEWS (пример)
  1. Разместите в созданной директории файл .env со следующим наполнением:
# Переменные 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=[email protected]  # (пример) 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)
  1. В директории приложения создайте директорию /infra:
mkdir infra
  1. Разместите в директории /infra файл docker-compose.local.yml
  2. В директории /infra запустите docker-compose:
docker-compose -f docker-compose.local.yml up -d
  1. Проект запущен в двух контейнерах:
  • latest_news_bot
  • latest_news_db

Установка на сервере и получение сертификата SSL

  1. Создайте на сервере директорию для приложения:
mkdir latest-news (пример) 
  1. Разместите в созданной директории файл .env со следующим наполнением:
# Переменные 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=[email protected]  # (пример) 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. - В этом случае пользователь будет получать ссылку и открывать её в браузере.

  1. В случае запуска отображения статей в режиме Instant View - создайте свой шаблон IV и укажите его rhash в файле .env:
RHASH=f4642197829222  # (пример) rhash вашего шаблона IV
  1. Создайте директорию /infra:
mkdir infra
  1. Разместите в директории /infra файл docker-compose.prod.yml
  2. Уточните в файле docker-compose.prod.yml переменные окружения:
VIRTUAL_HOST=example.com (укажите Ваш домен)
LETSENCRYPT_HOST=example.com (укажите Ваш домен)
LETSENCRYPT_EMAIL=[email protected] (укажите Ваш email)
  1. Разместите в директории /infra (лучше создать отдельную директорию) файл docker-compose.nginx.yml
  2. Создайте сеть Docker:
docker network create nginx-proxy
  1. Запустите контейнеры:
docker-compose -f docker-compose.nginx.yml up -d
docker-compose -f docker-compose.prod.yml up -d
  1. Проект запущен в четырех контейнерах:
  • latest_news_bot

  • latest_news_db

  • nginx-proxy

  • letsencrypt

    Получен сертификат SSL и настроено автоматическое обновление сертификатов.

Лицензия

  • MIT License

Автор

Pushkarev Anton

[email protected]

latest_news_bot's People

Contributors

abbadonaa avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.