21

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/VGazSZUYyf4 NOT HD

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

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

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

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

4

4 に答える 4

21

その理由は、Making the Most of Mapsの解像度が少なくとも 720p ではないためです。

この特定のビデオの API を見ると、maxresdefault.

解像度が 720p 以上の動画のみにmaxresdefault. これは、より高いビデオの 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";ます。

于 2013-08-03T05:30:56.953 に答える
9

画像が存在するかどうかを使用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 を使用したくない場合の回避策です。

于 2013-08-03T06:37:54.517 に答える
7

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

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

于 2013-08-03T20:59:30.057 に答える