我是 php 新手。
我想检查有效的 youtube URL 以及视频是否存在。
任何建议将不胜感激。
这是我使用 Youtube 的oembed编写的解决方案。
第一个函数只是检查视频是否存在于 Youtube 的服务器上。它假定仅当返回 404 错误时视频不存在。401(未授权)表示视频存在,但有一些访问限制(例如,嵌入可能被禁用)。
如果要检查视频是否存在并且是否可嵌入,请使用第二个功能。
<?php
function isValidYoutubeURL($url) {
// Let's check the host first
$parse = parse_url($url);
$host = $parse['host'];
if (!in_array($host, array('youtube.com', 'www.youtube.com'))) {
return false;
}
$ch = curl_init();
$oembedURL = 'www.youtube.com/oembed?url=' . urlencode($url).'&format=json';
curl_setopt($ch, CURLOPT_URL, $oembedURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Silent CURL execution
$output = curl_exec($ch);
unset($output);
$info = curl_getinfo($ch);
curl_close($ch);
if ($info['http_code'] !== 404)
return true;
else
return false;
}
function isEmbeddableYoutubeURL($url) {
// Let's check the host first
$parse = parse_url($url);
$host = $parse['host'];
if (!in_array($host, array('youtube.com', 'www.youtube.com'))) {
return false;
}
$ch = curl_init();
$oembedURL = 'www.youtube.com/oembed?url=' . urlencode($url).'&format=json';
curl_setopt($ch, CURLOPT_URL, $oembedURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
$data = json_decode($output);
if (!$data) return false; // Either 404 or 401 (Unauthorized)
if (!$data->{'html'}) return false; // Embeddable video MUST have 'html' provided
return true;
}
$url = 'http://www.youtube.com/watch?v=QH2-TGUlwu4';
echo isValidYoutubeURL($url) ? 'Valid, ': 'Not Valid, ';
echo isEmbeddableYoutubeURL($url) ? 'Embeddable ': 'Not Embeddable ';
?>
你从来没有读过preg_match
文档,是吗?
/
是最常见的,但由于您处理的是 URL,#
因此更容易,因为它避免了一些转义。?
或.
preg_match
preg_match('#https?://(?:www\.)?youtube\.com/watch\?v=([^&]+?)#', $videoUrl, $matches);
正如@ThiefMaster 所说,
但我想补充一点。
他询问如何确定视频是否存在。
执行 curl 请求,然后执行curl_getinfo(...)
以检查 http 状态代码。
为 200 时,视频存在,否则不存在。
这是如何工作的,请在此处阅读:curl_getinfo
你需要稍微改变一下上面的答案,否则你只会得到第一个字符,
试试这个
<?php
$videoUrl = 'http://www.youtube.com/watch?v=cKO6GrbdXfU&feature=g-logo';
preg_match('%https?://(?:www\.)?youtube\.com/watch\?v=([^&]+)%', $videoUrl, $matches);
var_dump($matches);
//array(2) {
// [0]=>
// string(42) "http://www.youtube.com/watch?v=cKO6GrbdXfU"
// [1]=>
// string(11) "cKO6GrbdXfU"
//}