108 votes

Comment obtenir la durée des vidéos avec l'API YouTube version 3 ?

J'utilise l'API v3 de YouTube pour effectuer des recherches sur YouTube.

https://developers.google.com/youtube/v3/docs/search

Comme vous pouvez le constater, la réponse JSON ne contient pas les durées des vidéos. Y a-t-il un moyen d'obtenir les durées des vidéos ?

Il est préférable de ne pas appeler à nouveau une API pour chaque élément du résultat (sauf si c'est la seule façon d'obtenir des durées).

147voto

Matt Koskela Points 1266

Vous devrez faire un appel à la ressource vidéo de l'API de données YouTube après avoir effectué l'appel de recherche. Vous pouvez mettre jusqu'à 50 identifiants vidéo dans une recherche, vous n'aurez donc pas à l'appeler pour chaque élément.

https://developers.google.com/youtube/v3/docs/videos/list

Vous devez définir part=contentDetails parce que la durée est là.

Par exemple, l'appel suivant :

https://www.googleapis.com/youtube/v3/videos?id=9bZkp7q19f0&part=contentDetails&key={YOUR_API_KEY}

Donne ce résultat :

{
 "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"
     ]
    }
   }
  }
 ]
}

L'heure est formatée comme une chaîne ISO 8601. PT est l'abréviation de Time Duration, 4M correspond à 4 minutes et 13S à 13 secondes.

16voto

John Points 145

Je l'ai eu !

$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'];
}

Là, il retourne le temps pour la version 3 de l'API de YouTube (la clé est inventée d'ailleurs ;). J'ai utilisé $vId que j'avais obtenu de la liste retournée des vidéos de la chaîne dont je montre les vidéos...

Cela fonctionne. Google doit VRAIMENT inclure la durée dans le snippet pour que vous puissiez tout obtenir en un seul appel au lieu de deux... c'est sur leur liste de "wontfix".

6voto

Dima L. Points 175

J'ai écrit la classe suivante pour obtenir la durée d'une vidéo YouTube en utilisant l'API YouTube v3 (elle renvoie également les vignettes) :

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

Veuillez noter que vous aurez besoin de la clé API_KEY pour utiliser l'API YouTube :

  1. Créez un nouveau projet ici : https://console.developers.google.com/project
  2. Activez "YouTube Data API" sous "APIs & auth" -> APIs.
  3. Créez une nouvelle clé de serveur sous "APIs & auth" -> Credentials.

3voto

Ce code extrait la durée de la vidéo YouTube en utilisant l'API v3 de YouTube en passant un ID de vidéo. Il a fonctionné pour moi.

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

Vous pouvez obtenir la clé API YouTube de votre domaine à l'adresse suivante https://console.developers.google.com et générer des informations d'identification pour vos propres besoins.

2voto

Vous pouvez obtenir la durée à partir du champ "contentDetails" de la réponse json.

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X