63

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

4

6 回答 6

88

现在可以使用了!

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_idfile_sizefile_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 的文件。

于 2015-09-20T13:29:31.503 回答
12

它是在 2015 年 9 月 18 日刚刚添加的!

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

您可以使用getFile(file_id). 此函数返回一个包含file_path. 你可以通过这个地址下载文件:

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

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

于 2015-09-21T14:07:58.007 回答
5

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

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

于 2015-07-02T19:07:21.693 回答
5

如果您使用的是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)
于 2016-05-14T10:38:48.983 回答
2

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

于 2015-06-29T16:25:24.503 回答
0

另外,请注意,Telegram api(通过 webhook)提供thumbs属性,对于图像和 gif,它将提供文件的缩略图。要获取源文件,您需要检查根对象 file_id。

于 2020-06-07T20:07:18.907 回答