Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.4k views
in Technique[技术] by (71.8m points)

api - How do I download a file or photo that was sent to my Telegram bot?

I am using the telegram bot API but I cant see anyway to download a filé that was sent to my bot. I get a hash of the file but dont know what to do with it. Is there any way? Thanks.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This is now available!

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

Hooray! It was added on Sep 18th:

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

Usage:

In the JSON of the message you will receive a file_id as before. An example of a message object with a voice file:

{
  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
  }
}

Via the API's getFile you can now get the required path information for the file:

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

This will return an object with file_id, file_size and file_path. You can then use the file_path to download the file:

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

Note that this link will only be available for an hour. After an hour you can request another link. This means that if you want to host the file somehow and you rather avoid checking and re-checking for fresh links every time you serve it you might be better off downloading the file to your own hosting service.

The maximum size of a file obtained through this method is 20MB. Error: Obtained when a file large than 20mb is used.(Shown below)

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

From telegram's docs:

On success, a File object is returned. The file can then be downloaded via the link https://api.telegram.org/file/bot/, where is taken from the response. It is guaranteed that the link will be valid for at least 1 hour. When the link expires, a new one can be requested by calling getFile again.For the moment, bots can download files of up to 20MB in size.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...