8

我有一个电报机器人(用 python 开发),我想通过它从我电脑中的图像发送/上传照片。

所以我应该通过多部分表单数据来做到这一点。

但我不知道该怎么做。我也没有在 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)

谁能帮我?

4

4 回答 4

7

试试这行代码

status = requests.post("https://api.telegram.org/bot<TOKEN>/sendPhoto?chat_id=" + data['chat_id'], files=files)
于 2017-10-22T07:06:24.120 回答
2

DelimitryPyae 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()- 只要datafiles变量都是字典。

于 2020-03-29T14:08:12.763 回答
1

您需要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)
于 2018-02-10T21:13:28.877 回答
0

您的问题已经被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)

于 2021-11-29T08:27:19.387 回答