Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Youtube e PHP: introduzione al web service

Introduzione al Web service di Youtube e alle istruzioni per utilizzarlo con PHP. Come integrare i video di Youtube e le sue funzioni all'interno del nostro sito
Introduzione al Web service di Youtube e alle istruzioni per utilizzarlo con PHP. Come integrare i video di Youtube e le sue funzioni all'interno del nostro sito
Link copiato negli appunti

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 e ClientLogin.

La prima (AuthSub) è riservata alle applicazioni web e prevede che le credenziali di accesso dell'utente non siano memorizzate nella nostra applicazione. In sostanza, i nostri utenti potranno effettuare il login su YouTube con le proprie credenziali, e potranno quindi interagire con la nostra applicazione usando il proprio nome utente. La procedura AuthSub funge quindi da proxy tra la nostra applicazione e la procedura di autenticazione di YouTube, con uno scambio di dati per generare una sessione autenticata che viene ben descritta nella documentazione.

La seconda possibilità (ClientLogin) invece prevede che l'applicazione vada a memorizzare le credenziali di accesso dell'utente ed è utilizzabile sia per applicazioni web che per applicazioni desktop. In questo caso la nostra applicazione va ad autenticarsi sfruttando le credenziali di accesso memorizzate per cui tutti i nostri visitatori accederanno al servizio YouTube utilizzando, in modo trasparente, lo stesso account.

Ad esempio, se il nostro scopo è dare la possibilità ai nostri visitatori, che abbiano un account YouTube, di inserire un commento ad un video, utilizzando chiaramente il proprio nome utente, la scelta per l'autenticazione dovrà ricadere sulla procedura AuthSub. Invece, se volessimo integrare, in una nostra sezione privata del sito, la possibilità di caricare video su YouTube sfruttando solamente il nostro account, la procedura più indicata potrebbe essere ClientLogin.

Rimandiamo alla documentazione per il funzionamento di AuthSub, mentre proponiamo un esempio di codice per la procedura ClientLogin che utilizzeremo più spesso di seguito. La creazione dell'oggetto $youtube visto in precedenza va dunque modificata come segue:

// 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 dove VIDEO-ID è una stringa alfanumerica che identifica il singolo video.

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 è l'oggetto creato in precedenza, $videoEntry è un oggetto della classe Zend_Gdata_YouTube_VideoEntry che rappresenta l'insieme di informazioni sul video specificato, mentre $videoId è chiaramente l'identificativo del video (in questo caso si tratta di un tutorial, in inglese, sull'utilizzo della YouTube API).

L'oggetto $videoEntry offre diversi metodi per accedere alle informazioni sul filmato:

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() che restituisce un array formato dalla media dei voti e dal numero di voti registrati per quel video.

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 è chiaramente il nome dell'utente del quale vogliamo visualizzare i video, mentre $videoFeed è un oggetto della classe Zend_Gdata_YouTube_VideoFeed che rappresenta appunto il VideoFeed, ossia l'elenco di oggetti VideoEntry. Volendo è possibile utilizzare i metodi della classe VideoFeed, oppure sfruttarlo come un array, ad esempio:

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 deve essere valorizzata con l'identificativo di uno dei feed disponibili, elencati di seguito:

  • most_viewed, i video più visti
  • top_rated, i video più votati
  • recently_featured, i video in primo piano
  • watch_on_mobile, i video visti sui cellulari
  • most_discussed, i video più discussi (maggior numero di commenti)
  • top_favorites, i video preferiti dagli utenti
  • most_linked, i video più linkati
  • most_responded, i video con maggior numero di risposte
  • most_recent, i video più recenti

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.

Ti consigliamo anche