我正在使用电报机器人API,但无论如何我无法下载发送到我的机器人的filé.我得到了该文件的哈希,但不知道如何处理它.有什么办法吗?谢谢.
Guy*_*Guy 53
这是现在可用!
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
}
}
Run Code Online (Sandbox Code Playgroud)
通过API的getFile,您现在可以获得该文件所需的路径信息:
https://api.telegram.org/bot<bot_token>/getFile?file_id=the_file_id
Run Code Online (Sandbox Code Playgroud)
这将返回一个带有file_id,file_size和file_path的对象.然后,您可以使用file_path下载文件:
https://api.telegram.org/file/bot<token>/<file_path>
Run Code Online (Sandbox Code Playgroud)
请注意,此链接仅在一小时内可用.一小时后,您可以请求其他链接.这意味着,如果您想以某种方式托管文件,而不是每次提供服务时都避免检查和重新检查新链接,那么最好将文件下载到您自己的托管服务中.
通过此方法获得的文件的最大大小为20MB. 错误:使用大于20mb的文件时获取.(如下所示)
{"ok":false,"error_code":400,"description":"Bad Request: file is too big[size:1556925644]"}
Run Code Online (Sandbox Code Playgroud)
来自电报的文档:
成功时,返回File对象.然后可以通过链接https://api.telegram.org/file/bot/下载该文件,其中取自响应.保证链接有效至少1小时.当链接过期时,可以通过再次调用getFile来请求新的链接.目前,机器人可以下载最大20MB的文件.
zxc*_*ran 10

好极了!它刚刚于2015年9月18日添加
你可以用getFile(file_id).此函数返回包含的File对象file_path.您可以通过以下地址下载文件:
https://api.telegram.org/file/bot<token>/<file_path>
如Telegram Bot API文档中所述,File对象有效约一小时.getFile如果旧的File对象过期,您应该再次调用以获取新的File对象.
如果您使用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)
Run Code Online (Sandbox Code Playgroud)