Я хочу получить продолжительность видео Youtube. Вот код, который я пробовал:
$vidID="voNEBqRZmBc"; //http://www.youtube.com/watch?v=voNEBqRZmBc $url = "http://gdata.youtube.com/feeds/api/videos/". $vidID; $doc = new DOMDocument; $doc->load($url); $title = $doc->getElementsByTagName("title")->item(0)->nodeValue;
Проверьте файл XML. Я получил название этого видео. Я хочу получить продолжительность от <yt:duration seconds='29'/>
.
Как получить атрибут seconds
этого <yt>
?
Вот ваш вывод:
Video Duration 0 mins 29 secs
Дополнительные ресурсы: https://developers.google.com/youtube/v3/docs/videos#contentDetails.duration https://developers.google.com/youtube/v3/docs/videos/list
Это сработало для меня, исходя из предположения, что в фиде есть только один элемент продолжительности.
<?php $vidID="voNEBqRZmBc"; //http://www.youtube.com/watch?v=voNEBqRZmBc $url = "http://gdata.youtube.com/feeds/api/videos/". $vidID; $doc = new DOMDocument; $doc->load($url); $title = $doc->getElementsByTagName("title")->item(0)->nodeValue; $duration = $doc->getElementsByTagName('duration')->item(0)->getAttribute('seconds'); print "TITLE: ".$title."<br />"; print "Duration: ".$duration ."<br />";
Вывод:
TITLE: Introducing iTime Duration: 29
Здесь YouTube API V3, пример получения продолжительности видео, но не забудьте создать свой ключ API на странице https://console.developers.google.com/project
$vidkey = "cHPMH2sa2Q" ; video key for example $apikey = "xxxxxxxxxxxxxxxxxxxxx" ; $dur = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=$vidkey&key=$apikey"); $VidDuration =json_decode($dur, true); foreach ($VidDuration['items'] as $vidTime) { $VidDuration= $vidTime['contentDetails']['duration']; }
Краткое и простое решение с использованием SimpleXML:
function getYouTubeVideoDuration($id) { $xml = simplexml_load_file('http://gdata.youtube.com/feeds/api/videos/'.$id); return strval($xml->xpath('//yt:duration[@seconds]')[0]->attributes()->seconds); }
все приведенные выше ответы предоставляют продолжительность в текстовом формате:
это решение даст вам часы / минуты / секунды для преобразования в любой формат, который вам нужен:
function getDurationInSeconds($talkId){ $vidkey = $talkId ; $apikey = "xxxxx"; $dur = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=$vidkey&key=$apikey"); $VidDuration =json_decode($dur, true); foreach ($VidDuration['items'] as $vidTime) { $VidDuration= $vidTime['contentDetails']['duration']; } preg_match_all('/(\d+)/',$VidDuration,$parts); $hours = intval(floor($parts[0][0]/60) * 60 * 60); $minutes = intval($parts[0][0]%60 * 60); $seconds = intval($parts[0][1]); $totalSec = $hours + $minutes + $seconds; //this is the example in seconds return $totalSec; }
Очень просто
function getYoutubeDuration($videoid) { $xml = simplexml_load_file('https://gdata.youtube.com/feeds/api/videos/' . $videoid . '?v=2'); $result = $xml->xpath('//yt:duration[@seconds]'); $total_seconds = (int) $result[0]->attributes()->seconds; return $total_seconds; } //now call this pretty function. As parameter I gave a video id to my function and bam! echo getYoutubeDuration("y5nKxHn4yVA");
Вы также можете получить продолжительность в JSON
$video_id = "<VIDEO_ID>"; http://gdata.youtube.com/feeds/api/videos/$video_id?v=2&alt=jsonc
Ой! Извините, вы можете получить его:
$duration = $xml->getElementsByTagName('duration')->item(0)->getAttribute('seconds');