4

ytdl-coreモジュール ( https://github.com/fent/node-ytdl-core )を使用して Youtube ビデオ オーディオをダウンロードしようとしています。

Express を使用して、URL でオーディオをダウンロードできる API を作成しました。

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);

});

問題は、この API を呼び出すと、サーバーから 504 エラーが発生することです。

このダウンロードしたオーディオをローカル ディスクに保存できるようにしたいと考えています。

助けていただければ幸いです。ありがとうございました

4

1 に答える 1

3

何らかの理由で videoName が定義されていなかったため、関数が台無しになりました...いくつかの変更を加え、クエリ変数として宛先パスを追加した後の正しいコードを次に示します。

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();
       });              
   });              
});
于 2016-12-12T14:27:42.770 に答える