使用php验证youtube网址的问题

时间:2012-09-20 16:16:33

标签: php validation youtube-api

我正在尝试验证从表单字段中获取的youtube网址。无论我输入什么,我设置它的方式都没有捕获任何错误。我使用getVideoId()从有效的URL中提取视频ID。

    if ($_POST['video_url'] != null && $_POST['video_url'] != 'Youtube URL') {
        $vid_url = $_POST['video_url'];
        $video_id = getVideoId($vid_url);
        $headers = get_headers('http://gdata.youtube.com/feeds/api/videos/' . $video_id);
          if (strpos($headers[0], '200')) {
            $video_url = $vid_url;
          } else {
            $output .= 'This is not an existing youtube video<br/>';
          }
    }

$ output设置为null,我在处理表单之前检查它,这对我如何验证其他字段起作用,因此只是这个方法失败了。

3 个答案:

答案 0 :(得分:2)

你可以使用cURL

来做到这一点
$curr_curl = "http://gdata.youtube.com/feeds/api/videos/".$video_id."?alt=json&v=2";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $curr_curl);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if($code == 200) {
    echo "Valid URL";
}

答案 1 :(得分:0)

如果没有有效的视频ID,则$ video_id为空。 如果您尝试:

$headers = get_headers('http://gdata.youtube.com/feeds/api/videos/');
echo $headers[0];

你会看到它返回200。

$headers = get_headers('http://gdata.youtube.com/feeds/api/videos/SOMETHINGINVALID');
echo $headers[0];

返回一些描述的4xx。

你需要陷入两种情况:

if ($_POST['video_url'] != null && $_POST['video_url'] != 'Youtube URL') {
    $vid_url = $_POST['video_url'];
    $video_id = getVideoId($vid_url);
    if ($video_id) {
        $headers = get_headers('http://gdata.youtube.com/feeds/api/videos/' . $video_id);
        if (strpos($headers[0], '200')) {
            $video_url = $vid_url;
          } else {
              $output .= 'This is not an existing youtube video<br/>';
          }
    } else {
          $output .= 'This is not an existing youtube video<br/>';
    }
}

答案 2 :(得分:0)

我在用于从Gmail帐户获取电子邮件的php脚本中使用以下代码我将不胜感激所提供的任何改进!!

function checkForYouTube($body,$androidid){
$searchArg = "http://www.youtube.com/watch?v";
$pos = strpos($body,$searchArg);
if ($pos){
    $url = substr($body,$pos,100);
    $pos1 = strpos($url,"&");
    $url = substr($url,0, $pos1);
    $pos = strrpos($url,"=");
    $movieId = trim(substr($url,$pos+1));
    if (substr($movieId,0,2)=="3D")$movieId = substr($movieId,2);
    $url = $searchArg."=".$movieId;
    $comment = "(Movie=".$url.")".$comment;
    $inc = insertfamilypicture ($androidid,$comment,$url);
    sendYouTubeMovie($androidid, $movieId, $inc);
    return true;
}
return (false);

}

返回可以删除电子邮件。 对于Android用户来说,抓住YouTube“分享”似乎是一种粗略而且准备好的方式。

该用例是一款永远在线的平板电脑,适合精通计算机的资深人士,可以让他的家人通过智能手机或youTube应用程序“分享”有趣的YouTubes。

有没有人有更好的方法来识别带有YouTube网址的电子邮件