如何检查是否在node.js的应用程序服务器端的YouTube视频的存在:
var youtubeId = "adase268_";
// pseudo code
youtubeVideoExist = function (youtubeId){
return true; // if youtube video exists
}
如何检查是否在node.js的应用程序服务器端的YouTube视频的存在:
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错误,可能是因为内容主体仍然是一个有效的图像。 由于您使用的节点,你应该能够在HTTP响应代码直视。
我想不出不涉及制作一个单独的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.
@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;
}
});
};
使用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
所有你需要的是寻找缩略图。 在它的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四百零四分之二百头校验和图像不加载。