Как наиболее эффективно настроить бота для отправки фотографий или файлов?

Как можно настроить мой Telegram бот, написанный на PyCharm с использованием библиотеки pyTelegramBotAPi, чтобы он отправлял фото расписания вместо ссылки? Сейчас бот может только отправлять ссылку на сайт с расписанием, но мне нужно, чтобы он отправлял фотографии расписания, которые находятся на странице в формате таблицы. Ссылка, которую я использую для получения расписания: 'https://time.spetpro.ru/s/OB-2101.htm'. Мой бот можно увидеть по адресу: @SPET1_BOT. Я могу загрузить фото расписания в бот, но проблема в том, что мне нужно будет регулярно обновлять фотографии расписания, что неудобно. Буду благодарен за помощь в этом вопросе.
  • 9 декабря 2023 г. 0:49
Ответы на вопрос 2
Для отправки фотографий или файлов вам следует использовать метод send_photo() в библиотеке pyTelegramBotAPI. Вот пример кода, который отправит фотографию вместо ссылки:

```python
import telebot

bot = telebot.TeleBot('YOUR_BOT_TOKEN')

@bot.message_handler(commands=['schedule'])
def send_schedule(message):
    chat_id = message.chat.id
    # Загрузите фотографию расписания из вашего источника
    photo = open('path/to/schedule.jpg', 'rb')
    bot.send_photo(chat_id, photo)
    photo.close()

bot.polling()
```

В этом примере, при получении команды '/schedule', бот загрузит фотографию расписания по указанному пути и отправит ее пользователю. Вы можете изменить этот код, чтобы он отвечал на другие команды или события.

Однако вам все равно придется обновлять фотографию регулярно в вашем коде. Чтобы избежать этого и обновлять расписание автоматически, вы можете реализовать в своем боте функцию, которая будет периодически загружать фотографии расписания с веб-страницы. Например, можно использовать модуль requests для загрузки страницы и BeautifulSoup для анализа и поиска таблицы с расписанием, а затем сохранить ее как фотографию.

Вот пример кода, который демонстрирует, как загрузить страницу, найти таблицу с расписанием и сохранить ее как фотографию:

```python
import requests
from bs4 import BeautifulSoup

def update_schedule_photo():
    # Загрузите веб-страницу
    url = 'https://time.spetpro.ru/s/OB-2101.htm'
    response = requests.get(url)
    
    # Создайте объект BeautifulSoup для анализа страницы
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # Найдите таблицу с расписанием
    table = soup.find('table', class_='schedule')
    
    if table:
        # Сохраните таблицу как изображение
        table_image_path = 'path/to/schedule.jpg'
        table_image = open(table_image_path, 'wb')
        table_image.write(table_image_content)
        table_image.close()
        
        # Отправьте фотографию расписания с помощью bot.send_photo(chat_id, photo)
```

Вы можете использовать эту функцию для обновления фотографии расписания в своем коде бота. Вызывайте ее, например, из другой команды или при генерации нового расписания.

Важно отметить, что вам также нужно реализовать логику, если таблица с расписанием отсутствует на странице или изменяется ее формат.
В интернете нашёл такое решение. Через selenium и  браузер Chrome. Думаю, основываясь на этом, можно переделать под этот случай. 
Я даже нашёл скрипт для автоматической установки драйвера
https://pypi.org/project/chromedriver-autoinstaller/
Похожие вопросы