如何使用 multipart/form-data 通过电报机器人发送照片
how to send photo by telegram bot using multipart/form-data
我有一个电报机器人(在 python 中开发),我想 send/upload 从我计算机中的图像中拍摄照片。
所以我应该通过多部分表单数据来完成。
但我不知道该怎么做。我也没有在 Internet 和电报文档中找到有用的资源。
我试图通过以下代码来做到这一点。但这是错误的
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)
谁能帮帮我?
试试这行代码
status = requests.post("https://api.telegram.org/bot<TOKEN>/sendPhoto?chat_id=" + data['chat_id'], files=files)
您需要在URL中传递chat_id
参数:
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)
Delimitry 和 Pyae Hlian Moe 的两个答案都有效,但都没有解决实际问题您提供的代码。
问题是 data
被定义为:
data = {'chat_id', chat_id}
这是一个 set(不是字典),有两个值:字符串 'chat_id' 和 chat_id
,而不是
data = {'chat_id' : chat_id}
这是一个字典,有一个键:字符串'chat_id'和存储在[=13=中的对应值].
chat_id
可以定义为 url 的一部分,但类似地,您的原始代码也应该可以正常工作 - 将数据和文件定义为 requests.post()
的参数 - 只要两者都data
和 files
变量是字典。
你的问题已经被 aiogram python 框架解决了。
这是完整的例子。只需编辑 TOKEN 和 PHOTO_PATH、运行 代码并向机器人发送 /photo 命令 :)
from aiogram import Bot, Dispatcher, executor
from aiogram.types import InputFile, Message
TOKEN = "YourBotToken"
PHOTO_PATH = "img/photo.png"
bot = Bot(TOKEN)
dp = Dispatcher(bot)
@dp.message_handler(commands=["photo"])
async def your_command_handler(message: Message):
photo = InputFile(PHOTO_PATH)
await message.answer_photo(photo)
if __name__ == '__main__':
executor.start_polling(dp)
我有一个电报机器人(在 python 中开发),我想 send/upload 从我计算机中的图像中拍摄照片。
所以我应该通过多部分表单数据来完成。
但我不知道该怎么做。我也没有在 Internet 和电报文档中找到有用的资源。
我试图通过以下代码来做到这一点。但这是错误的
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)
谁能帮帮我?
试试这行代码
status = requests.post("https://api.telegram.org/bot<TOKEN>/sendPhoto?chat_id=" + data['chat_id'], files=files)
您需要在URL中传递chat_id
参数:
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)
Delimitry 和 Pyae Hlian Moe 的两个答案都有效,但都没有解决实际问题您提供的代码。
问题是 data
被定义为:
data = {'chat_id', chat_id}
这是一个 set(不是字典),有两个值:字符串 'chat_id' 和 chat_id
,而不是
data = {'chat_id' : chat_id}
这是一个字典,有一个键:字符串'chat_id'和存储在[=13=中的对应值].
chat_id
可以定义为 url 的一部分,但类似地,您的原始代码也应该可以正常工作 - 将数据和文件定义为 requests.post()
的参数 - 只要两者都data
和 files
变量是字典。
你的问题已经被 aiogram python 框架解决了。
这是完整的例子。只需编辑 TOKEN 和 PHOTO_PATH、运行 代码并向机器人发送 /photo 命令 :)
from aiogram import Bot, Dispatcher, executor
from aiogram.types import InputFile, Message
TOKEN = "YourBotToken"
PHOTO_PATH = "img/photo.png"
bot = Bot(TOKEN)
dp = Dispatcher(bot)
@dp.message_handler(commands=["photo"])
async def your_command_handler(message: Message):
photo = InputFile(PHOTO_PATH)
await message.answer_photo(photo)
if __name__ == '__main__':
executor.start_polling(dp)