web-dev-qa-db-fra.com

Comment télécharger un fichier ou une photo qui a été envoyé à mon bot Telegram?

J'utilise l'API de télégramme bot, mais je ne vois pas comment télécharger un fichier qui a été envoyé à mon bot. Je reçois un hachage du fichier mais je ne sais pas quoi en faire. Y a-t-il un moyen? Merci.

41
Arthur Felipe

Ceci est maintenant disponible!

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

Hourra! Il a été ajouté le 18 septembre:

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

Utilisation:

Dans le JSON du message, vous recevrez un id_fichier comme auparavant. Exemple d'objet de message avec un fichier vocal:

{
  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 le getFile de l'API, vous pouvez maintenant obtenir les informations de chemin requises pour le fichier:

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

Ceci retournera un objet avec file_id , file_size et chemin_fichier . Vous pouvez ensuite utiliser le chemin file_path pour télécharger le fichier:

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

Notez que ce lien ne sera disponible que pendant une heure. Après une heure, vous pouvez demander un autre lien. Cela signifie que si vous souhaitez héberger le fichier d'une manière ou d'une autre et que vous évitez plutôt de vérifier et de vérifier chaque fois que de nouveaux liens sont créés, il peut être préférable de télécharger le fichier sur votre propre service d'hébergement.

La taille maximale d'un fichier obtenue par cette méthode est de 20 Mo. Erreur: Obtenu lorsqu'un fichier d'une taille supérieure à 20 Mo est utilisé. (Voir ci-dessous).

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

De la documentation du télégramme:

En cas de succès, un objet File est renvoyé. Le fichier peut ensuite être téléchargé via le lien https://api.telegram.org/file/bot /, où est extrait de la réponse. Il est garanti que le lien sera valide pendant au moins 1 heure. Lorsque le lien expire, vous pouvez en demander un nouveau en appelant à nouveau getFile.Pour le moment, les robots peuvent télécharger des fichiers d'une taille maximale de 20 Mo.

53
Guy

It's just added at September 18, 2015!

Yay! Il vient d'être ajouté au 18 septembre 2015

Vous pouvez utiliser getFile(file_id). Cette fonction retourne un objet File contenant file_path. Vous pouvez télécharger le fichier via cette adresse:

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

Comme mentionné dans Documentation de l'API Telegram Bot , l'objet Fichier sera valide pendant environ une heure. Vous devez à nouveau appeler getFile pour obtenir un nouvel objet File si l'ancien avait expiré.

9
zxcmehran

La méthode pour travailler avec des fichiers n'est pas encore disponible. Source: télégramme sur Twitter

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

5
Gosh Hernandez

Si vous avez le file_id, vous devez utiliser les méthodes sendDocument ou sendPhoto , si vous souhaitez vous envoyer à vous-même, vous devez indiquer à votre bot votre identifiant utilisateur ou votre chat. id (identique dans une conversation en tête-à-tête).

4
delaf

Si vous utilisez pyTelegramBotAPI , vous pouvez télécharger votre photo en utilisant le code suivant:

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