PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Kleine Einführung in die YouTube API

with 8 comments

So, heute ist die YouTube API dran, nachdem ich letzte Woche die SlideShare API vorgestellt hatte. Mit Hilfe der YouTube Data API ist es möglich Videos hochzuladen, nach Videos zu suchen und Kommentare abzurufen. Man kann sich mit der API auch „einloggen“ und Dinge tun die man als eingeloggter User machen kann, beispielsweise als dieser User Videos hochladen, Playlisten bearbeiten usw.

Da wir uns die Hände nicht unnötig schmutzig machen wollen nutzen wir wieder Zend-Klassen dafür. Ich zeige hier die Verwendung von Zend_Gdata_YouTube, wenn man das ganze Zend Framework scheut kann man die Zend_Gdata Klassen aber auch einzeln downloaden. PHP 5.1.4 und Zend_Gdata > 1.7.7 werden aktuell benötigt.

Für die öffentlichen Funktionen benötigen wir keine Authentifizierung, wir können direkt loslegen. Wenn die YouTube VideoID bekannt ist kann man Informationen zum betreffenden Video wie folgt abrufen:

<?
// loader or autoloader here
require_once 'Zend/Loader.php'; // the Zend dir must be in your include_path
Zend_Loader::loadClass('Zend_Gdata_YouTube');

$yt = new Zend_Gdata_YouTube();
$yt->setMajorProtocolVersion(2);
$entry = $yt->getVideoEntry('oebqlzblfyo');

printVideoEntry($entry);

Die printVideoEntry() Funktion zeigt in diesem Fall Informationen des Zend_Gdata_YouTube_VideoEntry Objekts an:

function printVideoEntry($videoEntry)
{
    // the videoEntry object contains many helper functions
    // that access the underlying mediaGroup object
    echo 'Video: ' . $videoEntry->getVideoTitle() . "\n";
    echo 'Video ID: ' . $videoEntry->getVideoId() . "\n";
    echo 'Updated: ' . $videoEntry->getUpdated() . "\n";
    echo 'Description: ' . $videoEntry->getVideoDescription() . "\n";
    echo 'Category: ' . $videoEntry->getVideoCategory() . "\n";
    echo 'Tags: ' . implode(", ", $videoEntry->getVideoTags()) . "\n";
    echo 'Watch page: ' . $videoEntry->getVideoWatchPageUrl() . "\n";
    echo 'Flash Player Url: ' . $videoEntry->getFlashPlayerUrl() . "\n";
    echo 'Duration: ' . $videoEntry->getVideoDuration() . "\n";
    echo 'View count: ' . $videoEntry->getVideoViewCount() . "\n";
    echo 'Rating: ' . $videoEntry->getVideoRatingInfo() . "\n";
    echo 'Geo Location: ' . $videoEntry->getVideoGeoLocation() . "\n";
    echo 'Recorded on: ' . $videoEntry->getVideoRecorded() . "\n";

    // see the paragraph above this function for more information on the
    // 'mediaGroup' object. in the following code, we use the mediaGroup
    // object directly to retrieve its 'Mobile RSTP link' child
    foreach ($videoEntry->mediaGroup->content as $content) {
        if ($content->type === "video/3gpp") {
            echo 'Mobile RTSP link: ' . $content->url . "\n";
        }
    }

    echo "Thumbnails:\n";
    $videoThumbnails = $videoEntry->getVideoThumbnails();

    foreach($videoThumbnails as $videoThumbnail) {
        echo $videoThumbnail['time'] . ' - ' . $videoThumbnail['url'];
        echo ' height=' . $videoThumbnail['height'];
        echo ' width=' . $videoThumbnail['width'] . "\n";
    }
}

Die Ausgabe sieht dann so aus:

Video: Velocity Europe, Artur Bergman, "Full Stack Awareness"
Video ID: oebqlzblfyo
Updated: 2011-12-08T16:06:11.000Z
Description: Artur Bergman  VP Engineering and Operations, Wikia/Fastly

Performance and operability doesn't come from simply focusing on a single part of your application or infrastructure. They come from having a systemic view of what makes your stack work, what could bottleneck it, and what could bring it down. I'll talk about this journey from kernel to continents.
Category: Tech
Tags: velocityconf, europe, 2011
Watch page: http://www.youtube.com/watch?v=oebqlzblfyo&feature=youtube_gdata_player
Flash Player Url: http://www.youtube.com/v/oebqlzblfyo?version=3&f=videos&app=youtube_gdata
Duration: 1090
View count: 2883
Rating: Array
Geo Location:
Recorded on:
Mobile RTSP link: rtsp://v8.cache2.c.youtube.com/CiILENy73wIaGQkqf-U2l-rmoRMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp
Mobile RTSP link: rtsp://v4.cache3.c.youtube.com/CiILENy73wIaGQkqf-U2l-rmoRMYESARFEgGUgZ2aWRlb3MM/0/0/0/video.3gp
Thumbnails:
00:09:05 - http://i.ytimg.com/vi/oebqlzblfyo/default.jpg height=90 width=120
 - http://i.ytimg.com/vi/oebqlzblfyo/hqdefault.jpg height=360 width=480
00:04:32.500 - http://i.ytimg.com/vi/oebqlzblfyo/1.jpg height=90 width=120
00:09:05 - http://i.ytimg.com/vi/oebqlzblfyo/2.jpg height=90 width=120
00:13:37.500 - http://i.ytimg.com/vi/oebqlzblfyo/3.jpg height=90 width=120

