2012-04-30 10 views
3

私はYouTubeのビデオから私のホームページに多くの親指を表示します。私はすぐに動作するYouTubeのURLから親指をつかむために、この関数を使用していましたが、youtu.be/JSHDLSKLのような短縮形式のURLでは機能しません。oembedを正しく使ってyoutubeから親指を引っ張る方法

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; 

} 

だから私はユーチューブのURLのすべてのバリエーションのために働く代わりに親指を取得するためのoEmbedを使用しようとしましたが、それは120ピクセル/ 90PXにそれを得るためにトリミングの多くの原因となる480PX/360px親指を取得私はそれらを表示するために使用するサイズ。もう一つの問題は、私のページスピードが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 } ?> 

効率を最大化するにはどうすればよいですか?

+0

idを取得するためにoembedを使用し、最初の関数の他の部分 - または何が問題なのですか? – hakre

+0

oembedを使って標準のURLを取得し、最初の関数を使用して親指を取得することを意味しますか?私の問題は、人々があなたのサイトにビデオを投稿するyoutue URLを提出することです。一番上の関数はurlのyoutu.beバージョンの親指を取得しません。 Oembedを使用して親指を取得すると、480/360バージョンが得られます。これは、私にとって不必要な切り取りを引き起こします。そして、それはなぜ私が理解することができない負荷時間を追加します。 –

+0

[Youtube API - 動画IDを抽出](http://stackoverflow.com/questions/6556559/youtube-api-extract-video-id/6556662#6556662) – hakre

答えて

0

私は他の質問から解決策を考え出しました。まずは、この機能を使用しているすべてのタイプの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 Data 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">'; 
?> 

問題は、それはので、私は単に$vid_idを使用し、ユーチューブのAPIにアクセスすることによって、追加2秒を取り除くhttp://i3.ytimg.com/vi/<?php echo $vid_id; ?>/default.jpg内に置き、余分な2秒のロード時間を引き起こしています。

3

oembed supportを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 
関連する問題