如何检查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和图像不加载。