wake-up-neo.net

Wie erhalte ich die Videodauer mithilfe der YouTube-API?

Ich möchte die Dauer eines Youtube-Videos erhalten. Hier ist der Code, den ich ausprobiert habe:

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

Bitte überprüfen Sie die XML-Datei. Ich habe den Titel dieses Videos erhalten. Ich möchte die Dauer von <yt:duration seconds='29'/> erhalten.

Wie erhält man das seconds-Attribut dieses <yt>-Tags?

10
Developer

Aufgrund der bevorstehenden Abwertung der YouTube v2-API wird hier eine aktualisierte Lösung angezeigt.

  1. Beginnen Sie mit dem Klonen der Google-API PHP Client hier
  2. Als Nächstes sollten Sie eine Anwendung bei Google hier registrieren, indem Sie ein neues Projekt erstellen, die YouTube-Daten-API im Abschnitt "APIs und Auth → API" aktivieren und
  3. Erstellen Sie unter "APIs und auth → Credentials" eine neue OAuth-Client-ID und fügen Sie den vollständigen Pfad zu Ihrer Umleitungs-URI-Liste hinzu. (d. h. http://example.com/get_youtube_duration.php )
  4. Verwenden Sie this code (der von this sample code angepasst wurde), und stellen Sie sicher, dass Sie die Variablen $ OAUTH2_CLIENT_ID und $ OAUTH2_CLIENT_SECRET mit Ihren eigenen Werten aus Schritt 3 ausfüllen.
  5. Hardcodieren Sie einen Wert für die $ videoId-Variable oder setzen Sie ihn mit dem Parameter video_id get (d. H. http://example.com/get_youtube_duration.php?video_id=XXXXXXX ).
  6. Besuchen Sie Ihr Skript, klicken Sie auf den Link, um die App zu autorisieren, und verwenden Sie Ihr Google-Konto, um ein Token zu erhalten, das Sie zurück zu Ihrem Code leitet und die Dauer anzeigt.

Hier ist Ihre Ausgabe:

Video Duration

0 mins

29 secs

Einige zusätzliche Ressourcen: https://developers.google.com/youtube/v3/docs/videos#contentDetails.durationhttps: // Entwickler. google.com/youtube/v3/docs/videos/list

Folgendes funktioniert nur für die V2-API.

Dies funktionierte für mich auf der Annahme, dass nur ein Element für die Dauer im Feed enthalten ist.

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

Ausgabe:

TITLE: Introducing iTime
Duration: 29
17
Chris Rasco

Hier ist YouTube API V3 mit Beispiel für das Abrufen der Videodauer. Vergessen Sie jedoch nicht, Ihren API-Schlüssel unter https://console.developers.google.com/project zu erstellen.

     $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

Eine kurze und einfache Lösung mit 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

Alle vorherigen Antworten geben die Dauer in einem Textformat an:

Diese Lösung gibt Ihnen die Stunden/Minuten/Sekunden für die Umwandlung in das gewünschte Format:

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

Sehr leicht 

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