Verwenden der YouTube Daten API
Die YouTube Daten API bietet einen Lese- und Schreibzugriff auf YouTube
Inhalte. Benutzer können nicht authentifizierte Anfragen zu Google Daten Feeds durchführen
um Feeds von populären Videos, Kommentare, öffentliche Informationen über YouTube
Benutzerprofilen, Benutzer PlayListen, Favoriten, Einschreibungen und so weiter zu erhalten.
Für weitere Informationen über die YouTube Daten API schauen Sie in die
offizielle PHP
Entwickler Dokumentation auf code.google.com.
Authentifizierung
Die YouTube Daten API erlaubt aktuell einen nur-lesenden Zugriff auf
öffentliche Daten, welcher keine Authentifizierung benötigt. Für alle schreibenden
Anfragen muß sich ein Benutzer entweder mit ClientLogin oder AuthSub authentifizieren.
Schauen Sie bitte in das Kapitel
über Authentifizierung in der PHP Entwickler
Dokumentation für weitere Details.
Entwickler Schlüssel und Client ID
Ein Entwickler Schlüssel identifiziert den QouTube Entwickler der die
API Anfrage schickt. Eine Client ID identifiziert die Anwendung für
Logging und Debugging Zwecke. Schauen Sie bitte auf http://code.google.com/apis/youtube/dashboard/
um einen Entwickler Schlüssel und eine Client ID zu erhalten. Das angefügte Beispiel
demonstriert wie der Entwickler Schlüssel und die Client ID an das Zend_Gdata_YouTube
Service Pbjekt übergeben werden.
Einen Entwicklerschlüssel und eine ClientID an Zend_Gdata_YouTube übergeben
Öffentliche Video Feeds empfangen
Die YouTube Daten API bietet eine Vielzahl von Feeds die eine Liste
von Videos zurückgeben, wie zum Beispiel Standard Feeds, Abhängige Videos, Antworten auf
Videos, Videobewertungen, Benutzer Uploads, und Benutzer Favoriten. Zum Beispiel gibt
der Benutzer Upload Feed alle Videos zurück die von einem speziellen Benutzer
hochgeladen wurden. Sehen Sie in den You Tube
API Referenz Guide für eine detailierte Liste aller
vorhandenen Feeds.
Suchen nach Videos durch Metadaten
Man kann eine Liste von Videos erhalten die einem speziellen Suchkriterium
entsprechen, indem die YouTubeQuery Klasse verwendet wird. Die folgende Abfrage
schaut nach Videos welche das Wort "Katze" in Ihren Metadaten enthalten, beginnend
mit dem 10ten Video und 20 Videos pro Seite anzeigt, sortiert nach der Anzahl der
Ansichten.
Suchen nach VideosnewVideoQuery();
$query->videoQuery = 'cat';
$query->startIndex = 10;
$query->maxResults = 20;
$query->orderBy = 'viewCount';
echo $query->queryUrl . "\n";
$videoFeed = $yt->getVideoFeed($query);
foreach ($videoFeed as $videoEntry) {
echo "---------VIDEO----------\n";
echo "Titel: " . $videoEntry->mediaGroup->title->text . "\n";
echo "\nBeschreibung:\n";
echo $videoEntry->mediaGroup->description->text;
echo "\n\n\n";
}
]]>
Für weitere Details über die verschiedenen Abfrageparameter, kann der Referenz
Guide hilfreich sein. Die vorhandenen Hilfsfunktionen in Zend_Gdata_YouTube_VideoQuery für jeden dieser
Parameter werden im PHP
Entwickler Guide detailierter beschrieben.
Suchen nach Videos durch Kategorien und Tags/Schlüsselwörter
Die Suche nach Videos in speziellen Kategorien wird durch die Erstellung einer
speziell formatierten URL durchgeführt. Um, zum Beispiel,
nach Komödien-Videos zu suchen die das Schlüsselwort Hund enthalten:
Suchen nach Videos in speziellen KategoriennewVideoQuery();
$query->category = 'Comedy/Hund';
echo $query->queryUrl . "\n";
$videoFeed = $yt->getVideoFeed($query);
]]>Standard Feeds empfangen
Die YouTube Daten API hat eine Anzahl an Standard
Feeds. Diese Standard Feeds können als Zend_Gdata_YouTube_VideoFeed
Objekte empfangen werden indem die spezifizierten URLs und die in
der Zend_Gdata_YouTube
Klasse vordefinierten Konstanten (zum Beispiel
Zend_Gdata_YouTube::STANDARD_TOP_RATED_URI) oder die vordefinierten Hilfsmethoden
verwendet verwendet werden (siehe das Codebeispiel anbei).
Um die Top gereihten Videos zu erhalten kann die folgende Helfermethode verwendet
werden:
Empfangen eines Standard VideofeedsgetTopRatedVideoFeed();
]]>
Es gibt auch Abfrageparameter um eine Zeitperiode zu spezifizieren über die der
Standardfeed berechnet wird.
Um zum Beispiel die Top gereihten Videos von Heute zu erhalten:
Verwenden von Zend_Gdata_YouTube_VideoQuery um Videos zu empfangennewVideoQuery();
$query->setTime('today');
$videoFeed = $yt->getTopRatedVideoFeed($query);
]]>
Alternativ kann man den Feed erhalten indem die URL verwendet
wird:
Empfangen eines Video Feeds durch die URLgetVideoFeed($url);
]]>Videos erhalten die von einem Benutzer hochgeladen wurden
Man kann eine Liste von Videos erhalten die von einem bestimmten Benutzer
hochgeladen wurden indem eine einfache Helfermethode verwendet wird. Dieses Beispiel
empfängt Videos die vom Benutzer 'liz' hochgeladen wurden.
Empfangen von Videos die von einem spezifischen Benutzer hochgeladen wurden
getUserUploads('liz');
]]>Videos empfangen die von einem Benutzer bevorzugt werden
Man kann eine Liste von bevorzugten Videos eines Benutzer erhalten indem eine
einfache Helfermethode verwendet wird. Dieses Beispiel empfängt Videos die vom
Benutzer 'liz' bevorzugt werden.
Empfangen von den bevorzugten Videos eines BenutzersgetUserFavorites('liz');
]]>Videobewertungen für ein Video erhalten
Man kann eine Liste von Videobewertungen eines Videos erhalten indem eine einfache
Helfermethode verwendet wird. Dieses Beispiel empfängt Videobewertungen für ein
Video mit der ID 'abc123813abc'.
Empfangen eines Feeds von Video AntwortengetVideoResponseFeed('abc123813abc');
]]>Videokommentare erhalten
Die Kommentare für jedes YouTube Video können auf unterschiedlichen Wegen empfangen
werden. Um die Kommentare für das Video mit der ID 'abc123813abc' zu empfangen kann der
folgende Code verwendet werden:
Empfangen eines Feeds von Videokommentaren von einer Video IDgetVideoCommentFeed('abc123813abc');
foreach ($commentFeed as $commentEntry) {
echo $commentEntry->title->text . "\n";
echo $commentEntry->content->text . "\n\n\n";
}
]]>
Kommentare können für ein Video auch empfangen werden wenn man eine Kopie des Zend_Gdata_YouTube_VideoEntry
Objektes hat:
Empfangen eines Feeds von Videokommentaren von einem Zend_Gdata_YouTube_VideoEntry
getVideoEntry('abc123813abc');
// Die ID des Videos in diesem Beispiel ist unbekannt, aber wir haben die URL
$commentFeed = $yt->getVideoCommentFeed(null,
$videoEntry->comments->href);
]]>PlayList Feeds erhalten
Die YouTube Daten API bietet Informationen über Benutzer, inklusive
Profile, PlayListen, Einschreibungen, und weitere.
Die PlayListen eines Benutzer erhalten
Die Bibliothek bietet eine Helfermethode um die PlayListen, die einem angegebenen
Benutzer zugeordnet sind, zu erhalten. Um die PlayListen des Benutzers 'liz' zu
erhalten kann der folgende Code verwendet werden:
Empfangen von Playlisten eines BenutzersgetPlaylistListFeed('liz');
foreach ($playlistListFeed as $playlistEntry) {
echo $playlistEntry->title->text . "\n";
echo $playlistEntry->description->text . "\n";
echo $playlistEntry->getPlaylistVideoFeedUrl() . "\n\n\n";
}
]]>Eine spezielle PlayListe erhalten
Die Bibliothek bietet eine Helfermethode um Videos zu erhalten die mit einer
gegebenen PlayListe assoziiert sind. Um die PlayListe für einen speziellen PlayList
Eintrag zu erhalten kann der folgende Code verwendet werden:
Empfangen von speziellen PlaylistengetPlaylistVideoFeedUrl();
$playlistVideoFeed = $yt->getPlaylistVideoFeed($feedUrl);
]]>Eine Liste von Einschreibungen eines Benutzers erhalten
Ein Benutzer kann verschiedene Arten von Einschreibungen besitzen: Kanal
Einschreibungen, Tag Einschreibungen, oder Favoriten Einschreibungen. Ein Zend_Gdata_YouTube_SubscriptionEntry
wird verwendet um individuelle Einschreibungen zu repräsentieren.
Um alle Einschreibungen für den Benutzer 'liz' zu erhalten kann der folgende Code
verwendet werden:
Empfangen aller Einschreibungen eines BenutzersgetSubscriptionFeed('liz');
foreach ($subscriptionFeed as $subscriptionEntry) {
echo $subscriptionEntry->title->text . "\n";
}
]]>Ein Benutzerprofil erhalten
Die öffentlichen Profil Informationen kann man für jeden YouTube Benutzer erhalten. Um
das Profil für den Benutzer 'liz' zu erhalten kann der folgende Code verwendet werden:
Empfangen des Profils eines BenutzersgetUserProfile('liz');
echo "Benutzername: " . $userProfile->username->text . "\n";
echo "Alter: " . $userProfile->age->text . "\n";
echo "Heimatstadt: " . $userProfile->hometown->text . "\n";
]]>Videos auf YouTube hochladen
Stellen Sie sicher das Sie die Diagramme im Protokoll
Guide auf code.google.com für eine Übersicht des Upload Prozesses betrachtet
haben. Das Hochladen von Videos kann auf 2 Wegen durchgeführt werden: Entweder durch das
direkte Hochladen des Videos oder durch das Senden der Video Meta-Daten und indem der
Benutzer das Video über ein HTML Formular hochlädt.
Um ein Video direkt hochzuladen, muß zuerst ein neues Zend_Gdata_YouTube_VideoEntry
Objekt erstellt und einige benötigte Meta-Daten spezifiziert werden. Das folgende
Beispiel zeigt das Hochladen des Quicktime Videos "mytestmovie.mov" auf YouTube mit den
folgenden Eigenschaften:
Metadaten die im folgenden Code-Beispiel verwendet werdenEigenschaftWertTitleMy Test MovieCategoryAutosKeywordscars, funnyDescriptionMy descriptionFilenamemytestmovie.movFile MIME typevideo/quicktimeVideo private?FALSEVideo location37, -122 (lat, long)Developer Tagsmydevelopertag, anotherdevelopertag
Der folgende Code erzeugt einen leeren Zend_Gdata_YouTube_VideoEntry
der Hochgeladen werden kann. Ein Zend_Gdata_App_MediaFileSource
wird dann verwendet um die aktuelle Video Datei zu speichern. Unter der Hand wird ein
Zend_Gdata_YouTube_Extension_MediaGroup
Objekt verwendet um alle Metadaten des Videos zu speichern. Die anbei beschriebenen
Helfermethoden erlauben es die Metadaten des Videos zu setzen ohne das man sich um das
Medien Gruppen Objekt kümmern muß. $uploadUrl ist der Ort an den der neue Eintrag
gepostet wird. Er kann entweder durch $userName des aktuell authentifizierten Benutzers
spezifiziert werden, oder, alternativ indem einfach der String 'default' verwendet wird
um auf den aktuell authentifizierten Benutzer zu verweisen.
Ein Video hochladennewMediaFileSource('mytestmovie.mov');
$filesource->setContentType('video/quicktime');
$filesource->setSlug('mytestmovie.mov');
$myVideoEntry->setMediaSource($filesource);
$myVideoEntry->setVideoTitle('My Test Movie');
$myVideoEntry->setVideoDescription('My Test Movie');
// Beachte das category eine gültige YouTube Kategorie sein muß !
$myVideoEntry->setVideoCategory('Comedy');
// Setzt Keywords, beachte das es ein Komma getrennter String ist
// und das keines der Schlüsselwörter ein Leerzeichen enthalten darf
$myVideoEntry->SetVideoTags('cars, funny');
// Optional Entwickler Tags setzen
$myVideoEntry->setVideoDeveloperTags(array('mydevelopertag',
'anotherdevelopertag'));
// Optional den Ort des Videos setzen
$yt->registerPackage('Zend_Gdata_Geo');
$yt->registerPackage('Zend_Gdata_Geo_Extension');
$where = $yt->newGeoRssWhere();
$position = $yt->newGmlPos('37.0 -122.0');
$where->point = $yt->newGmlPoint($position);
$myVideoEntry->setWhere($where);
// URI hochladen für den aktuell authentifizierten Benutzer
$uploadUrl =
'http://uploads.gdata.youtube.com/feeds/users/default/uploads';
// Versuch das Video hochzuladen, eine Zend_Gdata_App_HttpException fangen wenn
// Sie vorhanden ist oder nur eine reguläre Zend_Gdata_App_Exception
try {
$newEntry = $yt->insertEntry($myVideoEntry,
$uploadUrl,
'Zend_Gdata_YouTube_VideoEntry');
} catch (Zend_Gdata_App_HttpException $httpException) {
echo $httpException->getRawResponseBody();
} catch (Zend_Gdata_App_Exception $e) {
echo $e->getMessage();
}
]]>
Um ein Video als privat hochzuladen muß einfach $myVideoEntry->setVideoPrivate();
verwendet werden; bevor das Hochladen durchgeführt wird. $videoEntry->isVideoPrivate()
kann verwendet werden um zu prüfen ob ein Video Eintrag privat ist oder nicht.
Browser-basierender Upload
Browser-basierendes hochladen wird fast auf die gleiche Weise durchgeführt wie direktes
Hochladen, ausser das man kein Zend_Gdata_App_MediaFileSource
Objekt an den Zend_Gdata_YouTube_VideoEntry
anhängt den man erstellt. Stattdessen überträgt man einfach alle Metadaten des Videos um
ein Token Element zurück zu erhalten welches verwendet werden kann um ein
HTML Upload Formular zu erstellen.
Browser-basierender UploadsetVideoTitle('My Test Movie');
$myVideoEntry->setVideoDescription('My Test Movie');
// Beachte das die Kategorie eine gültige YouTube Kategorie sein muß !
$myVideoEntry->setVideoCategory('Comedy');
$myVideoEntry->SetVideoTags('cars, funny');
$tokenHandlerUrl = 'http://gdata.youtube.com/action/GetUploadToken';
$tokenArray = $yt->getFormUploadToken($myVideoEntry, $tokenHandlerUrl);
$tokenValue = $tokenArray['token'];
$postUrl = $tokenArray['url'];
]]>
Der obige Code gibt einen Link und ein Token aus das verwendet wird um ein
HTML Formular zu erstellen und im Browser des Benutzers anzuzeigen.
Ein einfaches Beispielformular wird unten gezeigt mit $tokenValue welches den Inhalt des
zurückgegebenen Token Elements darstellt, welches wie gezeigt, oben von $myVideoEntry
empfangen wird. Damit der Benutzer, nachdem das Formular übermittelt wurde, auf die
Website umgeleitet wird, muß ein $nextUrl Parameter an die $postUrl von oben angehängt
werden, was auf die gleiche Weise funktioniert wie der $next Parameter eines AuthSub
Links. Der einzige Unterschied ist hier das, statt eines einmal zu verwendenden Tokens,
ein Status und eine ID Variable in der URL zurückgegeben werden.
Browser-basierender Upload: Erstellen des HTML Formulars'.
''.
''.
''.
'';
]]>Den Upload Status prüfen
Nachdem ein Video hochgeladen wurde, wird es im Upload Feed des authentifizierten
Benutzer unmittelbar sichtbar sein. Trotzdem wird es auf der Site nicht öffentlich sein
solange es nicht bearbeitet wurde. Videos die ausgeschlossen oder nicht erfolgreich
hochgeladen wurden werden auch nur im Upload Feed des authentifizierten Benutzers
sichtbar sein. Der folgende Code prüft den Status eines Zend_Gdata_YouTube_VideoEntry
um zu sehen ob er jetzt noch nicht live ist oder ob er nicht akzeptiert wurde.
Den Status von Video Uploads checkengetControl();
} catch (Zend_Gdata_App_Exception $e) {
echo $e->getMessage();
}
if ($control instanceof Zend_Gdata_App_Extension_Control) {
if ($control->getDraft() != null &&
$control->getDraft()->getText() == 'yes') {
$state = $videoEntry->getVideoState();
if ($state instanceof Zend_Gdata_YouTube_Extension_State) {
print 'Upload Status: '
. $state->getName()
.' '. $state->getText();
} else {
print 'Die Status Informationen des Videos konnten bis jetzt nicht'
. ' empfangen werden. Bitte versuchen Sie es etwas später'
. ' nochmals.\n";
}
}
}
]]>Andere Funktionen
Zusätzlich zur oben beschriebenen Funktionalität, enthält die YouTube
API viele andere Funktionen die es erlauben Video Metadaten zu
verändern, Video Einträge zu löschen und den kompletten Bereich an Community Features
der Site zu verwenden. Einige der Community Features die durch die
API verändert werden können enthalten: Ratings, Kommentare,
Playlisten, Einschreibungen, Benutzer Profile, Kontakte und Nachrichten.
Bitte schauen Sie in die komplette Dokumentation die im
PHP
Entwickler Guide auf code.google.com zu finden ist.