如何验证youtube视频ID?

时间:2010-04-30 06:59:06

标签: validation api youtube

我想在访问Youtube API之前验证在我的某个网站的网址中插入的YouTube视频ID,但我不知道在这样的ID中允许的字符是什么。我看到网上的人猜测它可以包含数字和字符,但我还没有看到这些视频ID的官方规范。

有吗?

10 个答案:

答案 0 :(得分:57)

有关官方信息,请参阅this thread

你可以点击:http://gdata.youtube.com/feeds/api/videos/VIDEO_ID (页面现在返回:“不再可用”。)

并根据回复确定视频是否有效

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

P.S。我很确定我在视频ID的

中看到了“破折号”

p.p.s。 “下划线”也是一个有效的角色:http://www.youtube.com/watch?v=nrGk0AuFd_9

[a-zA-Z0-9 _-] {11}是正则表达式(source),但即使正则表达式有效,也无法保证视频会在那里

答案 1 :(得分:12)

使用YouTube API的v3,我通过致电:

实现了这一目标
cabal install SparkSetup

返回类似于:

的内容
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"
  }]
}

答案 2 :(得分:7)

如果您正在寻找更快速,更具可扩展性的解决方案,我会说如果youtube将来更改其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;
}

答案 3 :(得分:6)

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

请务必在文件顶部包含您的要求:

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

答案 4 :(得分:2)

这是一个简单的 JavaScript 实现:

async function validVideoId(id) {
  const url = "http://img.youtube.com/vi/" + id + "/mqdefault.jpg";
  const { status } = await fetch(url);
  if (status === 404) return false;
  return true;
}

console.log(validVideoId('60ItHLz5WEA'));

答案 5 :(得分:1)

我只是想看看它是否是带有可能破折号的字母数字。您可能需要查看oEmbed,您可以查询YouTube以查看该ID是否为有效视频。

答案 6 :(得分:0)

这是在PHP中简单实现Roman的方法:

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');

答案 7 :(得分:0)

我认为这可用于检查视频是否存在。如上所述,可以使用REGEX进行其他验证。 (使用PHP实现)

public function verifyVideoID($videoID) {
    parse_str(file_get_contents("http://youtube.com/get_video_info?el=detailpage&video_id=".$videoID), $info);
    if (isset($info['errorcode'])) {
        $response = ['response' => false];
        return response()->json($response);
    } else {
        $response = ['response' => true];
        return response()->json($response);
    }
}

答案 8 :(得分:0)

这是我从这里和其他地方的其他答案中组合信息而得出的:

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

function isvalYtube($url) {
    $purl = str_ireplace('www.', '', parse_url($url, PHP_URL_HOST));    
    if (!strpos($url, 'youtu.be/') && ($purl != 'youtu.be')) {
        if (strpos($url, 'watch') && ($purl = 'youtube.com')) {
                parse_str(parse_url($url, PHP_URL_QUERY), $id);             
                if (!empty($id['v'])) { return(validId($id['v']) ? true : false); } else { return false; }                 
        }     
    } else {        
        if (!empty(basename($url))) { return(validId(basename($url)) ? true : false); } else { return false; }    
    }  
}

echo isvalYtube($url) ? 'valid link' : 'invalid link';

第一个功能检查我们是否正在处理有效的Youtube视频ID。

第二个功能只是检查它是否是有效的youtube VIDEO LINK或PLAYLIST LINK中的VIDEO(不包括频道链接)。

注意:它不会确定它是否是活动视频,也不会检查它是否存在。这些功能仅充当Youtube视频链接语法检查器,应将其视为此类功能。

用法示例:

$url = 'http://www.youtube.com/watch?v=o_QBk4VwnIA';
echo isvalYtube($url) ? 'valid link' : 'invalid link';
//returns 'valid link'

$url = 'http://youtu.be/o_QBk4VwnIA';
echo isvalYtube($url) ? 'valid link' : 'invalid link';
//returns 'valid link'

$url = 'http://www.youtube.com/watch?v=o_QBk4VwnIA&feature=youtu.be';
echo isvalYtube($url) ? 'valid link' : 'invalid link';
//returns 'valid link'

$url = 'https://www.youtube.com/watch?v=Sq3eLdixvCc&list=OLAK5uy_nvaYLo9AG_rZyqkXzYlkJfLjBuZS84bIU';
echo isvalYtube($url) ? 'valid link' : 'invalid link';
//returns 'valid link'

$url = 'https://www.youtube.com/channel/UCMPQY9gW0hQ9e_-IdQUKEAw';
echo isvalYtube($url) ? 'valid link' : 'invalid link';
//returns 'invalid link'

答案 9 :(得分:-2)

简单使用此代码:

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


 }

}