检查服务器端如果YouTube视频存在(check on server side if youtub

2019-10-20 03:42发布

如何检查是否在node.js的应用程序服务器端的YouTube视频的存在:

var youtubeId = "adase268_";

// pseudo code
youtubeVideoExist = function (youtubeId){
   return true; // if youtube video exists
}

Answer 1:

你并不需要使用每本身YouTube的API,你可以看看缩略图:

有效的视频= 200 - OK:

http://img.youtube.com/vi/gC4j-V585Ug/0.jpg

无效的视频= 404 - 未找到:

http://img.youtube.com/vi/gC4j-V58xxx/0.jpg

我以为我可以使从浏览器这项工作,因为你可以加载第三方网站的图片没有安全问题。 但测试它,它未能报告404错误,可能是因为内容主体仍然是一个有效的图像。 由于您使用的节点,你应该能够在HTTP响应代码直视。



Answer 2:

我想不出不涉及制作一个单独的HTTP请求到视频链接,看看它的存在与否,除非你事先一组是无效的,死的,或者错误的视频ID的人都知道的方法。

下面是一些可能为你工作的例子。 我不能随便说,如果你正在使用这个作为一个独立的脚本或作为Web服务器的一部分。 下面的示例假设后者,假设你调用一个Web服务器/video?123videoId并让它响应或根据与该ID的视频中是否存在做一些事情。 它使用节点的请求库,你可以安装npm install request

var request = require('request');

// Your route here. Example on what route may look like if called on /video?id=123videoId
app.get('/video', function(req, response, callback){
    var videoId = 'adase268_'; // Could change to something like request.params['id']
    request.get('https://www.youtube.com/watch?v='+videoId, function(error, response, body){
        if(response.statusCode === 404){
            // Video doesn't exist. Do what you need to do here.
        }
        else{
            // Video exists.
            // Can handle other HTTP response codes here if you like.
        }
    });
});

// You could refactor the above to take out the 'request.get()', wrap it in a function
// that takes a callback and re-use in multiple routes, depending on your problem.


Answer 3:

@rodrigomartell是在正确的轨道,在您检查功能将需要发出HTTP调用上; 然而,仅仅检查youtube.com网址不会在大多数情况下工作。 你会得到一个404,如果VideoID的是一个畸形的ID(即小于11个字符或使用的字符在他们的方案不是有效的),但如果它是恰好没有对应的视频格式正确的视频ID,你会还是拿回了200元。这将是更好地使用API​​请求,像这样的(注意,这可能是更容易使用的请求 - JSON库,而不是仅仅请求库):

request = require('request-json');

var client = request.newClient('https://www.googleapis.com/youtube/v3/');

youtubeVideoExist = function (youtubeId){
 var apikey ='YOUR_API_KEY'; // register for a javascript API key at the Google Developer's Console ... https://console.developers.google.com/
 client.get('videos/?part=id&id='+youtubeId+'&key='+apikey, function(err, res, body) {
  if (body.items.length) {
   return true; // if youtube video exists
  }
  else {
   return false;
  }
 });
};


Answer 4:

使用YouTube的喂入模块。 工程快(200毫秒〜),无需API_KEY

youtube = require("youtube-feeds");

existsFunc = function(youtubeId, callback) {
  youtube.video(youtubeId, function(err, result) {
    var exists;
    exists = result.id === youtubeId;
    console.log("youtubeId");
    console.log(youtubeId);
    console.log("exists");
    console.log(exists);
    callback (exists);
  });
};


var notExistentYoutubeId = "y0srjasdkfjcKC4eY"
existsFunc (notExistentYoutubeId, console.log)

var existentYoutubeId = "y0srjcKC4eY"
existsFunc (existentYoutubeId, console.log)

输出:

❯ node /pathToFileWithCodeAbove/FileWithCodeAbove.js
youtubeId
y0srjcKC4eY
exists
true
true
youtubeId
y0srjasdkfjcKC4eY
exists
false
false


Answer 5:

所有你需要的是寻找缩略图。 在它的NodeJS会像

var http = require('http');

function isValidYoutubeID(youtubeID) {
  var options = {
    method: 'HEAD',
    host: 'img.youtube.com',
    path: '/vi/' + youtubeID + '/0.jpg'
  };

  var req = http.request(options, function(res) {
    if (res.statusCode == 200){
        console.log("Valid Youtube ID");
    } else {
        console.log("Invalid Youtube ID");
    }
  });

  req.end();
}

不需要API_KEY。 这是相当快的,因为只有对的StatusCode四百零四分之二百头校验和图像不加载。



文章来源: check on server side if youtube video exist