Youtube oembed工作得很好,但并非总是如此。为什么?

时间:2014-11-06 13:35:33

标签: php json curl youtube

我正在使用PHP curl来获取youtube视频的缩略图(以及更多内容),并且大部分时间都可以使用,但并非总是如此。

这个有效: 星际飞行 - 预览 https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=9JT_-KjeWYE&format=json

但是这个没有: 漫威的“复仇者联盟:奥创纪元” - 预告片预告片(官方) https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=tmeOjFno6Do&format=json

无法工作的是可嵌入的: http://jsfiddle.net/95ncp1o4/

我没有错误。

我正在使用的代码:

(preg_match('/(?<=youtu.be\/|youtube\.com\/(?=v|vi|\?v=|\?vi=|watch\?v=|watch\?vi=))/', $url)) {

 (preg_match('/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\'>]+)/', $url, $matches));

$url = 'https://www.youtube.com/oembed?url='.urlencode($url).'&format=json';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0');
curl_setopt($ch, CURLOPT_URL, $url);
$c = curl_exec($ch);
$json = json_decode($c);

if ( curl_errno($ch) ) {

 echo 'error:' . curl_error($ch);
 curl_close($ch);

} else {

 $title = $json->title;
 $thumbnail_url = $json->thumbnail_url;
 $author_name = $json->author_name;
 $author_url = $json->author_url;

return '
  <div class="youtube"><div class="src">youtube.com</div>
    <div class="youtube_thmbnl"><a href="https://www.youtube.com/watch?v=' . $matches[1] . '"><img src="' . $thumbnail_url . '"></a></div>
    <div class="youtube_title">' . $title . '</div>
    <div class="youtube_author">By: <a href="' . $author_url . '">' . $author_name . '</a></div>
  </div>';

}

curl_close($ch);

所以我的问题为什么不起作用而其他人不起作用?这两个网址在我的浏览器中显示得很好......

0 个答案:

没有答案