Co jakiś czas trafiają się projekty, które wymagają obsługi plików wideo. Zazwyczaj chodzi o to, by użytkownik takiego serwisu mógł z poziomu panelu administracyjnego dodawać filmy, które potem byłyby wyświetlane na stronie. Można to rozwiązać na dwa sposoby. Samemu napisać obsługę uploadu plików oraz zapewnić niezbędną infrastrukturę lub skorzystać z gotowych rozwiązań (o ile to możliwe), w tym przypadku z Youtube.

W przykładach posłużę się fikcyjnym użytkownikiem, dlatego też skopiowane przykłady mogą nie zadziałać, dopóki nie zmienicie użytkownika na istniejącego.

Pobranie plików wideo danego użytkownika jest niezmiernie proste i sprowadza się do dwóch wierszy:

$yt = new Zend_Gdata_YouTube();
$videoFeed = $yt->getUserUploads('nieistniejacyuzytkownikyoutube');

Niestety zmienna $videoFeed zawiera masę niepotrzebnych informacji i dotarcie do tych, na którym nam zależy jest nieco utrudnione. Na szczęście jest na to rada – Zend_Gdata_YouTube_VideoEntry. Klasa ta odwzorowuje pojedynczy plik wideo i pozwala na pobranie szczegółowych informacji o każdym pliku. Dostęp do obiektu tej klasy można uzyskać w pętli foreach.

foreach($videoFeed as $videoEntry) {
}

Obiekt ten zawiera wszystkie niezbędne informacje na temat pojedynczego pliku wideo, które można uzyskać przy pomocy odpowiednich metod.

  • getVideoId() – zwraca unikatowy identyfikator pliku wideo
  • getVideoTitle() – zwraca tytuł
  • getVideoDescription() – zwraca opis
  • getVideoCategory() – zwraca kategorię
  • getVideoTags() – zwraca tablicę (array) tagów
  • getVideoDuration() – zwraca czas wideo w sekundach
  • getFlashPlayerUrl() – zwraca bezpośredni adres do pliku swf
  • getVideoWatchPageUrl() – zwraca adres url do strony z wideo
  • getVideoThumbnails() – zwraca tablicę (array), której elementami są kolejne tablice (array), składające się z:
    • czas (time) w postaci 00:01:26, określający moment filmu, z którego pochodzi miniaturka
    • wysokość (height) miniaturki
    • szerokość (width) miniaturki
    • adres (url) miniaturki

Oprócz powyższych danych, interesującą informacją są komentarze. Można je pobrać na kilka sposobów, ja jednak preferuję ten:

$comments = $yt->getVideoCommentFeed($id);

Gdzie $id to identyfikator pliku wideo. Metoda ta zwraca obiekt typu Zend_Gdata_YouTube_CommentFeed, który jest kolekcją obiektów typu Zend_Gdata_YouTube_CommentEntry. Dostęp do kolejnych obiektów uzyskać można w pętli foreach.

Ostatecznie cały kod wygląda następująco.

$yt = new Zend_Gdata_YouTube();
$videoFeed = $yt->getUserUploads('nieistniejacyuzytkownikyoutube');

foreach($videoFeed as $videoEntry) {
	$id = $videoEntry->getVideoId();
	echo $id;
	echo $videoEntry->getVideoTitle();
	echo $videoEntry->getVideoDescription();
	echo $videoEntry->getVideoCategory();
	foreach($videoEntry->getVideoTags() as $tag) {
		echo $tag;
	}
	echo $videoEntry->getVideoDuration();
	echo $videoEntry->getFlashPlayerUrl();
	echo $videoEntry->getVideoWatchPageUrl();
	foreach($videoEntry->getVideoThumbnails() as $thumbnail) {
		print_r($thumbnail);
	}
	$comments = $yt->getVideoCommentFeed($id);
	foreach($comments as $comment) {
		echo $comment->title->text;
		echo $comment->content->text;
	}
}