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 Detail.
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 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 wurdengetUserUploads('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_VideoEntrygetVideoEntry('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 object is then used to hold the actual video file. Under the hood, the Zend_Gdata_YouTube_Extension_MediaGroup
Objekt wird 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.