написал бота, он парсит новостной сайт и делает пост в тгк, но при его запуске, он не может отправить сообщение из за ошибки: Not found. Как это можно исправить?(код ниже)
import requests
from bs4 import BeautifulSoup
from telegram import Bot, error
import time
import asyncio
import random
# Конфигурация
TELEGRAM_TOKEN = '*****************'
CHANNEL_ID = '-*****************'
HABR_NEWS_URL = '****************'
POLLING_INTERVAL = 3600 # Интервал опроса сайта (в секундах)
# Инициализация бота
bot = Bot(token=TELEGRAM_TOKEN)
def generate_catchy_headline(original_title):
templates = [
f"{original_title}: Why You Should Care",
f"{original_title}: What No One is Talking About",
f"{original_title} - You Won't Believe What Happened Next!",
f"The Shocking Truth About {original_title}",
f"{original_title}? Here's What Experts Say",
f"{original_title}: The Inside Story",
]
return random.choice(templates)
def fetch_latest_news():
try:
response = requests.get(HABR_NEWS_URL)
response.raise_for_status()
soup = BeautifulSoup(response.content, 'html.parser')
articles = soup.find_all('article', class_='tm-articles-list__item')
if not articles:
print("Не удалось найти статьи на странице. Проверьте селектор.")
latest_news = []
for article in articles:
title_tag = article.find('a', class_='tm-title__link')
if title_tag:
original_title = title_tag.get_text(strip=True)
catchy_title = generate_catchy_headline(original_title)
link = 'https://habr.com' + title_tag['href']
latest_news.append(f"{catchy_title}\n{link}")
else:
print("Заголовок не найден, пропускаем статью.")
return latest_news
except requests.RequestException as e:
print(f"Ошибка при получении новостей: {e}")
return []
async def post_news_to_telegram(news_list):
for news in news_list:
try:
await bot.send_message(chat_id=CHANNEL_ID, text=news)
print(f"Сообщение отправлено: {news}")
except error.TelegramError as e:
print(f"Ошибка при отправке сообщения: {e.message}")
async def main():
last_posted_news = set()
while True:
news_list = fetch_latest_news()
if news_list:
new_posts = [news for news in news_list if news not in last_posted_news]
if new_posts:
await post_news_to_telegram(new_posts)
last_posted_news.update(new_posts)
await asyncio.sleep(POLLING_INTERVAL)
if __name__ == '__main__':
asyncio.run(main()) # Запуск основного асинхронного цикла