如何下载发送到Telegram bot的文件或照片?

时间:2015-06-28 05:11:01

标签: api telegram-bot

我正在使用电报机器人API,但无论如何我无法下载发送到我的机器人的filé。我得到了该文件的哈希,但不知道如何处理它。有什么办法吗?谢谢。

6 个答案:

答案 0 :(得分:51)

现在可用!

https://core.telegram.org/bots/api#getfile

万岁!它于9月18日被添加:

https://core.telegram.org/bots/api

<强>用法:

在邮件的JSON中,您将像以前一样收到 file_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
  }
}

通过API的getFile,您现在可以获得该文件所需的路径信息:

https://api.telegram.org/bot<bot_token>/getFile?file_id=the_file_id

这将返回 file_id file_size file_path 的对象。然后,您可以使用 file_path 下载文件:

https://api.telegram.org/file/bot<token>/<file_path>

请注意,此链接仅在一小时内可用。一小时后,您可以请求其他链接。这意味着如果您想以某种方式托管文件,而不是每次提供服务时都避免检查和重新检查新链接,那么最好将文件下载到您自己的托管服务。

通过此方法获得的文件的最大大小 20MB。 错误:使用大于20mb的文件时获得。(如下所示)

{"ok":false,"error_code":400,"description":"Bad Request: file is too big[size:1556925644]"}

来自电报的文档:

  

成功时,返回File对象。然后可以通过链接https://api.telegram.org/file/bot /下载该文件,其中从响应中获取。保证链接有效至少1小时。当链接过期时,可以通过再次调用getFile来请求新的链接。目前,机器人可以下载最大20MB的文件。

答案 1 :(得分:9)

It's just added at September 18, 2015!

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

您可以使用getFile(file_id)。此函数返回包含file_path的File对象。您可以通过以下地址下载文件:

https://api.telegram.org/file/bot<token>/<file_path>

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

答案 2 :(得分:5)

尚未使用处理文件的方法。 资料来源:twitter上的电报

https://twitter.com/telegram/status/614468951926509568

答案 3 :(得分:4)

如果你有file_id,那么你需要使用sendDocumentsendPhoto方法,如果你想发送给自己,你需要告诉你的机器人你的用户名或你的聊天ID(在一对一聊天中也一样。)

答案 4 :(得分:2)

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

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)

答案 5 :(得分:0)

还请注意,Telegram api(由webhook提供)提供缩略图道具,对于图像和gif,它将提供文件的缩略图。要获取源文件,您需要检查根对象file_id。