如何验证youtube视频ID?

Tom*_*Tom 40 youtube api validation

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

有吗?

rom*_*n m 58

有关官方信息,请参阅此主题.

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

并根据响应确定视频是否有效

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

ps我很确定我在视频ID中看到了"破折号"

pps"下划线"也是一个有效的角色:http://www.youtube.com/watch?v = nkGk0AuFd_9

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

  • 此答案中包含的网址不再有效.请参阅此页面或此类似问题的更多选项... http://stackoverflow.com/questions/29166402/verify-if-video-exist-with-youtube-api-v3/31100389 (5认同)
  • 这似乎不再起作用.http://gdata.youtube.com/feeds/api/videos/NOT_A_VIDEO_ID返回200 OK. (2认同)

ric*_*wol 13

使用YouTube API的v3,我通过调用以下方式实现了此目的:

GET https://www.googleapis.com/youtube/v3/videos?part=id&id=Tr5WcGSDqDg&key={YOUR_API_KEY}
Run Code Online (Sandbox Code Playgroud)

这返回类似于:

{
  "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"
  }]
}
Run Code Online (Sandbox Code Playgroud)

所以你可以做一个检查:

if(json.hasOwnProperty('pageInfo') && json.pageInfo.totalResults === 1) {
   if(items[0].kind==='youtube#video') {
      //valid video ID
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 现在这是必要的,因为api的v2不再有效.我一直在寻找这个,谢谢你. (3认同)

aci*_*azz 7

如果您正在寻找一种更快速,更具可扩展性的解决方案,我会说如果youtube将来更改其ID,则可以使用REGEX和一些日志记录/回退来纠正错误.

我一直在使用YouTube API一段时间处理数百万个视频,通过它们循环我发现这是最理想的:

/^[A-Za-z0-9_-]{11}$/
Run Code Online (Sandbox Code Playgroud)

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

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

  • 不应该是'AZ`而不是'Az`. (3认同)
  • 可以在大多数正则表达式风格中使用 [-\w] ​​。 (2认同)

Sor*_*00b 6

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

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

require "net/http"
require "uri"
Run Code Online (Sandbox Code Playgroud)

然后:

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
Run Code Online (Sandbox Code Playgroud)

确保"#{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
Run Code Online (Sandbox Code Playgroud)


小智 6

下面是一个简单的 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'));
Run Code Online (Sandbox Code Playgroud)