wake-up-neo.com

Wie erhalte ich mit YouTube API Version 3 eine Videodauer?

Ich verwende YouTube API v3, um YouTube zu durchsuchen.

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

Wie Sie sehen, enthält die Antwort JSON keine Videodauer. Gibt es eine Möglichkeit, Videodauer zu erhalten?

Rufen Sie vorzugsweise nicht erneut eine API für jedes Element im Ergebnis auf (es sei denn, dies ist der einzige Weg, um die Dauer abzurufen).

80
sleepwalkerfx

Nach dem Suchaufruf musst du die Videoressource der YouTube-Daten-API aufrufen. Sie können bis zu 50 Video-IDs in eine Suche aufnehmen, damit Sie sie nicht für jedes Element aufrufen müssen.

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

Sie möchten part=contentDetails Einstellen, da die Dauer dort ist.

Zum Beispiel der folgende Aufruf:

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

Gibt dieses Ergebnis:

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

Die Uhrzeit ist als ISO 8601-Zeichenfolge formatiert. PT steht für Time Duration, 4M ist 4 Minuten und 13S ist 13 Sekunden.

105
Matt Koskela

Ich habe es verstanden!

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

Dort gibt es die Zeit für YouTube API Version 3 zurück (der Schlüssel ist übrigens zusammengesetzt;). Ich benutzte $vId dass ich von der zurückgegebenen Liste der Videos des Kanals abgehauen bin, zeige ich die Videos von ...

Es funktioniert ... :) Google muss WIRKLICH die Dauer in das Snippet aufnehmen, damit Sie alles mit einem Anruf anstelle von zwei erhalten können ... seufz ... es ist auf der 'Wontfix'-Liste.

14
John

Ich habe die folgende Klasse geschrieben, um die Dauer von YouTube-Videos mithilfe der YouTube-API v3 zu ermitteln (es werden auch Miniaturansichten zurückgegeben):

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

Bitte beachte, dass du API_KEY benötigst, um die YouTube-API nutzen zu können:

  1. Erstellen Sie hier ein neues Projekt: https://console.developers.google.com/project
  2. Aktivieren Sie "YouTube Data API" unter "APIs & Auth" -> APIs
  3. Erstellen Sie einen neuen Serverschlüssel unter "APIs & Auth" -> Credentials
6
Dima L.

Dieser Code extrahiert die YouTube-Videodauer mithilfe der YouTube-API v3, indem eine Video-ID übergeben wird. Es hat bei mir funktioniert.

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

Sie können den YouTube-API-Schlüssel Ihrer Domain unter https://console.developers.google.com abrufen und Anmeldeinformationen für Ihre eigenen Anforderungen erstellen.

2

Dauer in Sekunden mit Python 2.7 und der YouTube-API 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