2016-12-11 4 views
1

Ich versuche, ein Youtube-Video-Audio mit dem Modul ytdl-core (https://github.com/fent/node-ytdl-core) herunterladen.Herunterladen einer Audiodatei mit Express API und YTDL

Ich schrieb eine API-Express verwendet, die ich ein Audio durch seine URL kann heruntergeladen werden:

app.get('/api/downloadYoutubeVideo', function (req, res) { 
    res.set('Content-Type', 'audio/mpeg');  

    var videoUrl = req.query.videoUrl; 
    var videoName; 

    ytdl.getInfo(videoUrl, function(err, info){ 
     videoName = info.title.replace('|','').toString('ascii'); 
     res.set('Content-Disposition', 'attachment; filename=' + videoName + '.mp3');  
    }); 

    var videoWritableStream = fs.createWriteStream('C:\\test' + '\\' + videoName); // some path on my computer (exists!) 
    var videoReadableStream = ytdl(videoUrl, { filter: 'audioonly'}); 

    var stream = videoReadableStream.pipe(videoWritableStream); 

}); 

Das Problem ist, dass, wenn ich rufe diesen API Ich erhalte einen 504 Fehler von meinem Server.

Ich möchte in der Lage sein, diese heruntergeladene Audio auf meiner lokalen Festplatte zu speichern.

Hilfe wäre willkommen. Danke

Antwort

0

Nun, aus irgendeinem Grund war der videoName undefined, so dass es meine Funktion vermasselt ... Hier ist der richtige Code nach ein paar Änderungen und Hinzufügen des Zielpfads als Abfragevariable.

app.get('/api/downloadYoutubeVideo', function (req, res) { 
    var videoUrl = req.query.videoUrl; 
    var destDir = req.query.destDir; 

    var videoReadableStream = ytdl(videoUrl, { filter: 'audioonly'}); 

    ytdl.getInfo(videoUrl, function(err, info){ 
     var videoName = info.title.replace('|','').toString('ascii'); 

     var videoWritableStream = fs.createWriteStream(destDir + '\\' + videoName + '.mp3'); 

     var stream = videoReadableStream.pipe(videoWritableStream); 

     stream.on('finish', function() { 
      res.writeHead(204); 
      res.end(); 
     });    
    });    
});