【问题标题】:Not allowing people to post private youtube video links不允许人们发布私人 youtube 视频链接
【发布时间】:2012-11-03 02:53:41
【问题描述】:

我有一个网站,你可以在上面发布一个 YouTube 视频链接,当你这样做时,它会从中获取 ID(11 个字符)并将其放入数据库中。然后,您可以在页面上观看视频,它会使用http://gdata.youtube.com/feeds/api/videos/ID 获取 YouTube 标题和作者,并将其放入带有嵌入代码的页面上。我想知道如何不允许他们发布私人视频链接,就像我可以做一些检查一样。到目前为止,这是我发布链接的内容:

if(isset($_POST['video'])){
  $error = array();
  if(filter_var($_POST['videourl'], FILTER_VALIDATE_URL) !== false){
    if(strpos($_POST['videourl'],'youtube.com')){
        preg_match('/[\\?\\&]v=([^\\?\\&]+)/',$_POST['videourl'],$video_embed);
        $video_embed = $video_embed[1];
    }elseif(strpos($_POST['videourl'],'youtu.be')){
        $video_embed = substr( parse_url($_POST['videourl'], PHP_URL_PATH), 1 );
    }else{
        $error[] = 'Invalid link';
    }
  }else{
    $error[] = 'Invalid link';
  }
  $video_exist = mysql_num_rows(mysql_query("SELECT interest_vid FROM interest_videos WHERE interest_vid = '$video_embed'"));
  $interest_exist = mysql_query("SELECT name FROM interests WHERE name = '".$_POST['interest_for_video']."'");
  if(!empty($_POST['interest_for_video']) && mysql_num_rows($interest_exist) != 0){
    $interest = strtolower(mysql_real_escape_string(strip_tags($_POST['interest_for_video'])));
    $interest_id = mysql_result(mysql_query("SELECT id FROM interests WHERE name = '$interest'"), 0);
  }else{
    $error[] = 'Must specify an interest. ';
  }
      if(empty($error)){
        if($video_exist == 0){
            $result2 = mysql_query(" INSERT INTO interest_videos (user_id,interest_id,interest_vid) VALUES ('".$_SESSION['id']."','$interest_id','$video_embed')") or die(mysql_error());
            if(!$result2){
                die('Could not delete from database: '.mysql_error());
            }else{
                //$error_message = '<a href="#" onclick="toggle2(\'deletewebsite\', this); return false;"><div id="deletewebsite" class="success">Video Created</div></a>';
                header("Location: /interest/video.php?interest=".$interest_id."&video=".$video_embed."");
            }
        }else{
            $error_message = '<a href="#" onclick="toggle2(\'deletewebsite\', this); return false;"><div id="deletewebsite" class="error">That video already exists</div></a>';
        }
      }else{
        $error_message = '<a href="#" onclick="toggle2(\'deletewebsite\', this); return false;"><div id="deletewebsite" class="error">';
        foreach($error as $key => $values){
            $error_message.= "$values";
        }
        $error_message.="</div></a>";
        }
}

我可以在那里放一张支票,这样他们就不能发布私人视频了吗?

【问题讨论】:

    标签: php video youtube private


    【解决方案1】:

    只需检查http://gdata.youtube.com/feeds/api/videos/ID 是否等于“私人视频”,因为这就是将返回的内容。

    当它不存在时,它会返回“找不到视频”。

    编辑: 此外,当它是一个不正确的 ID 时,它会返回“Invalid id”。

    【讨论】:

      【解决方案2】:

      您将深入了解 youtube 的 API。看看How do I check if a video exists on YouTube, using PHP?

      我假设如果视频是私有的,则 api 的响应应该与视频不存在时的响应相同。但是该链接肯定会有所帮助。

      【讨论】:

        【解决方案3】:

        我想通了(自从我发布这个问题以来已经有很长时间了,我已经有一段时间没有想通了,但我想我应该回答它)我所要做的就是检查是否它可以使用布尔值加载文件,如下所示:

        if(@DOMDocument::load("http://gdata.youtube.com/feeds/api/videos/".$video_embed) === false){
            $error[] = 'Invalid video';
        }
        

        我把@放在它前面,这样它就不会显示它在无法加载时给出的所有错误:)

        希望这对未来的人有所帮助!

        【讨论】:

          猜你喜欢
          • 2016-06-07
          • 2012-06-04
          • 2011-04-08
          • 2018-05-12
          • 2019-07-19
          • 2016-09-28
          • 2017-01-21
          • 2010-11-16
          • 2020-12-27
          相关资源
          最近更新 更多