Es ist auch möglich einige Standard-Feeds abzurufen, wie beispielsweise recently_features, most_viewed, top_rated, top_favorites usw. Und das geht so:

printVideoFeed($yt->getRecentlyFeaturedVideoFeed());

Die printVideoFeed() Funktion ist einfach eine Schleife über die Ergebnisse:

function printVideoFeed($videoFeed)
{
    $count = 1;
    foreach ($videoFeed as $videoEntry) {
        echo "Entry # " . $count . "\n";
        printVideoEntry($videoEntry);
        echo "\n";
        $count++;
    }
}

Oder aber alle ähnlichen Videos zum oben gezeigten:

printVideoFeed($yt->getRelatedVideoFeed('oebqlzblfyo'));

Oder alle Videos eines bestimmten Users:

printVideoFeed($yt->getuserUploads('OreillyMedia'));

Alle Antworten die Feeds betreffen liefern standardmäßig erstmal maximal 25 Ergebnisse zurück. Möchte man „weiterblättern“ kann man das so tun:

try {
  $nextFeed = $videoFeed->getNextFeed();
} catch (Zend_Gdata_App_Exception $e) {
  echo $e->getMessage() . "\n";
}

Gibt es keine nächstes Seite wird eine Exception geworfen.

Eine Suche nach einem Suchstring sieht wie folgt aus:

$query = $yt->newVideoQuery();
$query->videoQuery = 'phpunit test';
$query->startIndex = 10;
$query->maxResults = 20;
$query->orderBy = 'viewCount';
$videoFeed = $yt->getVideoFeed($query->getQueryUrl(2));

printVideoFeed($videoFeed);

Für alle „non-public“ Zugriffe auf die API benötigt man einen Developer-Account, mit dem dann ein API-Key generiert werden kann. Das betrifft beispielsweise den Video-Upload, Kommentare und Ratings setzen, Nachrichten lesen, Playlists bearbeiten und vielem mehr. Im YouTube Developer API Guide befinden sich noch viele weitere Informationen zur API, genauso wie im Zend_Gdata_YouTube Manual.

Written by Michael Kliewe

Dezember 14th, 2011 at 11:08 am

8 Responses to 'Kleine Einführung in die YouTube API'

Subscribe to comments with RSS or TrackBack to 'Kleine Einführung in die YouTube API'.

  1. […] Kleine Einführung in die YouTube API | PHP Gangsta – Der PHP Blog mit Praxisbezug […]

  2. Auch wenn ich mich erst sehr über den Subtitel Ihres Blogs amüsiert habe, konnte ich mich letztendlich doch noch auf den eigentlichen Blog-Beitrag konzentrieren. Ich grübele gerade, was von beidem mir noch besser gefällt 😉

    Gruß tish

    tish

    6 Mrz 12 at 16:39

  3. @tish: Wenn du eine Antwort gefunden hast, ich würde mich freuen sie zu lesen. Ach, und bitte „dutz“ mich…

    Michael Kliewe

    6 Mrz 12 at 16:57

  4. @Michael: Wird gemacht. btw: Beides ist inhaltlich ein Highlight 🙂
    Danke dir!

    tish

    8 Mrz 12 at 10:56

  5. Hallo an alle YouTube-Experten… Ich schreibe gerade meine Magisterarbeit und muss dafür viele Videos analysieren… Mein Problem ist, dass YouTube nur die ersten 1000 Videos bzw. 50 Seiten zu einem Suchbegriff anzeigt. Kann mir vielleicht hier jemand sagen, ob bzw. wie man die kompletten Ergebnisse angezeigt bekommen kann??? Ginge das vielleicht über YouTube API?? Würde mich riesig über Tipps freuen 🙂

    Teresa

    20 Sep 12 at 11:27

  6. @Teresa Das ist eine gute Frage, weiß ich gerade auch nicht was die API da für Beschränkungen hat bzgl. startIndex und maxResults.
    Ich weiß ja nicht ob du spezielle Suchbegriffe hast oder wahllos irgendwelche Videos haben möchtest, sonst könntest du mehrere Suchen abfeuern, du fängst an mit „aaa“ und hast 1000 Ergebnisse, dann „aab“ und hast 1000 Ergebnisse, „aac“ und so weiter. Das sind dann 20.000 Suchen mit bis zu 1000 Ergebnissen, dann landest du schonmal bei mehreren Millionen Videos. Mußt nur schauen was die API für Beschränkungen hat bzgl. Anzahl der Requests pro Tag.
    Da dürfte man jedenfalls etwas tricksen können.

    Michael Kliewe

    20 Sep 12 at 11:54

  7. @Michael,danke für die Antwort (die ich erst jetzt gesehen habe..)
    Ich habe von einem Medienanalyse-Unternehmen erfahren, dass sie YouTube Videos über/mit API analysieren. Es scheint also zu funktionieren 🙂

    Teresa

    4 Okt 12 at 19:27

  8. I know that I haven’t covered all types of pets that people
    have, but hopefully I’ve given you at least a little inspiration in your journey for the
    perfect pet name. This service makes F&D speaker systems one
    of the most sought after products in the entertainment industry.

    Now, you can organize the gaming sessions at your place and have fun
    beating your friends with high scores in your favorite Nintendo game.

    Rodney

    3 Nov 13 at 16:17

Leave a Reply

You can add images to your comment by clicking here.