2017-08-07 4 views
0

私はyoutube-dlをjavascriptスクリプトに入れて、何百ものキャプションファイルをダウンロードしようとしています。私はエラーが発生していますjavascriptスクリプトでyoutube-dlエラー

私はjavascriptスクリプトを持っています。私はyoutube-dlを使用して〜800のキャプションファイルをダウンロードしようとしています。タイムアウトエラーが発生していて、ファイルをダウンロードしていません。私のコンピュータでは動きが速すぎるようです。ダウンロードが完了してから次のタスクを開始するまで、タスクを一時停止するためのヘルプが必要です。

ビデオアレイではデータが非常に少なくなっています。

var json2csv = require('json2csv'); 
var fs = require('fs'); 
var youtubedl = require('youtube-dl'); 

// var fields = ["youtube_id", "title", "date", "duration", "captioned", "views"]; 

var videos = [ 
// More objects ~800+ 
]; 
for (i = 0; i < videos.length; i++) { 

    var v = videos[i]; 
    var url = 'https://youtu.be/'; 
    var options = {}; 

    if (v["captioned"] == 'No') { 
     var url = url + v["youtube_id"]; 

     console.log(url); 
     var options = { 
     auto: true, 
     all: false, 
     lang: 'en', 
     cwd: __dirname + "/auto_generated_captions", 
     }; 
       youtubedl.getSubs(url, options, function(err, files) { 
       console.log("did i get here?"); 
       if (err) throw err; 
       console.log('subtitle files downloaded:', files); 
       }); 

    }; 
    }; 

答えて

1

あなたは正しいです。あまりにも多くのデータを同時にダウンロードします。 bluebirdのような約束ライブラリを使って並行性の流れを制御しようとする:

var json2csv = require('json2csv'); 
var fs = require('fs'); 
var youtubedl = require('youtube-dl'); 
var promise = require('bluebird'); 

// var fields = ["youtube_id", "title", "date", "duration", "captioned", "views"]; 

var videos = [ 
    // More objects ~800+ 
]; 

promise 
    .map(videos, function (v) { 
    var url = 'https://youtu.be/'; 
    var options = {}; 

    if (v["captioned"] == 'No') { 
     var url = url + v["youtube_id"]; 

     console.log(url); 
     var options = { 
     auto: true, 
     all: false, 
     lang: 'en', 
     cwd: __dirname + "/auto_generated_captions", 
     }; 

     return new Promise(function (resolve, reject) { 
     youtubedl.getSubs(url, options, function (err, files) { 
      console.log("did i get here?"); 

      if (err) { 
      reject(err); 
      } else { 
      console.log('subtitle files downloaded:', files); 
      resolve(files); 
      } 
     }); 
     }); 
    } else { 
     // return a promise for this case 
    } 
    }, { concurrency: 5 }) 
    .then(function (results) { 
    console.log(results); 
    }); 
関連する問題