【问题标题】:Check if Youtube and Vimeo-clips are valid检查 Youtube 和 Vimeo 剪辑是否有效
【发布时间】:2010-11-24 15:26:07
【问题描述】:

我一直在尝试检查提交的链接是否是来自 youtube.com 或 vimeo.com 的有效电影剪辑,但我没有成功。

关于如何检查 url 的任何想法:

http://www.youtube.com/watch?v=jc0rnCBCX2c&feature=fvhl (valid)
http://www.youtube.com/watch?v=jc0FFCBCX2c&feature=fvhl (not valid)
http://www.youtube.com/v/jc0rnCBCX2c (valid)
http://www.youtube.com/v/ddjcddddX2c (not valid)
http://www.vimeo.com/463l522 (not valid)
http://www.vimeo.com/1483909 (valid)
http://www.vimeo.com/lumiblue (not valid)
http://www.youtube.com/user/dd181921 (not valid)

?

我用php。

【问题讨论】:

    标签: php url


    【解决方案1】:

    如果您检查对 http://gdata.youtube.com/feeds/api/videos/videoId 的请求的响应标头,其中 videoId 是谷歌视频标识符,如果视频存在,您应该得到 200,如果视频不存在,您应该得到 400(错误请求)。

    // PHP code
    
    // Check if youtube video item exists by the existance of the the 200 response
    $headers = get_headers('http://gdata.youtube.com/feeds/api/videos/' . $youtubeId);
    if (!strpos($headers[0], '200')) {
        echo "The YouTube video you entered does not exist";
        return false;
    }
    

    【讨论】:

    • @DavidLawrence:奇怪,它对我有用。我猜想如果已经发送了标头可能会出现问题,但是即使在某些内容被打印到屏幕后(即标头已经发送时)它也可以工作。我不知道您尝试时遇到了什么问题。
    【解决方案2】:

    我在这个网站上看到了答案: www.experts-exchange.com/Programming/Languages/Scripting/JavaScript/Q_23765374.html

    他说:

    我建议您使用 youtube 的 API,因为您正在尝试验证视频是否存在。 或者如果你不想进入 API 的东西,那么你可以做简单的把戏。 检查此链接:

    http://code.google.com/apis/youtube/developers_guide_php.html#RetrievingVideoEntry

    要检查视频是否存在,您需要提取“v”值并将包含视频 ID 的请求发送到:

    http://gdata.youtube.com/feeds/api/videos/videoID

    其中 videoID 是“v”值 例如视频 FLE2htv9oxc 会被这样查询 http://gdata.youtube.com/feeds/api/videos/FLE2htv9oxc 如果它不存在,那么您将获得一个带有“无效 id”的页面 如果存在,将返回一个 XML 提要,其中包含有关视频的各种信息。 这样您就可以检查视频是否存在。

    希望这会让你朝着正确的方向前进。

    与 vimeo 相同,尝试在该站点中查看 api 文档。 http://www.vimeo.com/api

    【讨论】:

    • 请,请考虑不要在您的答案中直接链接到那个可怜的专家交流网站。该站点是SO有效解决的问题之一。别介意paywall。我几乎编辑了您的答案以取消链接,但是..这不是我的答案,所以我不会。可以引用出处,把“http”部分去掉即可。
    • 使用 api 是检查视频是否存在的正确方法,但请注意,我体验过 YouTube 视频并不总是可以通过 api 尽快在网站上观看。基本上,一个链接可能是有效的,而 api 说它不是几分钟。
    【解决方案3】:

    我编写了这个函数来检查链接是否是有效的 youtube 链接。

    /**
     * This function will check if 'url' is valid youtube video and return the ID.
     *  If the return value === false then this is **not** a valid youtube url, otherwise   the youtube id is returned.
     *
     * @param <type> $url
     * @return <type>
     */
    
    
     private static function get_youtube_id($url) {
            $link = parse_url($url,PHP_URL_QUERY);
    
        /**split the query string into an array**/
        if($link == null) $arr['v'] = $url;
        else  parse_str($link, $arr);
        /** end split the query string into an array**/
        if(! isset($arr['v'])) return false; //fast fail for links with no v attrib - youtube only
    
        $checklink = YOUTUBE_CHECK . $arr['v'];
    
        //** curl the check link ***//
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$checklink);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        $result = curl_exec($ch);
        curl_close($ch);
    
        $return = $arr['v'];
        if(trim($result)=="Invalid id") $return = false; //you tube response
    
        return $return; //the stream is a valid youtube id.
    }
    

    【讨论】:

    • 这里是 YOUTUBE_CHECK menas?你能提供详细信息
    • YOUTUBE_CHECK = gdata.youtube.com/feeds/api/videos 你可以摆脱大约一半的代码,只使用 CURL 部分,也许做一些 preg_match 之类的来缩短代码。否则这行得通,今天救了我。
    【解决方案4】:

    如果视频不再有效,您可以尝试捕捉您 Tube 抛出的 301 标头

    【讨论】:

      【解决方案5】:
      /* 
       * Verify YouTube video status
       */
      
          $videoID = "o8UCI7r1Aqw";
          $header = get_headers("http://gdata.youtube.com/feeds/api/videos/". $videoID);
      
          switch($headers[0]) {
          case '200':
          // video valid
          break;
      
          case '403':
          // private video
          break;
      
          case '404':
          // video not found
          break;
      
          default:
          // nothing  above
          break;
          }
      

      【讨论】:

        【解决方案6】:

        由于这里的大多数 cmets 都有点老了,所以我设置了一个快速的东西来检查 YouTube 链接是否是私有的。

        这种方法的好处是它不需要我们通过 Google 或类似的方式设置 API 凭据。我假设您可以对 Vimeo 或任何其他未按要求提供准确状态代码的视频提供商采用相同的方法。

        axios
            .get(link)
            .then((res) => {
                if (StringUtils.isYouTubeLink(link)) {
                    // The "streamingData" substring should be present on
                    // all valid video requests. Private or non-existent
                    // videos won't have it
                    if (!res.data.includes("streamingData")) {
                        errorData.reason = "Video unavailable";
                        brokenLinks.push(errorData);
                    }
                }
            })
        

        【讨论】:

          猜你喜欢
          • 2014-07-24
          • 2011-09-30
          • 1970-01-01
          • 2017-08-27
          • 1970-01-01
          • 2016-11-09
          • 2018-12-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多