Requests post python telegram

Телеграм бот на Python с использованием только requests

Телеграм бот на Python с использованием только requests

2017-02-17 в 7:30, admin , рубрики: python, telegram bots

Введение

На Хабре уже полно статей-туториалов с заголовками «Создание бота на Python», но многие из них используют готовые обертки над HTTP-интерфейсом Bot API Телеграма. Я же использую стандартную библиотеку для отправки и получения GET- и POST-запросов — requests. И так, рассмотрим создание примитивного Телеграм бота, который будет отвечать на все наши текстовые сообщения. Это будет заготовка для дальнейшего расширения.

image

Шаг 1. Создание бота

Для работы с ботом нужно сначала его создать внутри приложения Телеграм. Для этого напишем первородному боту телеграма @BotFather.

image

Выполняем его просьбу ввести имя вашего бот. Оно обязательно должно иметь на конце слово bot.

image

Если имя ввели правильно БотОтец любезно предоставит вам токен вашего бота для доступа к нему через API.

Вот теперь можно приступать к написанию самого бота.

Шаг 2. Авторизация бота

Так как API телеграма для работы с ботами представляет из себя HTTP-интерфейс, нам понадобится модуль для работы с HTTP — requests.

Принцип работы с ботом заключается получении обновлений, то есть получения действий, которые были совершены с вашим ботом. Для этого отправляем POST запрос в форме «URL + TOKEN + необязательная информация о частоте запросов, о количестве хранимых апдейтов и т.д.», который по умолчанию выдаст 100 последний не подтвержденных обновлений. Даже если бот не активен его обновления будут храниться на сервере до тех пор, пока вы их не обработаете, но не более 24 часов. Обработка обновления происходит посредством его подтверждения. Для подтверждения обновления в запросе /getUpdates передается параметр offset. Все обновления с id меньшим или равным переданному offset будут отмечены как подтверждённые и не будут больше возвращаться сервером. В ответ на запрос вы получите объект Update, который уже сериализован в JSON. Обработку JSON можно посмотреть в документации.

Инициализируем переменные для последующих запросов:

offset = 0 # параметр необходим для подтверждения обновления URL = 'https://api.telegram.org/bot' # URL на который отправляется запрос TOKEN = 'token' # токен вашего бота, полученный от @BotFather data =

Дальше отправляем запрос обновлений:

try: # обрабатываем исключения request = requests.post(URL TOKEN '/getUpdates', data=data) # собственно сам запрос except: print('Error getting updates') return False if not request.status_code == 200: return False # проверяем пришедший статус ответа if not request.json()['ok']: return False

Обработка исключений обязательна, так как бот чувствителен к ошибкам и любой сбой приведет к «пробке» в очереди обновлений.

Читайте также:  Определить является ли число квадратом python

Шаг 3. Обработка обновлений и отправка сообщений

И так, проходимся по накопившимся обновлениям:

for update in request.json()['result']: offset = update['update_id'] # подтверждаем текущее обновление if 'message' not in update or 'text' not in update['message']: # это просто текст или какая-нибудь картиночка? print('Unknown message') continue message_data = < # формируем информацию для отправки сообщения 'chat_id': update['message']['chat']['id'], # куда отправляем сообщение 'text': "I'm bot", # само сообщение для отправки 'reply_to_message_id': update['message']['message_id'], # если параметр указан, то бот отправит сообщение в reply 'parse_mode': 'HTML' # про форматирование текста ниже > try: request = requests.post(URL TOKEN '/sendMessage', data=message_data) # запрос на отправку сообщения except: print('Send message error') return False if not request.status_code == 200: # проверим статус пришедшего ответа return False

Немного о форматировании отправляемых сообщений.

Телеграм позволяет выделять некоторый текст в сообщении жирным шрифтом, курсивом, выделять ссылки и код. Существует два способа выделения текста: Markdown или HTML разметкой, что как раз и определяется в передаваемом /sendMessage параметре _parsemode.

Шаг 4. Постоянная прослушка

Осталось только организовать постоянную прослушку обновлений с бота и дело в шляпе. Запрос обновлений и их обработку можно оформить в функцию _checkupdates, а затем просто вызывать ее в бесконечном цикле с обработкой прерывании бота пользователем:

