Как устранить ошибку «telegram.error.BadRequest: неправильный тип содержимого веб-страницы» при использовании Telegram APython

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Как устранить ошибку «telegram.error.BadRequest: неправильный тип содержимого веб-страницы» при использовании Telegram A

Сообщение Гость »


Я написал сценарий для программирования бота Telegram, который будет возвращать пользователю информацию о прогнозе погоды по его выбору. Есть 3 варианта: (1) прогноз на 2 часа; (2) прогноз на 24 часа; и (3) прогноз на 4 дня. Скрипт находится на сервере pythonanywhere.

Скрипт вызовет API веб-сайта с прогнозами погоды для получения информации.

Затем информация объединяется в фрейм данных pandas, а затем сохраняется в виде файла png.

Цель состоит в том, чтобы заставить бот Telegram отправить PNG-файл обратно пользователю с помощью update.message.reply_photo(response). response — это HTTPS-ссылка, открывающая изображение, сохраненное на сервере pythonanywhere.

После запуска моего скрипта я столкнулся с ошибкой telegram.error.BadRequest: Неправильный тип содержимого веб-страницы. Меня это смутило, поскольку в документации Telegram API указано, что URL принимается в качестве аргумента.

Я включил свой сценарий и сообщение отслеживания ниже. Я намеренно замаскировал свой токен API и имя пользователя. Это заменяется на .

К вашему сведению: я запустил сценарий на своем локальном компьютере, и он работал нормально. Разница между сценарием, размещенным на pythonanywhere (тот, который выдает мне ошибку), и сценарием на моем локальном компьютере заключается в аргументе, который был передан в update.message.reply_photo(response). Разница в следующем:

*Локальный компьютер: сценарий сохраняет файл PNG на моем рабочем столе, и ответ ссылался на имя файла PNG.

Pythonanywhere: скрипт сохраняет файл png в моей папке pythonanywhere, и ответ ссылался на URL-адрес png. Я не уверен, связано ли это с тем, что для доступа к файлу требуется вход в pythonanywhere.*

Пожалуйста, помогите.

**Мой сценарий: **

