YouTube è un sito web che offre un servizio di condivisione di filmati tramite il quale gli utenti possono caricare i propri filmati, visualizzarli e condividerli con gli altri utenti che a loro volta possono commentare e votare i video inseriti. A partire dal 2006 il servizio è stato acquisito da Google, il quale mette a disposizione degli sviluppatori la possibilità di integrare le funzionalità di YouTube all'interno delle proprie applicazioni o dei propri siti web mediante un pratico web service. Lo scopo di queste pagine sarà introdurre il lettore al web service offerto da YouTube, per capirne le potenzialità ed il funzionamento di base, naturalmente affrontando la problematica dal punto di vista dello sviluppatore PHP.
La nostra applicazione sarà quindi in grado di effettuare tutte le operazioni eseguibili da un utente, sia in forma anonima (ricerca e visualizzazione di filmati e relative informazioni) sia in forma autenticata (caricamento, aggiornamento o rimozione di filmati, inserimento di commenti). In questo secondo caso, sarà quindi necessario un account registrato presso YouTube.
Per iniziare
L'architettura del web service utilizza un classico approccio REST, e questo per noi significa, in sintesi, che sarà necessario inviare richieste HTTP ottenendo in risposta documenti XML da interpretare. La struttura del protocollo è abbondantemente documentata e l'aspetto che probabilmente più ci interessa è il fatto che è già presente un'implementazione ufficiale in PHP, facente parte del pacchetto Zend Framework.
Il primo passo sarà quindi procurarci le componenti che ci servono all'interno della libreria Zend, in particolare la classe Loader e il package Zend_Gdata (viene consigliata una versione successiva o uguale alla 1.7.7). Per quanto riguarda la versione di PHP richiesta, si fa riferimento alla 5.1.4 o superiore. È importante verificare che le librerie Zend siano posizionate in una cartella che fa parte dell'include_path.
Il passo successivo sarà le registrazione della nostra applicazione presso Google, con lo scopo di ottenere una chiave per lo sviluppatore (developer key). Per effettuare questo passo è necessario disporre di un account Google: una volta effettuato il login potremo ottenere la chiave cliccando su Create new developer key. L'unico dato obbligatorio da specificare è il nome dell'applicazione, a cui possiamo facoltativamente associare anche un indirizzo URL e una breve descrizione. Effettuata questa procedura avremo ottenuto la developer key, a cui sarà associata un'altra chiave detta Client ID: questi dati ci torneranno utili in seguito.
Per quanto riguarda il codice PHP, è necessario creare un oggetto di tipo Zend_Gdata_YouTube, che sarà uno degli strumenti principali dei nostri lavori. All'inizio dei nostri script inseriremo quindi le seguenti righe:
require_once 'Zend/Loader.php'; // verificare che la cartella Zend sia nell'include_path
Zend_Loader::loadClass('Zend_Gdata_YouTube');
$youtube = new Zend_Gdata_YouTube();
L'oggetto $youtube creato in questo modo ci consentirà di utilizzare tutte le funzionalità che sono normalmente fruibili senza autenticazione.
Nel caso in cui fosse necessario accedere a funzioni riservate agli utenti registrati, dovremo prevedere questa eventualità, sfruttando una delle due opzioni di autenticazione che sono disponibili, AuthSub o ClientLogin, caricando le relative classi:
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Procedure di autenticazione
Le due possibilità per quanto riguarda l'autenticazione degli utenti vengono chiamate AuthSub ClientLogin
La prima (AuthSub ) non siano memorizzate proxy
La seconda possibilità (ClientLogin )
Ad esempio, se il nostro scopo è dare la possibilità ai nostri visitatori, che abbiano un account YouTube, di inserire un commento caricare video su YouTube
funzionamento di AuthSub// prima carico le classi necessarie con Zend_Loader
// URL per l'autenticazione
$authenticationURL= 'https://www.google.com/youtube/accounts/ClientLogin';
// Credo un client http per il login
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
$username = 'mio-nome@gmail.com',
$password = 'mia-password',
$service = 'youtube',
$client = null,
$source = 'Nome applicazione',
$loginToken = null,
$loginCaptcha = null,
$authenticationURL);
// Un breve nome per l'applicazione
$applicationId = 'Prova applicazione v1';
// Client ID e developer key
$clientId = 'mio-client-ID';
$developerKey = 'mia-developer-key';
// Creo quindi l'oggetto $youtube
$youtube = new Zend_Gdata_YouTube($httpClient, $applicationId, $clientId, $developerKey);
Ottenere informazioni su un video
Gli indirizzi URL dei video visibili su YouTube hanno, di base, la seguente forma: http://www.youtube.com/watch?v=VIDEO-ID
Un volta noto l'identificativo del video che ci interessa, possiamo ottenere informazioni a riguardo con il seguente codice:
$videoId = 'iIp7OnHXBlo';
$videoEntry = $youtube->getVideoEntry($videoId);
dove $youtube
$videoEntry
Zend_Gdata_YouTube_VideoEntry
$videoId
L'oggetto $videoEntry
echo 'Titolo: ' . $videoEntry->getVideoTitle() . '<br />';
echo 'Video ID: ' . $videoEntry->getVideoId() . '<br />';
echo 'Aggiornamento: ' . $videoEntry->getUpdated() . '<br />';
echo 'Descrizione: ' . $videoEntry->getVideoDescription() . '<br />';
echo 'Categoria: ' . $videoEntry->getVideoCategory() . '<br />';
echo 'Tags: ' . implode(", ", $videoEntry->getVideoTags()) . '<br />';
echo 'Indirizzo URL: ' . $videoEntry->getVideoWatchPageUrl() . '<br />';
echo 'Flash Player URL: ' . $videoEntry->getFlashPlayerUrl() . '<br />';
echo 'Durata: ' . $videoEntry->getVideoDuration() . '<br />';
echo 'Visualizzazioni: ' . $videoEntry->getVideoViewCount() . '<br />';
$rating = $videoEntry->getVideoRatingInfo();
echo 'Media voto: ' . $rating['average'] . '<br />';
echo 'Numero voti: ' . $rating['numRaters'] . '<br />';
echo 'Geo Location: ' . $videoEntry->getVideoGeoLocation() . '<br />';
echo 'Registrazione: ' . $videoEntry->getVideoRecorded() . '<br />';
Il codice è di facile interpretazione in quanto tutti i metodi getter utilizzati restituiscono una stringa di informazioni, ad eccezione del metodo getVideoRatingInfo()
Volendo è possibile anche accedere alle miniature di anteprima dei video, sfruttando il seguente codice:
$thumbnails = $videoEntry->getVideoThumbnails();
foreach($thumbnails as $thumb) {
echo '<p>';
echo '<img alt="Anteprima video" src="' . $thumb['url'] . '" height="' . $thumb['height'] . '" width="' . $thumb['width'] . '" /><br />';
echo $thumb['time'] . '</p>';
}
Tipicamente sono presenti più miniature, in formati diversi: 90x120 oppure 240x320.
In questo paragrafo abbiamo dato per scontato di conoscere l'identificativo del video da visualizzare, ma ciò non è sempre garantito. L'aspetto più interessante, comunque, è l'aver verificato la struttura di VideoEntry, che rappresenta appunto le informazioni disponibili per il singolo video, e che utilizzeremo ancora in seguito. Durante la ricerca di video, per parola chiave, per utente, o in qualsiasi altro metodo, avremo a che fare inoltre con oggetti VideoFeed, che altro non sono che liste di VideoEntry.
Visualizzare i video inseriti da un utente
Nel caso in cui volessimo effettuare una ricerca dei video inseriti da uno specifico utente, la libreria ci fornisce una semplice funzione per ottenere il relativo oggetto VideoFeed:
$userName = 'GoogleDevelopers';
$videoFeed = $youtube->getuserUploads($userName);
dove $userName $videoFeed Zend_Gdata_YouTube_VideoFeed VideoFeed VideoEntry VideoFeed
foreach ($videoFeed as $videoEntry) {
// operazioni sul singolo video
}
Visualizzare i feed standard
YouTube offre un certo numero di VideoFeed standard, ossia alcuni elenchi di video potenzialmente interessanti, accessibili tipicamente dalla homepage del sito, e disponibili anche tramite la YouTube API, semplicemente conoscendo l'identificativo del feed che ci interessa. Il codice, anche in questo caso, è molto semplice:
// costruisco l'indirizzo URL del feed
$feed = 'top_rated';
$url = 'http://gdata.youtube.com/feeds/api/standardfeeds/ '. $feed;
$videoFeed = $youtube->getVideoFeed($url);
La variabile $feed
- most_viewed
- top_rated
- recently_featured
- watch_on_mobile
- most_discussed
- top_favorites
- most_linked
- most_responded
- most_recent
Conclusioni
Imparare a maneggiare le componenti basilari VideoEntry e VideoFeed è il passo iniziale per poter lavorare con la YouTube API. I codici proposti in questi paragrafi propongono interazioni di base che non richiedono autenticazione. Il prossimo passo sarà quindi la verifica delle potenzialità dell'API sfruttando una maggiore interazione con l'utente che potrà quindi effettuare ricerche per parola chiave o per categoria, o inserire i propri video, il tutto con semplici esempi di codice che verranno proposti in un prossimo articolo.