我想在訪問Youtube API之前驗證YouTube視頻ID在我的網站之一中的網址,但我不知道允許的字符在這樣的ID中是什麼。我看到網上有人猜測它可以包含數字和字符,但我還沒有看到這些視頻ID的官方說明。如何驗證YouTube視頻ID?
有沒有?
我想在訪問Youtube API之前驗證YouTube視頻ID在我的網站之一中的網址,但我不知道允許的字符在這樣的ID中是什麼。我看到網上有人猜測它可以包含數字和字符,但我還沒有看到這些視頻ID的官方說明。如何驗證YouTube視頻ID?
有沒有?
查看this thread官方信息。
,你可以打這個:http://gdata.youtube.com/feeds/api/videos/VIDEO_ID
,並確定是否基於響應的視頻有效
有沒有辦法可以檢查與正則表達式的ID的有效性,因爲不是所有的字母數字值有效的ID。
p.s.我很確定我看到視頻ID的「破折號」
p.p.s. 「下劃線」是一個有效的性格也:http://www.youtube.com/watch?v=nrGk0AuFd_9
[A-ZA-Z0-9 _-] {11}是正則表達式(source),但不保證該視頻將在那裏即使正則表達式是有效
我只是看看它是否是字母數字和可能的短劃線。您可能希望查看oEmbed,您可以查詢YouTube以查看該ID是否爲有效視頻。
連字符(破折號)也允許在YouTube影片ID。 – 2015-08-02 11:04:40
我用Roman推薦的方法解決了這個問題。在我的幫助:
一定要包括你需要在文件的頂部:
require "net/http"
require "uri"
然後:
def validate_id(youtube_id)
uri = URI.parse("http://gdata.youtube.com/feeds/api/videos/#{ youtube_id }")
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
%Q{ #{response.code} }
end
確保有括號之間沒有空格的「# {response.code}」
最後,它比較所希望的響應:
def youtube_data(youtube_id)
if validate_id(youtube_id) == "200"
#video is good code
else %Q{ Video is no longer valid }
end
end
如果您正在尋找更快,更具可擴展性的解決方案,我會說如果將來有更改ID的話,可以使用帶有某些日誌記錄/回退功能的REGEX以使錯誤成爲主動。
我一直在使用YouTube API,而現在處理數以百萬計的視頻 ,通過他們的循環,我發現這是最理想的:
/^[A-Za-z0-9_-]{11}$/
更詳細的例子在PHP中說:
public static function validId($id) {
return preg_match('/^[a-zA-Z0-9_-]{11}$/', $id) > 0;
}
不應該是' AZ'而不是'Az'。 – 2015-09-16 19:40:31
這裏是PHP一個簡單的實現羅馬的辦法:
function validYoutube($id){
$id = trim($id);
if (strlen($id) === 11){
$file = @file_get_contents('http://gdata.youtube.com/feeds/api/videos/'.$id);
return !!$file;
}
return false;
}
這裏是測試:
echo validYoutube('Nv7U6_WhqvQ');
echo validYoutube('Nv7U6_Whqvf');
echo validYoutube('Nv7U6_Whqzz');
不再支持,這是舊的v2 api。 v3現在是標準。 – FlavorScape 2015-08-12 03:49:59
透過YouTube API我通過調用實現了這個的V3:
GET https://www.googleapis.com/youtube/v3/videos?part=id&id=Tr5WcGSDqDg&key= {YOUR_API_KEY}
這將返回類似:
{
"kind": "youtube#videoListResponse",
"etag": "\"dc9DtKVuP_z_ZIF9BZmHcN8kvWQ/P2cGwKgbH6EYZAGxiKCZSH8R1KY\"",
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 1
},
"items": [
{
"kind": "youtube#video",
"etag": "\"dc9DtKVuP_z_ZIF9BZmHcN8kvWQ/Rgd0_ApwigPcJHVX1Z2SIQ5FJtU\"",
"id": "Tr5WcGSDqDg"
}
]
}
所以,你可以做一個檢查:
if(json.totalResults===1) {
if(items[0].kind==='youtube#video') {
//valid video ID
}
}
簡單使用此代碼:
public class HelloWorld{
public static void main(String []args){
String expression = "^.*((youtu.be"+ "\\/)" + "|(v\\/)|(\\/u\\/w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*"; // var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
String video_url = "https://www.youtube.com/watch?v=as3tGTN2u98";
if (video_url.matches(expression)) {
System.out.println("It's valid");
}
}
}
這只是一個隨機猜測。 OP還沒有說他在使用java – lokusking 2016-06-27 10:22:12
如果你要檢查網址是否存在,這裏的一個例子在紅寶石:http://www.igvita.com/2006/09/07/validating-url-in-ruby-on-rails/ – borisrorsvort 2012-01-06 10:16:58
這不再出現上班。 http://gdata.youtube.com/feeds/api/videos/NOT_A_VIDEO_ID返回200 OK。 – nornagon 2015-06-02 22:59:13
進一步查看我的回答,其中涵蓋了API的V3解決方案 – richwol 2015-08-17 13:40:14