web-dev-qa-db-ja.com

YouTubeの最高のサムネイル解像度を取得する

YouTube最高のサムネイル「maxresdefault.jpg」を取得したい

このように

http://i.ytimg.com/vi/Cj6ho1-G6tw/maxresdefault.jpg

私はこの単純なphpコードを使用しています

<?php

$youtub_id = "Cj6ho1-G6tw";
echo "http://i.ytimg.com/vi/".$youtub_id."/maxresdefault.jpg";

?>

上記のコードの問題は、このようなビデオがあることです http://youtu.be/VGazSZUYyf4NOT HD

そして結果は、YouTubeの灰色の小さな404画像です

http://i.ytimg.com/vi/VGazSZUYyf4/maxresdefault.jpg

だから最高のYouTubeサムネイルを取得する方法は、「maxresdefault」が利用できない場合は次の大きなサムネイル「hqdefault」を取得し、そうでない場合は次の「mqdefault」を取得するなどです...

gdata youtube を使用しようとしましたが、どちらの方法でもビデオhdまたは「maxresdefault」が表示されません。

16
Jim

その理由は、 マップを最大限に活用する の解像度が少なくとも720pではないためです。

この特定のビデオのAPI を見ると、maxresdefaultがないことがわかります。

maxresdefaultがあるのは、解像度が720p以上の動画のみです。これは、上位の動画のAPIにはリストされていません。したがって、最高の解像度を得るには、maxresdefaultも機能するかどうかを確認する必要があります。

<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/default.jpg' height='90' width='120' time='00:15:12.500' yt:name='default'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/mqdefault.jpg' height='180' width='320' yt:name='mqdefault'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/hqdefault.jpg' height='360' width='480' yt:name='hqdefault'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/1.jpg' height='90' width='120' time='00:07:36.250' yt:name='start'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/2.jpg' height='90' width='120' time='00:15:12.500' yt:name='middle'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/3.jpg' height='90' width='120' time='00:22:48.750' yt:name='end'/>

最高品質のサムネイルに最善の策は、APIを使用して、最大のyt:name属性を持つ画像を取得することです。

順序は次のとおりです。

default
mqdefault
hqdefault
sddefault

実際のコード例:

<?php

$youtub_id = "VGazSZUYyf4";

$images = json_decode(file_get_contents("http://gdata.youtube.com/feeds/api/videos/".$youtub_id."?v=2&alt=json"), true);
$images = $images['entry']['media$group']['media$thumbnail'];
$image  = $images[count($images)-4]['url'];

$maxurl = "http://i.ytimg.com/vi/".$youtub_id."/maxresdefault.jpg";
$max    = get_headers($maxurl);

if (substr($max[0], 9, 3) !== '404') {
    $image = $maxurl;   
}

echo '<img src="'.$image.'">';

これは$youtub_id = "Cj6ho1-G6tw";$youtub_id = "VGazSZUYyf4";の両方で機能します。

19
Dave Chen

getimagesize()を使用して、イメージが存在するかどうかを確認できます(file_exists()もありますが、この場合、うまく機能しない可能性があります)。

この関数を使用して、特定のビデオの最大解像度のスクリーンショットを取得できます。

コード:

function fetch_highest_res ($videoid) {
    $resolutions = array('maxresdefault', 'hqdefault', 'mqdefault');     
    foreach($resolutions as $res) {
        $imgUrl = "http://i.ytimg.com/vi/$videoid/$res.jpg";
        if(@getimagesize(($imgUrl))) 
            return $imgUrl;
    }
}

使用法:

echo fetch_highest_res('Cj6ho1-G6tw').'<br>';
echo fetch_highest_res('VGazSZUYyf4');

出力:

http://i.ytimg.com/vi/Cj6ho1-G6tw/maxresdefault.jpg
http://i.ytimg.com/vi/VGazSZUYyf4/hqdefault.jpg

注:これは最良のソリューションではない可能性があり、APIを使用したくない場合の回避策です。

7
Amal Murali

静的URLスクレイピングに依存する他のすべての回答はサポートされていません。これらは変更される可能性があり、アプリケーションを毎回変更する必要がある場合があります。

これには Data API v を使用する必要があります。 videos-> list リクエストでid = videoIdとpart = snippetを使用する必要があります。応答では、 snippet.thumbnails。['high']。url を確認します

6
Ibrahim Ulukaya

Ibrahim Ulukayaの回答のおかげで、David Chenの以前の正解が機能しなくなった理由を理解できました。 Googleはその以前に機能していたAPIを廃止しました。 邪悪、悪い、いたずら、悪、Google

次のURLは Data API v を使用してサムネイルオブジェクトのリストを返します。

https://www.googleapis.com/youtube/v3/videos?id={VIDEO_ID}&key={API_KEY}&part=snippet&fields=items/snippet/thumbnails

{VIDEO_ID}はYouTube動画のURLの一部として見つけることができ、{API_KEY}は次のことを要求します。

プレースホルダーの代わりにVIDEO_IDおよびAPI_KEYを使用したURLを取得すると、次のようなJSONが返されます。

{
 "items": [
  {
   "snippet": {
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/default.jpg",
      "width": 120,
      "height": 90
     },
     "medium": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/mqdefault.jpg",
      "width": 320,
      "height": 180
     },
     "high": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/hqdefault.jpg",
      "width": 480,
      "height": 360
     },
     "standard": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/sddefault.jpg",
      "width": 640,
      "height": 480
     },
     "maxres": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/maxresdefault.jpg",
      "width": 1280,
      "height": 720
     }
    }
   }
  }
 ]
}

そこから私はあなたが何をすべきかを知っていると思います...?

お役に立てれば。

2
MikeSchinkel