如何使用python youtube-dl和meteorjs

时间:2016-02-20 03:50:31

标签: video meteor youtube meteor-blaze youtube-dl

在我的meteor应用程序中,我使用youtube-dl从youtube和其他网站下载视频; 实际上,我可以使用下面的代码从服务器端获取有关视频的信息

 var exec = Meteor.npmRequire('child_process').exec;
  var Future = Meteor.npmRequire("fibers/future");

Meteor.methods({
    'comman': function(url){
      this.unblock();
      var future = new Future();

      exec("youtube-dl -F " + url, function(error, stdout, stderr) {

        future.return({stdout: stdout, stderr: stderr});
      }); 

      return future.wait();
    }
});

客户端的电话

Meteor.call('comman', url, function(error, result){
        if (result.stdout) {
          console.log('output:' + result.stdout);

       } else {
          console.log('error:'+ result.stderr);
       }
      });

下一步是用户可以看到视频的缩略图,可用的格式列表,能够从客户端下载并保存他想要的格式;

我该怎么做? 有什么想法吗?

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

您必须将此包https://atmospherejs.com/meteorhacks/npm添加到Meteor应用程序才能使用Npm包。

然后使用https://www.npmjs.com/package/ytdl-core而不是使用youtube-dl的exec命令,它更容易。要使用它,您必须在主文件夹中添加packages.json:

{
  "ytdl-core":"0.7.9",
}

现在在server.js上使用ydtl-core示例创建一个方法。您需要使用Futures等待响应并将其返回给客户:

// load future from fibers
var Future = Meteor.npmRequire("fibers/future");

// load ytdl-core
var ytdl = Meteor.npmRequire('ytdl-core');

Meteor.methods({
  // Get info from Youtube video
  'getVideoInfo':function(videoUrl) {
    this.unblock();
    var future = new Future();

    ytdl.getInfo(videoUrl, function(err, result) {
      future.return(result)
    });
    return future.wait();
  },
});

在client.js上:

var videoUrl = "http://youtube.com/watch?v=I8qtzxpDM4k";

Meteor.call('getVideoInfo', videoUrl, function(err, result) {
  console.log(result);
  console.log (result.thumbnail_url);
}

编辑:要下载视频,您可以创建一个链接,然后使用javascript点击它。您必须选择要下载的格式。在这个例子中,我正在下载第一个可用的格式。

在client.js上

var videoUrl = "http://youtube.com/watch?v=I8qtzxpDM4k";

Meteor.call('getVideoInfo', videoUrl, function(err, result) {
  console.log(result);
  console.log (result.thumbnail_url);
  downloadLink(result.formats[0].url);
}

downloadLink = function(link) {
  //Create url to download from
  var url = document.createElement('a');
  // Add direct video link to a clickable link
  url.setAttribute('href', link);
  // Add download attribute to initiate download
  url.setAttribute('download', 'filename.mp4');
  // Click to start download
  url.click();
}