如何从 url 获取 youtube 视频 ID

Posted

技术标签:

【中文标题】如何从 url 获取 youtube 视频 ID【英文标题】:how to get youtube video id from url 【发布时间】:2012-05-22 10:08:18 【问题描述】:

我正在尝试检查一个 url 是否是一个有效的 youtube 视频 URL 并从中获取 youtube 视频 ID,到目前为止,我正在使用一个简单的 javascript 拆分函数来实现这一点,但是这与 youtube 相比有一些小缺点有多个网址。

我一直在查看其他 *** 线程,但是它们都只支持 1 个特定的 URL,这不是我需要的。

我需要与所有这些 URL 匹配的东西:

http(s)://www.youtu.be/videoID

http(s)://www.youtube.com/watch?v=videoID

(以及脚本自动检测是否包含 youtube 视频的任何其他短 URL)

非常感谢浏览器快速/高效处理的任何想法!

【问题讨论】:

编辑了我的问题,我还需要检查 URL 是否是有效的 youtube 视频 Javascript REGEX: How to get youtube video id from URL?的可能重复 我使用这些功能:github.com/lingtalfi/video-ids-and-thumbnails/blob/master/… 【参考方案1】:

试试这个:

var url = "...";
var videoid = url.match(/(?:https?:\/2)?(?:w3\.)?youtu(?:be)?\.(?:com|be)(?:\/watch\?v=|\/)([^\s&]+)/);
if(videoid != null) 
   console.log("video id = ",videoid[1]);
 else  
    console.log("The youtube url is not valid.");

见正则表达式:

/
(?:https?:\/2)? // Optional protocol, if have, must be http:// or https://
(?:w3\.)?      // Optional sub-domain, if have, must be www.
youtu(?:be)?  // The domain. Match 'youtu' and optionally 'be'. 
\.(?:com|be) // the domain-extension must be .com or .be
(?:\/watch\?v=|\/)([^\s&]+) //match the value of 'v' parameter in querystring from 'watch' directory OR after root directory, any non-space value.
/

【讨论】:

youtube 短网址是 youtu.be 在这种情况下正则表达式会是什么样子? @xorinzor:我添加了一个简单的正则表达式解释。 你能举个例子这个网址怎么样? 人们如何编写这个冗长的正则表达式? 这个网址'youtube.com/embed/Mg3JgfOtf3g'怎么样【参考方案2】:

也许您应该查看 Youtube API 并尝试查看是否有办法通过 API 解析 URL 来获取 videoID。

看看这个 SO 帖子: Youtube API - Extract video ID

【讨论】:

确实是我想要的,但是面具是第一位的,所以我将他的回复标记为答案 +1 用于指出现有问题和相关网站提供的 API。【参考方案3】:

这可能很快:

var url = 'http://www.youtu.be/543221'; 
         //http://www.youtube.com/watch?v=SNfYz6Yw0W8&feature=g-all-esi would work also
var a = url.split("v=")[1];
a = a != undefined ? a : url.split("youtu.be/")[1];
b = a.split("&")[0];

变量 c 将有你的 id。快的。正则表达式更好......虽然更难阅读。我已经修改了我的代码来解决这两个问题。

【讨论】:

这正是其他线程所拥有的,但是我也需要验证 youtu.be 的 URL 现在请检查我的代码。再多一行代码就很简单,可以检查您要查找的内容。我认为它仍然比正则表达式更具可读性。但是,我同意正则表达式更好。但是,由于很多人不会说正则表达式,这种方式可能会在下次 youtube 添加另一种 url 格式时更容易更新。只是一个想法。【参考方案4】:

您可以使用 preg_match 轻松做到这一点,示例如下:$url = "http://www.youtube.com/watch?v=YzOt12co4nk&feature=g-vrec"; preg_match('/v=([0-9a-zA-Z]+)/', $url, $matches); $vid = $matches[1]; 现在您的视频 ID 为:$vid = YzOt12co4nk;

【讨论】:

尽管已经回答了这个问题,但请注意这是关于 Javascript/JQuery 解决方案,而不是 php;谢谢你的贡献。【参考方案5】:

种类太多了:

最新短格式:http://youtu.be/NLqAF9hrVbY iframe:http://www.youtube.com/embed/NLqAF9hrVbY iframe(安全):https://www.youtube.com/embed/NLqAF9hrVbY 对象参数:http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US 对象嵌入:http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US 观看:http://www.youtube.com/watch?v=NLqAF9hrVbY 用户:http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo yt 放映室:http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I 任何/事情/去!:http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/2/PPS-8DMrAn4 任何/子域/也:http://gdata.youtube.com/feeds/api/videos/NLqAF9hrVbY 更多参数:http://www.youtube.com/watch?v=spDj54kf-vY&feature=g-vrec 查询可能有点:http://www.youtube.com/watch?v=spDj54kf-vY&feature=youtu.be (来源:How do I find all YouTube video ids in a string using a regex?)

最好的方法是限制输入数据。

祝你好运

【讨论】:

此解决方案适用于您的所有网址***.com/questions/3452546/…【参考方案6】:

试试这个代码

var url = "...";
var videoid = url.match((?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]11));
if(videoid != null) 
    console.log("video id = ",videoid[1]);
 else  
    console.log("The youtube url is not valid.");

正则表达式来自 YouTube video ID regex

【讨论】:

【参考方案7】:

我找到了一种不使用正则表达式的简单方法。

我为你做了一个函数:

function getLink(url)
    fetch('www.youtube.com/oembed?url=' + url).then(res => 
     var thumbnailUrl = res.thumbnail_url;
     var id = thumbnail_url.split('vi/')[1].substring(0, 11);
     return id;
      )


console.log(getLink(your_url));
// here replace 'your_url' with your specified youtube url.

所有这一切都是,它使用 youtube api 并将您的 url 作为参数传递,而 youtube 会处理 url 的类型,因此您不必担心。接下来是,该函数从该 api 获取“thumbnail_url”数据,然后相应地拆分缩略图的 url 以找到视频的 ID。

【讨论】:

以上是关于如何从 url 获取 youtube 视频 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何从频道 ID 获取 YouTube 视频 URL

如何在 youtube 上获取可下载的直播视频 URL

我需要一些帮助来纠正我在 php 中的代码 - 如何从 YouTube URL 获取视频 ID [重复]

使用 PHP 从 URL 获取 YouTube 视频 ID

如何使用php和API从url获取youtube视频的缩略图

如何使用 PHP 从视频 URL 中检索 YouTube 视频详细信息?