テレグラム ボット API を使用していますが、ボットに送信されたファイルをダウンロードする方法がわかりません。ファイルのハッシュを取得しましたが、それをどうするかわかりません。何か方法はありますか?ありがとう。
6 に答える
これが利用可能になりました!
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>
このリンクは 1 時間しか利用できないことに注意してください。1 時間後に別のリンクをリクエストできます。これは、ファイルを何らかの形でホストしたい場合で、提供するたびに新しいリンクをチェックして再チェックすることを避けたい場合は、独自のホスティング サービスにファイルをダウンロードすることをお勧めします。
この方法で取得できるファイルの最大サイズは20MB です。 Error: 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 のサイズのファイルをダウンロードできます。
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)