web-dev-qa-db-fra.com

Comment obtenir des durées de vidéos avec l'API YouTube version 3?

J'utilise YouTube API v3 pour effectuer une recherche sur YouTube.

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

Comme vous pouvez le constater, le JSON de réponse ne contient pas de durée de vidéo. Est-il possible d'obtenir des durées de vidéos?

De préférence, n'appelle pas à nouveau une API pour chaque élément du résultat (à moins que ce ne soit le seul moyen d'obtenir des durées).

80
sleepwalkerfx

Une fois l'appel de recherche effectué, vous devrez appeler la ressource vidéo de l'API de données YouTube. Vous pouvez utiliser jusqu'à 50 identifiants de vidéo dans une recherche pour ne pas avoir à l'appeler pour chaque élément.

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

Vous aurez envie de 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 au format ISO 8601. PT correspond à Time Duration, 4M à 4 minutes et 13S à 13 secondes.

105
Matt Koskela

J? ai compris!

$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 renvoie l'heure pour l'API YouTube version 3 (la clé est composée par le chemin;). J'ai utilisé $vId que j'avais extrait de la liste renvoyée des vidéos de la chaîne sur laquelle je visais les vidéos de ...

Cela fonctionne ... :) Google a VRAIMENT besoin d'inclure la durée dans l'extrait afin que vous puissiez l'obtenir avec un seul appel au lieu de deux ... soupir ....... c'est sur leur liste "wontfix".

14
John

J'ai écrit le cours suivant pour obtenir la durée de la vidéo YouTube à l'aide de l'API v3 de YouTube (qui 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 API_KEY pour utiliser l'API YouTube:

  1. Créez un nouveau projet ici: https://console.developers.google.com/project
  2. Activez "API de données YouTube" sous "API et authentification" -> API
  3. Créez une nouvelle clé de serveur sous "API et authentification" -> Informations d'identification
6
Dima L.

Ce code extrait la durée de la vidéo YouTube à l'aide de l'API YouTube v3 en transmettant un ID vidéo. Cela 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é d'API YouTube de votre domaine sur https://console.developers.google.com et générer des informations d'identification pour vos besoins.

2
Vignesh Chinnaiyan

Durée en secondes en utilisant Python 2.7 et l'API YouTube v3:

    try:        
        dur = entry['contentDetails']['duration']
        try:
            minutes = int(dur[2:4]) * 60
        except:
            minutes = 0
        try:
            hours = int(dur[:2]) * 60 * 60
        except:
            hours = 0

        secs = int(dur[5:7])
        print hours, minutes, secs
        video.duration = hours + minutes + secs
        print video.duration
    except Exception as e:
        print "Couldnt extract time: %s" % e
        pass
1
andrea-f