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