如何检查node.js应用服务器端是否存在youtube视频:
var youtubeId = "adase268_";
// pseudo code
youtubeVideoExist = function (youtubeId){
return true; // if youtube video exists
}
答案 0 :(得分:4)
您不需要使用youtube API本身,您可以查找缩略图:
有效视频= 200 - 确定:
http://img.youtube.com/vi/gC4j-V585Ug/0.jpg
视频无效= 404 - 未找到:
http://img.youtube.com/vi/gC4j-V58xxx/0.jpg
我认为我可以在浏览器中完成这项工作,因为您可以从第三方网站加载图像而不会出现安全问题。但是测试它,它没有将404报告为错误,可能是因为内容主体仍然是有效的图像。由于您正在使用节点,因此您应该能够直接查看HTTP响应代码。
答案 1 :(得分:3)
我想不出一种方法,不涉及向视频链接发出单独的HTTP请求以查看它是否存在,除非您事先知道一组不活动,死或错误的视频ID
这是一个可能对你有用的例子。我不能轻易判断您是将其用作独立脚本还是作为Web服务器的一部分。下面的示例假设后者,假设您在/video?123videoId
上调用Web服务器并让它响应或执行某些操作,具体取决于具有该ID的视频是否存在。它使用Node的request库,您可以使用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.
答案 2 :(得分:0)
@rodrigomartell在正确的轨道上,因为你的检查功能需要进行HTTP调用;但是,在大多数情况下,只检查youtube.com网址是行不通的。如果videoID是格式错误的ID(即少于11个字符或使用其方案中无效的字符),您将获得404,但如果它是正确形成的视频ID,恰好与视频不对应,您将会仍然得到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;
}
});
};
答案 3 :(得分:0)
使用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
答案 4 :(得分:0)
您只需要查找缩略图。在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只有标题检查而且没有加载图像。