Api 如何下载发送到电报机器人的文件或照片?

Api 如何下载发送到电报机器人的文件或照片?,api,telegram-bot,Api,Telegram Bot,我正在使用telegram机器人API,但我无法下载发送到我的机器人的文件。我得到了一份文件的散列,但不知道如何处理它。有办法吗?谢谢 如果你有文件id,那么你需要使用或方法,如果你想发送给自己,你需要告诉你的机器人你的用户id或聊天id(在一对一聊天中相同)。处理文件的方法还不可用。 来源:推特上的电报 现在可以使用了 万岁!于9月18日添加: 用法: 在消息的JSON中,您将收到一个与前面一样的文件id。带有语音文件的消息对象示例: { message_id: 2675, fro

我正在使用telegram机器人API,但我无法下载发送到我的机器人的文件。我得到了一份文件的散列,但不知道如何处理它。有办法吗?谢谢

如果你有文件id,那么你需要使用或方法,如果你想发送给自己,你需要告诉你的机器人你的用户id或聊天id(在一对一聊天中相同)。

处理文件的方法还不可用。 来源:推特上的电报


现在可以使用了

万岁!于9月18日添加:

用法:

在消息的JSON中,您将收到一个与前面一样的文件id。带有语音文件的消息对象示例:

{
  message_id: 2675,
  from: {
    id: 10000001,
    first_name: 'john',
    username: 'john'
  },
  chat: {
    id: 10000001,
    first_name: 'john',
    username: 'john'
  },
  date: 1442848171,
  voice: {
    duration: 2,
    mime_type: 'audio/ogg',
    file_id: 'AwADBAADYwADO1wlBuF1ogMa7HnMAg',  //  <------- file_id
    file_size: 17746
  }
}
从电报文件:

成功时,将返回一个文件对象。然后可以通过link/下载该文件,该链接取自响应。保证该链接至少在1小时内有效。当链接过期时,可以通过再次调用getFile请求新的链接。目前,机器人程序可以下载最大为20MB的文件

耶!2015年9月18日刚刚添加

您可以使用
getFile(file\u id)
。此函数返回包含
文件路径的文件对象。您可以通过以下地址下载该文件:

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

如中所述,文件对象的有效期约为一小时。如果旧的文件对象过期,您应该再次调用
getFile
以获取新的文件对象。

如果您正在使用,您可以使用以下代码下载照片:

raw = message.photo[2].file_id
path = raw+".jpg"
file_info = bot.get_file(raw)
downloaded_file = bot.download_file(file_info.file_path)
with open(path,'wb') as new_file:
    new_file.write(downloaded_file)

另外,请注意,电报api(由webhook提供)提供了缩略图道具,对于图像和GIF,它将提供文件的缩略图。要获取源文件,需要检查根对象文件的id。

OP询问的是接收,而不是发送。将文件转发或重新发送给您自己只会给您留下同样的问题。如果bot将文件发送给我,那么我可以从与bot的对话下载到我的手机或我的计算机(从电报本身)。根据您的评论,Arthur希望在bot中接收消息,然后bot将图像或文件下载到服务器(de bot正在运行的地方)?我现在明白您的意思了。但是,是的,通常你会希望机器人自动下载文件并以某种方式处理它。这就是拥有机器人的意义所在。为了澄清这一点,getFile API调用必须在GET查询字符串中包含一个
?file_id=the_file_id
。当我使用/getFile时,我有时无法获取文件路径,例如,当文件为ogg时,定义了文件路径并正确下载了文件,但当文件为mp3文件路径时,没有定义,只需返回文件id和文件大小!值得一提的是,这方面的电报文件并没有多大帮助。这里的有用信息是“”和“api.telegram.org/file/bot/”谢谢,您的回答对我帮助很大。getFile端点的格式是什么?我试过/getFile、/getFile?file_id=xxx、getFile(xxx)但都没用。照片[2]那里有4个版本的照片。如果我想下载更小的[0],零索引是我的吗?php示例代码怎么样?
https://api.telegram.org/file/bot<token>/<file_path>
{"ok":false,"error_code":400,"description":"Bad Request: file is too big[size:1556925644]"}
raw = message.photo[2].file_id
path = raw+".jpg"
file_info = bot.get_file(raw)
downloaded_file = bot.download_file(file_info.file_path)
with open(path,'wb') as new_file:
    new_file.write(downloaded_file)