PythonБоты

Создание Telegram бота на Python для автоматической публикации статей

В данной статье мы рассмотрим скрипт на языке программирования Python, который позволяет получать новые статьи с сайта и отправлять их в определенный канал в Telegram.

Наверняка многие пользователи Telegram сталкивались с тем, что хотели бы получать новые статьи или уведомления о новых постах из любимых блогов или сайтов прямо в мессенджере. Создание своего собственного Telegram-бота может помочь автоматизировать этот процесс и получать уведомления о новых статьях на любом сайте, не выходя из Telegram.

Для начала работы с Telegram API вам необходимо создать бота и получить его токен. Для этого можно воспользоваться инструкцией на сайте Telegram или использовать специальный сервис BotFather. Вам также понадобится ID вашего канала, в который будут отправляться новые статьи.

Прежде всего, необходимо установить необходимые библиотеки для Python — requests и BeautifulSoup. Для этого можно использовать следующую команду:

pip install requests beautifulsoup4

Далее, можно начать создание скрипта на Python.

Первым шагом является импорт необходимых библиотек:

import requests
from bs4 import BeautifulSoup
import time

Затем нужно задать токен вашего бота в Telegram, ID вашего канала и путь к файлу, в котором будут храниться опубликованные статьи:

BOT_TOKEN = 'ваш_токен_бота'
CHANNEL_ID = 'id_вашего_канала'
FILE_NAME = 'published_posts.txt'

Далее определим функцию, которая будет отправлять сообщения в канал:

def send_message(message):
    url = f'https://api.telegram.org/bot{BOT_TOKEN}/sendMessage'
    data = {'chat_id': CHANNEL_ID, 'text': message, "parse_mode": "HTML"}
    response = requests.post(url, data=data)
    return response.json()

Теперь определим функцию, которая будет проверять, была ли уже опубликована статья с указанным URL:

def is_post_published(url):
    with open(FILE_NAME, 'r') as f:
        published_posts = f.readlines()
        if url + '\n' in published_posts:
            return True
        else:
            return False

Далее определим функцию, которая будет добавлять URL статьи в файл опубликованных статей:

def add_to_published(url):
    with open(FILE_NAME, 'a') as f:
        f.write(url + '\n')

Теперь определим функцию, которая будет получать новые статьи и отправлять их в канал:

def check_for_new_posts():
    # Получаем HTML-страницу сайта
    url = 'https://site.name/'
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    # Получаем все статьи на странице
    posts = soup.find_all('div', class_='card-wrapper')

    # Перебираем статьи
    for post in posts:
        # Получаем заголовок и URL статьи
        header = post.find('h2', class_='entry-title').text.strip()
        short_description = post.find('div', class_='entry-excerpt').text.strip()
        url = post.find('a')['href']

        # Проверяем, была ли статья уже опубликована
        if not is_post_published(url):
            # Если статья новая, отправляем ее в канал
            message = f'<b>{header}</b>\n \n{short_description}\n \n<a href="{url}">Читать полностью</a>'
            send_message(message)

            # Добавляем URL статьи в файл опубликованных статей
            add_to_published(url)

Бесконечный цикл, который проверяет наличие новых статей каждые 5 минут

while True:
    check_for_new_posts()
    time.sleep(300)

После запуска скрипта бот будет проверять сайт каждые 5 минут на наличие новых статей. Если найдены новые статьи, бот опубликует их в канале, указанном в переменной CHANNEL_ID.

Этот скрипт может быть усовершенствован различными способами. Например, можно добавить фильтры для статей, чтобы бот публиковал только те статьи, которые относятся к определенным темам. Можно также использовать другие методы получения статей, например, парсить RSS-ленты.

В целом, создание бота в Telegram может быть очень полезным для тех, кто хочет быстро и удобно получать информацию из различных источников. С помощью Telegram ботов можно также автоматизировать различные задачи, которые раньше приходилось выполнять вручную.

5/5 - (1 голос)

Добавить комментарий

Back to top button