web-dev-qa-db-ja.com

Telegramボットに送信されたファイルまたは写真をダウンロードするにはどうすればよいですか?

私は電報ボットAPIを使用していますが、とにかくボットに送信されたファイルをダウンロードすることはできません。ファイルのハッシュを取得しますが、それをどうするかわかりません。方法はありますか?ありがとう。

41
Arthur Felipe

これが利用可能になりました!

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_sizeおよびfile_path。次に、file_pathを使用してファイルをダウンロードできます。

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

このリンクは1時間のみ利用できることに注意してください。 1時間後、別のリンクをリクエストできます。これは、何らかの方法でファイルをホストし、提供するたびに新しいリンクのチェックと再チェックを避けたい場合は、独自のホスティングサービスにファイルをダウンロードすることをお勧めします。

この方法で取得されるファイルの最大サイズは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のサイズのファイルをダウンロードできます。

53
Guy

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オブジェクトは約1時間有効です。古いファイルが期限切れになった場合、新しいFileオブジェクトを取得するには、getFileを再度呼び出す必要があります。

9
zxcmehran

ファイルを操作する方法はまだ利用できません。出典:Twitterの電報

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

5
Gosh Hernandez

File_idがある場合、 sendDocument または sendPhoto メソッドを使用する必要があります。自分に送信する場合は、ボットにユーザーIDまたはチャットを伝える必要があります。 id(1対1のチャットでも同じ)。

4
delaf

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)
2
Farbod Ahmadian