while True: try: check_updates() except KeyboardInterrupt: # порождается, если бота остановил пользователь print('Interrupted by the user') break

Вот и готов самый простой бот для Телеграма. Конечно, можно использовать уже готовые оболочки над Bot API, но зачем, если обращение напрямую к HTTP-интерфейсу и так не занимает много места. Пожалуй, на этом остановимся. В будущем можно будет реализовать отправку стикеров, обработку пришедших сообщений, и определенные ответы на определенные слова. Так же с ботами можно общаться посредством команд формата /команда, что очень удобно для каких-либо конкретных, шаблонных запросов к боту.

Источник

Как отправить сообщение в телеграм боте с помощью запроса?

Но вместе с этим нужно еще отправить параметр reply_markup, что бы вместе с сообщением поменялись кнопки. То есть нужно вставить ReplyKeyboardMarkup и 1 кнопку, допустим с названием «test». Как такое можно сделать?

P.S: нужно именно запросом, без telebot и тд

deepblack

curl -X POST \ -H 'Content-Type: application/json' \ -d '' \ https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage
import requests import json proxy = token = '8888:ABC' chat_id = 88888 URL = 'https://api.telegram.org/bot' + token + '/sendMessage' reply_markup = < "keyboard": [["Yes", "No"], ["Maybe"], ["1", "2", "3"]], "resize_keyboard": True>data = r = requests.post(URL, data=data, proxies=proxy) print(r.json())

Прошу прощения за невежество. Я только пытаюсь разобраться с телеграмм ботами и их прграммированием. Есть необходимость отправлять в группу сообщения в формате JSON. У меня есть WEB HOOK сервер который по указанному HTTP адресу отправляет POST в JSON формате типа:

