检查服务器端是否存在YouTube视频



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

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

您不需要使用youtube API本身,您可以查找缩略图图像:

有效视频= 200 - OK:

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

无效视频= 404 -未找到:

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

我想我可以让这个工作从浏览器,因为你可以加载图像从第三方网站没有安全问题。但是测试它时,它没有将404报告为错误,可能是因为内容主体仍然是一个有效的图像。由于使用的是node,因此应该能够直接查看HTTP响应代码。

我想不出一种不涉及对视频链接进行单独的HTTP请求以查看它是否存在的方法,除非您事先知道一组无效,死亡或错误的视频id。

这里有一个可能对你有用的例子。我不能很容易地告诉你是否使用它作为一个独立的脚本或作为一个web服务器的一部分。下面的例子假设后者,假设你在/video?123videoId上调用一个web服务器,并让它根据该ID的视频是否存在做出响应或做一些事情。它使用Node的请求库,您可以使用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.

@rodrigomartell在正确的轨道上,因为您的检查功能将需要进行HTTP调用;然而,在大多数情况下,仅仅检查youtube.com URL是行不通的。如果videoID是一个畸形的ID(即少于11个字符或使用在其方案中无效的字符),您将返回404,但如果它是一个正确形成的videoID,恰好不对应于视频,您仍然会返回200。最好使用API请求,就像这样(注意,使用request-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;
  }
 });
};

使用youtube-feeds模块。工作速度快(~200ms),无需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

您所需要的就是查找缩略图图像。在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 200/404和图像不加载。

相关内容

  • 没有找到相关文章

最新更新