如何validationYouTubevideoID?

我想在访问Youtube API之前validationYouTube网站上的YouTubevideoID,但是我不知道允许的字符在这种ID中是什么。 我看到网上的人猜测它可以包含数字和字符,但是我还没有看到这些videoID的官方说明。

有一个吗?

看到这个线程的官方信息。

你可以点击这个: http : //gdata.youtube.com/feeds/api/videos/VIDEO_ID

并根据响应确定video是否有效

您无法使用RegEx检查ID的有效性,因为并非所有字母数字值都是有效的ID。

PS我很确定我看到在videoID的“破折号”

pps“下划线”也是一个有效的字符: http : //www.youtube.com/watch?v = nrGk0AuFd_9

[a-zA-Z0-9 _-] {11}是正则expression式( 源代码 ),但是即使正则expression式有效,也不能保证video会在那里

随着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 } } 

我用罗曼推荐的方式解决了这个问题。 在我的帮手:

请确保在文件顶部包含您的要求:

 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 

如果你正在寻找一个更快,更具扩展性的解决scheme,我会说,如果将来有更改ID的话,可以使用REGEX来logging/回退错误,以便主动处理。

我一直在使用YouTube API处理数百万个video,通过它们循环播放我发现这是最理想的:

 /^[A-Za-z0-9_-]{11}$/ 

在PHP中有一个更详细的例子:

 public static function validId($id) { return preg_match('/^[a-zA-Z0-9_-]{11}$/', $id) > 0; } 

我只是看看,如果它是字母数字可能破折号或不。 您可能需要查看oEmbed,您可以查询YouTube以查看该ID是否为有效video。

这里是罗马在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; } 

这里是testing:

 echo validYoutube('Nv7U6_WhqvQ'); echo validYoutube('Nv7U6_Whqvf'); echo validYoutube('Nv7U6_Whqzz'); 

简单的使用这个代码:

  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"); } } }