, "region": "ru-sve", "plate_index": 0, "processing_time_ms": 24.905000686645508, "candidates": [, , , , , , , , , ], "coordinates": [, , , ], "matches_template": 1, "plate_crop_jpeg": "/9j/4AAQSkZJRgA*******************.yrn+KigaP/9k=", "requested_topn": 10>, "vehicle": , , , , ], "color": [, , , , ], "make": [, , , , ], "body_type": [, , , , ], "year": [, , , , ], "make_model": [, , , , ]>, "best_uuid": "P7RKZU82SGESIFZHHPE87HXIWIVCS187I5DBLFZQ-2088894996-1624120829062", "epoch_end": 1624120837415, "best_image_width": 2304, "data_type": "alpr_group", "best_image_height": 1296, "frame_end": 5562318, "is_parked": false, "best_region": "ru-sve", "uuids": ["P7RKZU82SGESIFZHHPE87HXIWIVCS187I5DBLFZQ-**************-1624120823211", ""P7RKZU82SGESIFZHHPE87HXIWIVCS187I5DBLFZQ-**************-1624120837415"], "plate_indexes": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "travel_direction": 210.373291015625, "country": "ru", "best_plate_number": "A464BM19", "best_region_confidence": 97.6282730102539, "matches_template": true, "agent_version": "2.7.101", "candidates": [, , , , , , , , , 

Из него хочется отправить в группу несколько полей: best_plate_number (текст) и vehicle_crop_jpeg (картинка jpeg). Ну или все если это можно обработать в одной строке HTTP типа:

https://api.telegram.org/bot400000393:AAF2ZmXoDG***************ijNRs/sendMessage?chat_id=-1000000000099&text="json(best_plate_number)"

Вообще это возможно? Может пнете что почитать.

Источник

Простой Telegram бот на Python, метод getUpdates

Простой Telegram бот на Python, метод getUpdates

Из этой статьи вы узнаете, как с помощью Python можно создать Telegram бота используя для этого библиотеку requests. Этот урок будет полезен для начинающих разработчиков, для тех кто только начал познавать работу протокола HTTP в Python.

Requests - это Python HTTP библиотека, цель которого сделать запросы HTTP проще и удобнее для человека. Requests поможет вам легко разобраться с любой API.

Создаем бота

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

Шаг 1. Заходим в Telegram (для удобства можно воспользоваться web-версией), и с помощью поисковой строки находим отца всех ботов @BotFather .

Шаг 2. В беседе с @BotFather выполняем команду /newbot и даем придуманное имя, и никнейм боту (я создал бота по имени «RamasTestBot»).

Создаем бота

Шаг 3. В ответ мы получили сообщение, где указан токен и ссылка на нашего бота, переходим по ссылке и пишем боту любое сообщение.

Создаем бота

Бот готов, сейчас можно переходить к самому интересному.

Telegram API входящие сообщения

Для того что бы получить входящие обновления бота, воспользуемся методом getUpdates . Откроем в новой вкладке браузере ссылку, используя свой полученный ранее токен.

https://api.telegram.org/bot/getUpdates 

В ответ мы должны получить массив объектов, где можно увидеть отправленные нами ранее сообщением боту, в моем случае это «/start» и «Hello» (если ответ пустой, отправьте своему боту еще одно сообщение, и обновите страницу с ссылкой).

Создаем бота

Теперь осталось повторить все на Python. Напишем код, где будем отправлять GET запрос, и с помощью полученных данных в ответ (массива данных) научим программу понимать, что боту написали новое сообщение.

Для проверки выведем в консоль уникальный идентификатор пользователя, и его сообщение

import requests import time TOKEN = 'токен' URL = 'https://api.telegram.org/bot' def get_updates(offset=0): result = requests.get(f'/getUpdates?offset=').json() return result['result'] def run(): update_id = get_updates()[-1]['update_id'] # Присваиваем ID последнего отправленного сообщения боту while True: time.sleep(2) messages = get_updates(update_id) # Получаем обновления for message in messages: # Если в обновлении есть ID больше чем ID последнего сообщения, значит пришло новое сообщение if update_id < message['update_id']: update_id = message['update_id'] # Присваиваем ID последнего отправленного сообщения боту print(f"ID пользователя: , Сообщение: ") if __name__ == '__main__': run()

Создаем бота

Создаем бота

Telegram API отправить сообщение

Для того, что бы отправлять сообщение от имени бота, существует метод sendMessage .

Откроем в новой вкладке браузера ссылку используя свой токен, и в параметрах укажем:

  • chat_id : уникальный id пользователя, что бы бот понял кому именно ответить (в моем случае это 792035400).
  • text : Текст самого сообщения
https://api.telegram.org/bot/sendMessage?chat_id=792035400&text=Привет, хорошо, а ты как?

Создаем бота

import requests import time TOKEN = 'токен' URL = 'https://api.telegram.org/bot' def send_message(chat_id, text): requests.get(f'/sendMessage?chat_id=&text=') if __name__ == '__main__': send_message(792035400, 'Привет, хорошо, а ты как?')

После каждого запуска программы мы увидим что наш бот отправляет сообщение Привет, хорошо, а ты как? .

Создаем простого телеграм бота

С методами getUpdates, и sendMessage API Telegram мы разобрались, используя свои знания напишем программу которая научит нашего бота отвечать на сообщение.

import requests import time TOKEN = 'токен' URL = 'https://api.telegram.org/bot' def get_updates(offset=0): result = requests.get(f'/getUpdates?offset=').json() return result['result'] def send_message(chat_id, text): requests.get(f'/sendMessage?chat_id=&text=') def check_message(chat_id, message): for mes in message.lower().replace(',', '').split(): if mes in ['привет', 'ку']: send_message(chat_id, 'Привет :)') if mes in ['дела?', 'успехи?']: send_message(chat_id, 'Спасибо, хорошо!') def run(): update_id = get_updates()[-1]['update_id'] # Присваиваем ID последнего отправленного сообщения боту while True: time.sleep(2) messages = get_updates(update_id) # Получаем обновления for message in messages: # Если в обновлении есть ID больше чем ID последнего сообщения, значит пришло новое сообщение if update_id < message['update_id']: update_id = message['update_id'] # Присваиваем ID последнего отправленного сообщения боту # Отвечаем тому кто прислал сообщение боту check_message(message['message']['chat']['id'], message['message']['text']) if __name__ == '__main__': run()

Создаем бота

Теперь наш бот может поприветствовать, и ответить, как у него дела). Скоро я выпушу вторую часть, где покажу как отправлять файлы и выводить настраиваемую клавиатуру (вторая часть).

Дополнительную информацию о методах вы можете получить в документации.

Источник

Оцените статью