0
votes

Comment devrais-je télécharger des fichiers reçus de l'API de télégramme

Je veux juste télécharger des images reçues par mon bot de télégramme avec Nodejs mais je ne connais pas la méthode de sorcière à utiliser. J'utilise Node-Telegram-Bot-API et j'ai essayé ce code: xxx

c'est le résultat: xxx


0 commentaires

3 Réponses :


1
votes
bot.on('message', async (msg) => {
    if (msg.photo && msg.photo[0]) {
        const image = await bot.getFile({ file_id: msg.photo[0].file_id });
        console.log(image);
    }
});
https://github.com/mast/telegram-bot-api/blob/master/lib/telegram-bot.js#L1407

0 commentaires

0
votes
  bot.getFile(msg.document.file_id).then((resp) => {
             console.log(resp)
         })

0 commentaires

0
votes

Il y a trois étapes: une demande d'API pour obtenir le "répertoire de fichiers" sur le télégramme. Utilisez ce "répertoire de fichiers" pour créer "URL de téléchargement". Utilisez le module "Demande" pour télécharger le fichier.

const fs = require('fs');
const request = require('request');
require('dotenv').config();
const path = require('path');
const fetch = require('node-fetch');

// this is used to download the file from the link
const download = (url, path, callback) => {
    request.head(url, (err, res, body) => {
    request(url).pipe(fs.createWriteStream(path)).on('close', callback);
  });
};
// handling incoming photo or any other file
bot.on('photo', async (doc) => {

    // there's other ways to get the file_id we just need it to get the download link
    const fileId = doc.update.message.photo[0].file_id;

    // an api request to get the "file directory" (file path)
    const res = await fetch(
      `https://api.telegram.org/bot${process.env.BOT_TOKEN}/getFile?file_id=${fileId}`
    );
    // extract the file path
    const res2 = await res.json();
    const filePath = res2.result.file_path;

    // now that we've "file path" we can generate the download link
    const downloadURL = 
      `https://api.telegram.org/file/bot${process.env.BOT_TOKEN}/${filePath}`;

    // download the file (in this case it's an image)
    download(downloadURL, path.join(__dirname, `${fileId}.jpg`), () =>
      console.log('Done!')
     );
});    


0 commentaires