我想通过其嵌入代码或 URL 获取 YouTube 或 Vimeo 的视频 ID,有什么解决方案可以用 PHP 做到这一点?
4 回答
您可以使用preg_match来获取 ID。我将在此答案后面介绍表达式本身,但这里是如何使用 preg_match 的基本思想:
preg_match('expression(video_id)', "http://www.your.url.here", $matches);
$video_id = $matches[1];
以下是您询问的每种可能输入类型的表达式细分。我为每个链接添加了一个链接,显示了一些测试用例和结果。
对于YouTube URL,例如
http://www.youtube.com/watch?v=89OpN_277yY
,您可以使用以下表达式:v=(.{11})
YouTube 嵌入代码可能看起来像这样(一些无关的东西被剪掉了):
<object width="640" height="390"> <param name="movie" value="http://www.youtube.com/v/89OpN_277yY?fs=... ... </object>
或者像这样:
<iframe ... src="http://www.youtube.com/embed/89OpN_277yY" ... </iframe>
因此,从任一样式获取 ID的表达式将是:
\/v\/(.{11})|\/embed\/(.{11})
http://vimeo.com/<integer>
据我所知,Vimeo URL看起来像。我找到的最低的是 simplehttp://vimeo.com/2
,我不知道是否有上限,但我现在假设它限制为 10 位数。希望知道细节的人可以纠正我。可以使用这个表达式:vimeo\.com\/([0-9]{1,10})
Vimeo 嵌入代码采用以下形式:
<iframe src="http://player.vimeo.com/video/<integer>" width="400" ...
所以你可以使用这个表达式:
player\.vimeo\.com\/video\/([0-9]{1,10})
或者,如果数字的长度最终可能超过 10,您可以使用:
player\.vimeo\.com\/video/([0-9]*)"
请记住,如果您将表达式括在双引号中,
"
则需要使用 a 进行转义。\
总之,我不确定您想如何实现这一点,但您可以将所有表达式与 结合起来|
,也可以分别匹配每个表达式。如果您希望我提供有关如何组合表达式的更多详细信息,请在此答案中添加评论。
此处回答了另一个类似的 [仅适用于 youtube],可能对查看有用。 PHP Regex 获取 youtube 视频 ID?
还有一个问题有很多很好的答案,特别是来自@user2200660。
https://stackoverflow.com/a/16841070/3850405
我更喜欢使用既可以处理嵌入式代码也可以处理当前使用的任何 URL 的正则表达式。
http://vimeo.com/423630
https://vimeo.com/1399176
http://vimeo.com/423630087
https://vimeo.com/423630087
https://player.vimeo.com/video/423630087
https://player.vimeo.com/video/423630087?title=0&byline=0&portrait=0
https://vimeo.com/channels/staffpicks/423630087
https://vimeo.com/showcase/7008490/video/407943692
可以处理我遇到的所有 URL 的正则表达式:
(https?:\/\/)?(www\.)?(player\.)?vimeo\.com\/?(showcase\/)*([0-9))([a-z]*\/)*([0-9]{6,11})[?]?.*
https://regex101.com/r/p2Kldc/1/
$vimeo = 'http://player.vimeo.com/video/67019023';
if(preg_match("/(https?:\/\/)?(www\.)?(player\.)?vimeo\.com\/?(showcase\/)*([0-9))([a-z]*\/)*([0-9]{6,11})[?]?.*/", $vimeo, $output_array)) {
echo "Vimeo ID: $output_array[6]";
}
感谢 @zeckdude 提供 PHP 中的原始示例代码。
https://stackoverflow.com/a/29860052/3850405
JavaScript 版本:
根据最新的 youtube 标准,您可以使用以下代码从嵌入代码中提取视频 ID。
$embed = '<iframe src="//www.youtube.com/embed/n6WYu-pSXH8" frameborder="0"></iframe>';
preg_match('~embed/(.*?)"~', $embed, $output);
echo $output[1];
谢谢