Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Youtube api 如何正确使用oembed从youtube上拉拇指_Youtube Api_Thumbnails_Oembed - Fatal编程技术网

Youtube api 如何正确使用oembed从youtube上拉拇指

Youtube api 如何正确使用oembed从youtube上拉拇指,youtube-api,thumbnails,oembed,Youtube Api,Thumbnails,Oembed,我在youtube视频的主页上显示了很多拇指。我在下面使用这个函数从youtube url中抓取拇指,这个url运行速度很快,但对于youtu.be/JSHDLSKL这样的缩写形式的url不起作用 function get_youtube_screen_link( $url = '', $type = 'default', $echo = true ) { if( empty( $url ) ) return false; if( !isset( $type ) ) $type

我在youtube视频的主页上显示了很多拇指。我在下面使用这个函数从youtube url中抓取拇指,这个url运行速度很快,但对于youtu.be/JSHDLSKL这样的缩写形式的url不起作用

function get_youtube_screen_link( $url = '', $type = 'default', $echo = true ) {
if( empty( $url ) )
    return false;

if( !isset( $type ) )
    $type = '';

$url = esc_url( $url );

preg_match("|[\\?&]v=([^&#]*)|",$url,$vid_id);

if( !isset( $vid_id[1] ) )
    return false;

$img_server_num =  'i'. rand(1,4);

switch( $type ) {
    case 'large':
        $img_link = "http://{$img_server_num}.ytimg.com/vi/{$vid_id[1]}/0.jpg";
        break;
    case 'first':
        // Thumbnail of the first frame
        $img_link = "http://{$img_server_num}.ytimg.com/vi/{$vid_id[1]}/1.jpg";
        break;
    case 'small':
        // Thumbnail of a later frame(i'm not sure how they determine this)
        $img_link = "http://{$img_server_num}.ytimg.com/vi/{$vid_id[1]}/2.jpg";
        break;
    case 'default':
    case '':
    default:
        $img_link = "http://{$img_server_num}.ytimg.com/vi/{$vid_id[1]}/default.jpg";
        break;
}
if( $echo )
    echo $img_link;
else
    return $img_link;

}
因此,我尝试使用Oembed来获取拇指,这适用于youtube url的所有变体,但它检索480px/360px拇指,这会导致大量裁剪,使其降到我用来显示它们的120px/90px大小。另一个问题是它导致我的页面速度增加了4秒,我猜这是我实现它的方式的问题。下面是我如何在循环中调用拇指

<?php 
 require_once(ABSPATH.'wp-includes/class-oembed.php');
 $oembed= new WP_oEmbed;
 $name = get_post_meta($post->ID,'video_code',true);
 $url = $name;
//As noted in the comments below, you can auto-detect the video provider with the following
 $provider = $oembed->discover($name);
//$provider = 'http://www.youtube.com/oembed';
 $video = $oembed->fetch($provider, $url, array('width' => 300, 'height' => 175));
 $thumb = $video->thumbnail_url; if ($thumb) { ?>
   <img src="<?php echo $thumb; ?>" width="120px" height="90px" />
<?php } ?>

“width=“120px”height=“90px”/>

那么,我应该怎样做才能最大限度地提高效率呢?

我在youtube上看到了这个页面,解释了他们的工作,他们提到他们输出为json格式,所以我制作了一个函数来获取json数据,然后让您能够使用它

如果您需要更多帮助,请随时询问

<?php

$youtube_url = 'http://youtu.be/oHg5SJYRHA0'; // url to youtube video

function getJson($youtube_url){

    $baseurl = 'http://www.youtube.com/oembed?url='; // youtube oembed base url
    $url = $baseurl . $youtube_url . '&format=json'; // combines the url with format json

    $json = json_decode(file_get_contents($url)); // gets url and decodes the json

    return $json;

}

$json = getJson($youtube_url);

// from this point on you have all your data placed in variables.

$provider_url = $json->{'provider_url'};
$thumbnail_url = $json->{'thumbnail_url'};
$title = $json->{'title'};
$html = $json->{'html'};
$author_name = $json->{'author_name'};
$height = $json->{'height'};
$thumbnail_width = $json->{'thumbnail_width'};
$thumbnail_height = $json->{'thumbnail_height'};
$width = $json->{'width'};
$version = $json->{'version'};
$author_url = $json->{'author_url'};
$provider_name = $json->{'provider_name'};
$type = $json->{'type'};

echo '<img src="'.$thumbnail_url.'" />'; // echo'ing out the thumbnail image

好的,我从其他问题中找到了一个解决方案。首先,我们需要使用此函数从youtube拥有的任何类型的url获取id

function getVideoId($url)
{
$parsedUrl = parse_url($url);
if ($parsedUrl === false)
    return false;

if (!empty($parsedUrl['query']))
{
    $query = array();
    parse_str($parsedUrl['query'], $query);
    if (!empty($query['v']))
        return $query['v'];
}

if (strtolower($parsedUrl['host']) == 'youtu.be')
    return trim($parsedUrl['path'], '/');

return false;
}
现在我们可以使用YouTube数据API从视频id获取缩略图。如下所示

<?php
  $vid_id = getVideoId($video_code);
  $json = json_decode(file_get_contents("http://gdata.youtube.com/feeds/api/videos/$vid_id?v=2&alt=jsonc"));
  echo '<img src="' . $json->data->thumbnail->sqDefault . '" width="176" height="126">'; 
?>

使用oembed获取id,以及第一个函数的另一部分-或者你的问题是什么?你的意思是使用oembed获取标准url,然后使用第一个函数获取拇指?我的问题是人们提交youtue url以在我的网站上发布视频。顶部函数不会为你获取拇指U.be版本的url。使用oembed来et thumb获得了480/360版本,这对我来说造成了不必要的裁剪。它增加了加载时间,我不知道为什么。这似乎不适用于浏览器中显示的实际视频的url。我指的是长格式,如
http://www.youtube.com/watch?v=bCDHeEbG3g8&feature=g-all-u
我强烈建议您搜索有点像youtube网站,因为你遇到的所有问题都已经得到了询问和回答——真的。你不是第一个寻找youtube图片的人(这也难怪你会考虑到该网站的受欢迎程度).请记住,如果将来谷歌改变youtube URI的布局,所有现有的解决方案可能不再有效。