web-dev-qa-db-fra.com

Comment obtenir la durée de la vidéo en utilisant l'API YouTube?

Je veux obtenir la durée d'une vidéo Youtube. Voici le code que j'ai essayé:

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

Veuillez vérifier le fichier XML. J'ai le titre de cette vidéo. Je veux obtenir la durée de <yt:duration seconds='29'/>.

Comment obtenir l'attribut seconds cette balise <yt>?

10
Developer

En raison de la désapprobation de l'API YouTube v2, voici une solution mise à jour.

  1. Commencez par cloner l'API Google PHP Client ici
  2. Ensuite, vous voudrez enregistrer une application auprès de Google ici en créant un nouveau projet, en activant l'API de données YouTube dans la section "API et authentification → API", et
  3. Créez un nouvel ID client OAuth sous "API et authentification → Informations d'identification" et ajoutez le chemin complet à votre liste d'URI de redirection. (i.e. http://example.com/get_youtube_duration.php )
  4. Utilisez this code (qui a été adapté à partir de this exemple de code), en veillant à bien renseigner les variables $ OAUTH2_CLIENT_ID et $ OAUTH2_CLIENT_SECRET avec vos propres valeurs à l’étape 3.
  5. Codez en dur une valeur pour la variable $ videoId ou définissez-la à l'aide du paramètre video_id get (i.e. http://example.com/get_youtube_duration.php?video_id=XXXXXXX )
  6. Visitez votre script, cliquez sur le lien pour autoriser l'application et utilisez votre compte Google pour obtenir un jeton, qui vous redirigera vers votre code et affichera la durée.

Voici votre sortie:

Video Duration

0 mins

29 secs

Quelques ressources supplémentaires: https://developers.google.com/youtube/v3/docs/videos#contentDetails.durationhttps://developers.google.com/youtube/v3/docs/videos/list

Ce qui suit ne fonctionne que pour l'API V2.

Cela a fonctionné pour moi en supposant qu'il n'y ait qu'un seul élément de durée dans le flux.

<?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 />";

Sortie:

TITLE: Introducing iTime
Duration: 29
17
Chris Rasco

Il s'agit ici de YouTube API V3, avec un exemple d'obtention de la durée de la vidéo, mais n'oubliez pas de créer votre clé d'API à l'adresse 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'];
}
8
Ams Naser

Une solution courte et simple utilisant 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);
}
3
Amal Murali

Toutes les réponses précédentes fournissent la durée au format texte:

Cette solution vous donnera les heures/minutes/secondes que vous souhaitez transformer au format de votre choix:

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

Très facile 

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