YouTubeの検索にYouTube API v3を使用しています。
https://developers.google.com/youtube/v3/docs/search
ご覧のとおり、応答JSONにはビデオの長さは含まれていません。ビデオの長さを取得する方法はありますか?
結果の各要素に対してAPIを再度呼び出さないことが望ましいです(それが期間を取得する唯一の方法でない限り)。
検索呼び出しを行った後、YouTube data APIのビデオリソースを呼び出す必要があります。検索には最大50個のビデオIDを含めることができるため、各要素に対して呼び出す必要はありません。
https://developers.google.com/youtube/v3/docs/videos/list
期間が存在するため、part=contentDetails
を設定する必要があります。
たとえば、次の呼び出し:
https://www.googleapis.com/youtube/v3/videos?id=9bZkp7q19f0&part=contentDetails&key={YOUR_API_KEY}
この結果を与えます:
{
"kind": "youtube#videoListResponse",
"etag": "\"XlbeM5oNbUofJuiuGi6IkumnZR8/ny1S4th-ku477VARrY_U4tIqcTw\"",
"items": [
{
"id": "9bZkp7q19f0",
"kind": "youtube#video",
"etag": "\"XlbeM5oNbUofJuiuGi6IkumnZR8/HN8ILnw-DBXyCcTsc7JG0z51BGg\"",
"contentDetails": {
"duration": "PT4M13S",
"dimension": "2d",
"definition": "hd",
"caption": "false",
"licensedContent": true,
"regionRestriction": {
"blocked": [
"DE"
]
}
}
}
]
}
時刻はISO 8601文字列としてフォーマットされます。 PTはTime Durationの略で、4Mは4分、13Sは13秒です。
わかった!
$dur = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=$vId&key=dldfsd981asGhkxHxFf6JqyNrTqIeJ9sjMKFcX4");
$duration = json_decode($dur, true);
foreach ($duration['items'] as $vidTime) {
$vTime= $vidTime['contentDetails']['duration'];
そこで、YouTube APIバージョン3の時間を返します(キーは途中で作成されます;)。私は$vId
を使用しました。これは、私がビデオを表示しているチャンネルから返されたビデオのリストから取得したものです...
動作します... :) Googleはスニペットに期間を含める必要があるため、2回ではなく1回の呼び出しですべてを取得できます。
YouTube API v3を使用してYouTube動画の長さを取得するために次のクラスを作成しました(サムネイルも返します)。
class Youtube
{
static $api_key = '<API_KEY>';
static $api_base = 'https://www.googleapis.com/youtube/v3/videos';
static $thumbnail_base = 'https://i.ytimg.com/vi/';
// $vid - video id in youtube
// returns - video info
public static function getVideoInfo($vid)
{
$params = array(
'part' => 'contentDetails',
'id' => $vid,
'key' => self::$api_key,
);
$api_url = Youtube::$api_base . '?' . http_build_query($params);
$result = json_decode(@file_get_contents($api_url), true);
if(empty($result['items'][0]['contentDetails']))
return null;
$vinfo = $result['items'][0]['contentDetails'];
$interval = new DateInterval($vinfo['duration']);
$vinfo['duration_sec'] = $interval->h * 3600 + $interval->i * 60 + $interval->s;
$vinfo['thumbnail']['default'] = self::$thumbnail_base . $vid . '/default.jpg';
$vinfo['thumbnail']['mqDefault'] = self::$thumbnail_base . $vid . '/mqdefault.jpg';
$vinfo['thumbnail']['hqDefault'] = self::$thumbnail_base . $vid . '/hqdefault.jpg';
$vinfo['thumbnail']['sdDefault'] = self::$thumbnail_base . $vid . '/sddefault.jpg';
$vinfo['thumbnail']['maxresDefault'] = self::$thumbnail_base . $vid . '/maxresdefault.jpg';
return $vinfo;
}
}
YouTube APIを使用するにはAPI_KEYが必要になることに注意してください。
このコードは、動画IDを渡すことにより、YouTube API v3を使用してYouTube動画の長さを抽出します。それは私のために働いた。
<?php
function getDuration($videoID){
$apikey = "YOUR-Youtube-API-KEY"; // Like this AIcvSyBsLA8znZn-i-aPLWFrsPOlWMkEyVaXAcv
$dur = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=$videoID&key=$apikey");
$VidDuration =json_decode($dur, true);
foreach ($VidDuration['items'] as $vidTime)
{
$VidDuration= $vidTime['contentDetails']['duration'];
}
preg_match_all('/(\d+)/',$VidDuration,$parts);
return $parts[0][0] . ":" .
$parts[0][1] . ":".
$parts[0][2]; // Return 1:11:46 (i.e.) HH:MM:SS
}
echo getDuration("zyeubYQxHyY"); // Video ID
?>
https://console.developers.google.com でドメインの独自のYouTube APIキーを取得し、独自の要件に応じて認証情報を生成できます。
Python 2.7およびYouTube API v3を使用した秒単位の期間:
try:
dur = entry['contentDetails']['duration']
try:
minutes = int(dur[2:4]) * 60
except:
minutes = 0
try:
hours = int(dur[:2]) * 60 * 60
except:
hours = 0
secs = int(dur[5:7])
print hours, minutes, secs
video.duration = hours + minutes + secs
print video.duration
except Exception as e:
print "Couldnt extract time: %s" % e
pass