Как получить продолжительность видео с помощью API YouTube?

Я хочу получить продолжительность видео 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>?

Ответ 1

В связи с предстоящим устареванием API Youtube v2, это обновленное решение.

  • Начните с клонирования клиента PHP API Google здесь
  • Затем вы захотите зарегистрировать приложение с Google здесь, создав новый проект, включив API данных Youtube в API API и auth API "и
  • Создайте новый идентификатор клиента OAuth в разделе "API и auth > Credentials" и добавьте полный путь к вашему списку перенаправления перенаправления. (т.е. http://example.com/get_youtube_duration.php)
  • Используйте этот код (который был адаптирован из этого примерного кода), не забудьте заполнить переменные $OAUTH2_CLIENT_ID и $OAUTH2_CLIENT_SECRET с вашими собственными значениями с шага 3.
  • Hardcode значение для переменной $videoId или установить его с помощью параметра video_id get (т.е. http://example.com/get_youtube_duration.php?video_id=XXXXXXX)
  • Перейдите на страницу script, нажмите ссылку, чтобы авторизовать приложение и использовать свою учетную запись google, чтобы получить токен, который перенаправляет вас обратно на ваш код и отображает продолжительность.

Вот ваш вывод:

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

Следующие работы доступны только для API V2.

Это сработало для меня, исходя из предположения, что в фиде есть только 1 элемент продолжительности.

<?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

Ответ 2

Здесь представлен 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'];
}

Ответ 3

Краткое и простое решение с использованием 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);
}

Ответ 4

все приведенные выше ответы предоставляют продолжительность в текстовом формате:

это решение даст вам часы/минуты/секунды для преобразования в любой формат, который вы хотели бы:

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;
}

Ответ 5

Очень легко

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");

Ответ 6

Вы также можете получить продолжительность в 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');