Пишу телеграм бота, в основном с помощью чат гпт и всяких видосов, опыта в программировании 0. Смысл такой: пользователь отправляет ссылку на сайт, бот должен отправить пользователю фотографию с этого сайта.
Пробовал 2 ссылки, у первой ошибка:
raise TelegramBadRequest(method=method, message=description)
aiogram.exceptions.TelegramBadRequest: Telegram server says - Bad Request: wrong file identifier/HTTP URL specified
у второй:
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.pexels.com', port=443): Max retries exceeded with url: /ru-ru/ (Caused by SSLError(SSLError(1, '[SSL: INVALID_SESSION_ID] invalid session id (_ssl.c:1000)')))
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
from aiogram.types import InputFile
import requests
import os
from bs4 import BeautifulSoup
from config import dp, bot
import asyncio
def get_image_url_from_website(website_url):
response = requests.get(website_url)
if response.status_code == 200:
soup = BeautifulSoup(response.content, 'html.parser')
# Ищем первый тег <img>
img_tag = soup.find('img')
if img_tag and 'src' in img_tag.attrs:
# Получаем полный URL изображения
img_url = img_tag['src']
# Если URL изображения относительный, делаем его абсолютным
if img_url.startswith('/'):
img_url = website_url.rstrip('/') + img_url
return img_url
return None
def download_image(image_url):
response = requests.get(image_url)
if response.status_code == 200:
with open("image.jpg", "wb") as f:
f.write(response.content)
return "image.jpg"
return None
@dp.message(Command('image'))
async def send_image(message: types.Message):
# Получаем URL сайта от пользователя
args = message.text.split(maxsplit=1)
if len(args) < 2:
await message.reply("Пожалуйста, предоставьте URL сайта.")
return
website_url = args[1].strip()
# Получаем URL изображения с сайта
image_url = get_image_url_from_website(website_url)
if image_url:
# Загружаем изображение
image_path = download_image(image_url)
if image_path:
# Отправляем изображение пользователю
await message.answer_photo(photo=image_path)
# Удаляем временный файл после отправки
os.remove(image_path)
else:
await message.reply("Не удалось загрузить изображение.")
else:
await message.reply("Не удалось найти изображение на сайте.")
async def main():
await dp.start_polling(bot)
if __name__ == '__main__':
try:
asyncio.run(main())
except KeyboardInterrupt:
print('Exit')
Буду рад любым советам.