запросы на импорт импортировать панд как pd импортировать JSON от ввода импорта Final из обновления импорта Telegram из приложения импорта telegram.ext, CommandHandler, MessageHandler, фильтров, ContextTypes импортировать df2img BOT_TOKEN: Final = BOT_USERNAME: Final = async def start_command (обновление: обновление, контекст: ContextTypes.DEFAULT_TYPE): await update.message.reply_text('Привет! Вы можете проверить погоду SG, набрав \'2 часа\', \'24 часа\' или \'4 дня\'') def handle_response(text: str) -> str: # 2 часа извлечения данных о погоде если в тексте «2 часа»: two_r = Requests.get('https://api.data.gov.sg/v1/environment/ ... r-forecast').json() two_df = pd.DataFrame(columns=['область', 'прогноз']) for i in range(len(two_r['items'][0]['forecasts'])): two_df.loc = [(two_r['items'][0]['прогнозы']['область']), (two_r['items'][0]['прогнозы']['прогноз'])] рис = df2img.plot_dataframe(two_df) df2img.save_dataframe(fig=fig, filename='SG 2hour Weather.png') return 'https://www.pythonanywhere.com/user//files/home//SG 2-часовая погода.png' # 24-часовое извлечение данных о погоде Элиф '24 часа' в тексте: two_four_r = Requests.get('https://api.data.gov.sg/v1/environment/ ... r-forecast').json() # компиляция данных прогноза прогноз = список(two_four_r['items'][0][' periods'][0]['regions'].values()) временный_список = [] для я в диапазоне (1, 3): temp_list.extend(list(two_four_r['items'][0][' periods']['regions'].values())) для x в диапазоне (len(temp_list)): прогноз.append(temp_list[x]) # компилируем данные региона регион = список(two_four_r['items'][0][' periods'][0]['regions'].keys()) * 3 # компилируем данные за период period = ['первые 8 часов'] * 5 + ['следующие 8 часов'] * 5 + ['последующие 8 часов'] * 5 # компилируем все 3 выше вместе д = {} d['прогноз'] = прогноз d['region'] = регион d['период'] = период # конвертируем в фрейм данных для извлечения two_four_df = pd.DataFrame(d) two_four_df = two_four_df[['период', 'регион', 'прогноз']] рис = df2img.plot_dataframe(two_four_df) df2img.save_dataframe(fig=fig, filename='SG 24-часовая погода.png') return 'https://www.pythonanywhere.com/user//files/home//SG 24-часовая погода.png' # Извлечение данных о погоде за 4 дня Элиф '4 дня' в тексте: four_day_r = Requests.get('https://api.data.gov.sg/v1/environment/ ... r-forecast').json() four_day_df = pd.DataFrame(columns=['прогноз']) для меня в диапазоне (4): four_day_df.loc = [four_day_r['items'][0]['прогнозы']['прогноз']] рис = df2img.plot_dataframe(four_day_df) df2img.save_dataframe(fig=fig, filename='SG 4 Day Weather.png') return 'https://www.pythonanywhere.com/user//files/home//SG 4 day Weather.png' еще: вернуть 'Я не понимаю. Пожалуйста, выберите «2 часа», «24 часа» или «4 дня» и введите их правильно, без пробелов. асинхронное определение handle_message (обновление: обновление, контекст: ContextTypes.DEFAULT_TYPE): текст: str = update.message.text ответ = handle_response(текст) дождитесь обновления.message.reply_photo(ответ) если __name__ == '__main__': print('Запускаем бот...') приложение = Application.builder().токен(BOT_TOKEN).build() app.add_handler(CommandHandler('start', start_command)) app.add_handler(MessageHandler(filters.TEXT, handle_message)) print('Опрос...') app.run_polling(poll_interval=3) Сообщение отслеживания:
Обработчики ошибок не зарегистрированы, исключение регистрируется. Traceback (последний вызов последний): Файл "/home//.local/lib/python3.10/site-packages/telegram/ext/_application.py", строка 1184, вprocess_update ждать сопрограммы Файл "/home//.local/lib/python3.10/site-packages/telegram/ext/_basehandler.py", строка 141, в handle_update return await self.callback(обновление, контекст) Файл «/home//sg-weather-telegram-bot.py», строка 89, в handle_message дождитесь обновления.message.reply_photo(ответ) Файл "/home//.local/lib/python3.10/site-packages/telegram/_message.py", строка 1391, в ответе_фото возвращение ждут self.get_bot().send_photo( Файл "/home//.local/lib/python3.10/site-packages/telegram/ext/_extbot.py", строка 2655, в send_photo возвращение ждут super().send_photo( Файл "/home//.local/lib/python3.10/site-packages/telegram/_bot.py", строка 394, в декораторе result = await func(self, *args, **kwargs) #skipcq: PYL-E1102 Файл "/home//.local/lib/python3.10/site-packages/telegram/_bot.py", строка 1055, в send_photo возвращение ждут self._send_message( Файл "/home//.local/lib/python3.10/site-packages/telegram/ext/_extbot.py", строка 517, в _send_message результат = ожидайте super()._send_message( Файл "/home//.local/lib/python3.10/site-packages/telegram/_bot.py", строка 572, в _send_message результат = ожидайте self._post( Файл "/home//.local/lib/python3.10/site-packages/telegram/_bot.py", строка 482, в _post возвращение ждут self._do_post( Файл "/home//.local/lib/python3.10/site-packages/telegram/ext/_extbot.py", строка 335, в _do_post возвращение ждут super()._do_post( Файл "/home//.local/lib/python3.10/site-packages/telegram/_bot.py", строка 510, в _do_post возвращение ждут запроса.пост( Файл "/home//.local/lib/python3.10/site-packages/telegram/request/_baserequest.py", строка 168, в сообщении результат = ожидайте self._request_wrapper( Файл "/home//.local/lib/python3.10/site-packages/telegram/request/_baserequest.py", строка 325, в _request_wrapper поднять BadRequest (сообщение) telegram.error.BadRequest: неправильный тип содержимого веб-страницы.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»