Hoe download ik een bestand of foto die naar mijn Telegram-bot is gestuurd?

Ik gebruik de telegram-bot-API, maar ik kan hoe dan ook niet zien hoe ik een bestand kan downloaden dat naar mijn bot is verzonden. Ik krijg een hash van het bestand, maar weet niet wat ik ermee moet doen. Is er een manier? Bedankt.


Antwoord 1, autoriteit 100%

Dit is nu beschikbaar!

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

Hoera! Het is toegevoegd op 18 september:

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

Gebruik:

In de JSON van het bericht ontvang je zoals voorheen een file_id. Een voorbeeld van een berichtobject met een spraakbestand:

{
  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 getFile van de API kun je nu de vereiste padinformatie voor het bestand krijgen:

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

Hiermee wordt een object geretourneerd met file_id, file_sizeen file_path. U kunt dan het file_pathgebruiken om het bestand te downloaden:

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

Houd er rekening mee dat deze link slechts een uur beschikbaar is. Na een uur kun je een andere link aanvragen. Dit betekent dat als je het bestand op de een of andere manier wilt hosten en je liever niet elke keer dat je het serveert op nieuwe links controleert en opnieuw controleert, je het bestand misschien beter kunt downloaden naar je eigen hostingservice.

De maximale grootte van een bestand dat via deze methode wordt verkregen, is 20 MB.
Fout: Verkregen wanneer een bestand groter dan 20 MB wordt gebruikt. (Hieronder weergegeven)

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

Uit de documenten van telegram:

Bij succes wordt een File-object geretourneerd. Het bestand kan vervolgens worden gedownload via de link https://api.telegram.org/file/bot/, waar is overgenomen uit het antwoord. De link is gegarandeerd minimaal 1 uur geldig. Wanneer de link verloopt, kan een nieuwe worden aangevraagd door getFile opnieuw te bellen. Momenteel kunnen bots bestanden downloaden van maximaal 20 MB groot.


Antwoord 2, autoriteit 14%

Het is zojuist toegevoegd op 18 september 2015!

Jaaa! Het is zojuist toegevoegd op 18 september 2015

Je kunt getFile(file_id)gebruiken. Deze functie retourneert een File-object dat file_pathbevat. U kunt het bestand downloaden via dit adres:

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

Zoals vermeld in Telegram Bot API-documentatie, is het File-object ongeveer een uur. U moet getFileopnieuw aanroepen om een ​​nieuw File-object te krijgen als het oude verloopt.


Antwoord 3, autoriteit 6%

De methode om met bestanden te werken is nog niet beschikbaar.
Bron: telegram op twitter

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


Antwoord 4, autoriteit 6%

Als je pyTelegramBotAPIgebruikt, kun je je foto downloaden met deze code:

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)

Other episodes