2014-05-14 57 views

回答

0

使用youtube-feeds模塊。工程快(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 
3

我想不出辦法的,不涉及製作一個單獨的HTTP請求視頻鏈接以查看它是否存在,除非您事先知道一組無效,無效或錯誤的視頻ID。

下面是一些可能適合您的示例。我不能立即告訴你是否將它用作獨立腳本或作爲Web服務器的一部分。下面的例子假設後者假設你調用了一個/video?123videoId上的網絡服務器,並讓它響應或根據是否存在具有該ID的視頻進行操作。它使用節點的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

你可以用'HEAD',而不是'GET' –

+0

抱歉,這個方法不是爲我工作:八方通狀態代碼200,即使沒有視頻存在 –

0

@rodrigomartell是在正確的軌道,在您檢查功能將需要發出HTTP調用上;但是,在大多數情況下,僅檢查youtube.com網址將不起作用。如果videoID是一個格式不正確的ID(例如,少於11個字符或使用在他們的方案中無效的字符),那麼您將得到404,但如果它是正確形成的videoID,恰好與視頻不匹配,則會還是拿回了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; 
    } 
}); 
}; 
+0

我有問題越來越'API_KEY',我配置了,但無論如何得迴應消息:'訪問未配置。請使用Google Developers Console爲您的項目啓用API –

4

你不」噸需要使用每本身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響應代碼。

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不是必需的。這是相當快的,因爲只有狀態碼200/404的標題檢查和圖像未加載。

相關問題