Como obter duração do vídeo usando a API do YouTube?

Quero receber a duração de um vídeo do Youtube. Aqui está o código que eu tentei:

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

Verifique o arquivo XML. Recebi o título deste vídeo. Eu quero ter duração de .

Como obter o atributo seconds esta marca ?

Devido à próxima depreciação da API do Youtube v2, aqui está uma solução atualizada.

  1. Comece por clonar o Google API PHP Client aqui
  2. Em seguida, você quer registrar um aplicativo com o Google aqui criando um novo projeto, ativando a API de dados do Youtube na seção “APIs e auth> API” e
  3. Crie um novo ID de Cliente OAuth em “APIs e auth> Credenciais” e adicione o caminho completo à sua lista de redirecionamento de uri. (ou seja, http://exemple.com/get_youtube_duration.php )
  4. Use esse código (que foi adaptado desse código de exemplo), enquanto se certifica de preencher as variables ​​$ OAUTH2_CLIENT_ID e $ OAUTH2_CLIENT_SECRET com seus próprios valores da etapa 3.
  5. Hardcode um valor para a variável $ videoId ou configure-o usando o parâmetro video_id get (ie http://example.com/get_youtube_duration.php?video_id=XXXXXXX )
  6. Visite seu script, clique no link para autorizar o aplicativo e use sua conta do google para obter um token, o qual o redireciona para o seu código e exibirá a duração.

Aqui está a sua saída:

 Video Duration 0 mins 29 secs 

Alguns resources adicionais: https://developers.google.com/youtube/v3/docs/videos#contentDetails.duration https://developers.google.com/youtube/v3/docs/videos/list

O seguinte funciona apenas para a API V2.

Isso funcionou para mim com base no pressuposto de que há apenas 1 elemento de duração no feed.

 load($url); $title = $doc->getElementsByTagName("title")->item(0)->nodeValue; $duration = $doc->getElementsByTagName('duration')->item(0)->getAttribute('seconds'); print "TITLE: ".$title."
"; print "Duration: ".$duration ."
";

Saída:

 TITLE: Introducing iTime Duration: 29 

Aqui é YouTube API V3, com exemplo de duração do vídeo, mas não se esqueça de criar sua chave de API em 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']; } 

Uma solução simples e simples usando o 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); } 

Todas as respostas acima fornecem a duração em um formato de texto:

esta solução lhe dará as horas / minutos / segundos para você se transformar em qualquer formato que você gostaria:

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

Muito fácil

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

Você também pode obter a duração em JSON

  $video_id = ""; http://gdata.youtube.com/feeds/api/videos/$video_id?v=2&alt=jsonc 

Ah! Desculpe, você pode obtê-lo por:

 $duration = $xml->getElementsByTagName('duration')->item(0)->getAttribute('seconds');