как отправить фото ботом телеграммы, используя multipart/form-data

У меня есть телеграмм-бот (разработанный на питоне), и я хочу отправить/загрузить фото с его помощью с изображений, которые есть на моем компьютере.

поэтому я должен сделать это с помощью данных из нескольких частей.

но я не знаю, как это сделать. также я не нашел полезного источника для этого в Интернете и в документации по телеграмме.

Я пытался сделать это с помощью приведенных ниже кодов. но это было неправильно

data = {'chat_id', chat_id}
            files = {'photo': open("./saved/{}.jpg".format(user_id), 'rb')}
            status = requests.post("https://api.telegram.org/bot<TOKEN>/sendPhoto",data=data, files=files)

Может кто-нибудь помочь мне?


person mmsamiei    schedule 14.05.2017    source источник


Ответы (3)


Попробуйте эту строку кода

status = requests.post("https://api.telegram.org/bot<TOKEN>/sendPhoto?chat_id=" + data['chat_id'], files=files)
person Pyae Hlian Moe    schedule 22.10.2017

Оба ответа от Delimitry и Pyae Hlian Moe верны в том смысле, что они работают, но ни один из них не решает реальной проблемы с предоставленным вами кодом.

Проблема в том, что data определяется как:

data = {'chat_id', chat_id}

который представляет собой набор (не словарь) с двумя значениями: строкой 'chat_id' и содержимым chat_id вместо

data = {'chat_id' : chat_id}

который представляет собой словарь с ключом: строкой 'chat_id' и соответствующим значением, хранящимся в chat_id.

chat_id можно определить как часть URL-адреса, но аналогичным образом ваш исходный код также должен работать — определение данных и файлов в качестве параметров для requests.post() — если обе переменные data и files являются словарями.

person vander    schedule 29.03.2020
comment
Как я могу определить files как часть URL-адреса, а не как параметр? - person Sherafati; 20.06.2020

Вам нужно передать параметр chat_id в URL:

files = {'photo': open('./saved/{}.jpg'.format(user_id), 'rb')}
status = requests.post('https://api.telegram.org/bot<TOKEN>/sendPhoto?chat_id={}'.format(chat_id), files=files)
person Delimitry    schedule 10.02.2018