我正在使用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);
所以我的问题为什么不起作用而其他人不起作用?这两个网址在我的浏览器中显示得很好......