martedì 8 dicembre 2009

Youtube e la geolocalizzazione dei video

Google Data API

Google fornisce all'utente Web una enorme quantità di servizi quali gestione dei documenti, calendario, mappe. Questi servizi sono fruibili dall'utente finale tramite il proprio Browser Web. Per quanto riguarda gli sviluppatori, Google espone questi servizi in diversi formati:
  • Atom: utilizza il formato Atom per la rappresentazione dei dati e il protocollo HTTP per veicolare l'informazione;
  • JSON: utilizza il formato JSON per la rappresentazione dei dati e il protocollo HTTP per veicolare l'informazione.
In questo modo uno sviluppatore è nelle condizioni di integrare le informazioni gestite dai vari servizi Google nelle proprie applicazioni (Web e/o Desktop).
Le regole da seguire per la gestione di questa comunicazione (interrogazione dei dati, modifica dei dati eccetera) sono definite da un protocollo (fornito da Google), il Google Data Protocol.
Nel dettaglio questo protocollo indica al programmatore come richiamare i servizi (HTTP) e come gestire le risposte dal servizio (XML, JSON).

Quali A.P.I. sono disponibili?

Google mette a disposizione la API Directory nella quale sono elencati tutti i servizi disponibili. Per ciascuna API è presente un link alla guida, e link a Librerie Client.
Le librerie client sono disponibili per ciascuna API in differenti linguaggi di programmazione. Le librerie client forniscono un utile livello di astrazione che facilita la vita al programmatore che non deve occuparsi di gestire le richieste HTTP e le risposte XML/JSON.

YouTube Data API

Le YouTube Data API permettono di integrare le funzionalità offerte da Youtube nel proprio sito Web.
Per i programmatori PHP esiste una ottima guida che illustra come usufruire di ogni singola funzionalità tramite il proprio linguaggio di sviluppo.

PHP e YouTube in Azione

Una ottima libreria PHP client per YouTube è Zend Gdata.Dalla pagina di Zend Gdata è possibile scaricare l'ultima versione della libreria e accedere alla documentazione specifica.

Download Zend Gdata

Scaricare l'ultima versione dal sito:
http://framework.zend.com/download/gdata/
Estrarre l'archivio, ottenendo così 4 directory: demo, documentation, library, tests.
Copiare la directory library nella directory di lavoro. La directory di lavoro conterrà i sorgenti creati e dovrà essere "visibile" al Web Server.
Creare un file (index.php) nella directory di lavoro:

<?php
$clientLibraryPath = 'library';
$oldPath = set_include_path(get_include_path() . PATH_SEPARATOR . $clientLibraryPath);
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_YouTube');
$yt = new Zend_Gdata_YouTube();
$query = $yt->newVideoQuery();
$query->setLocation("45.8529825,9.3900705");
$query->setLocationRadius("5km");
echo $query->queryUrl . "\n";
$videoFeed = $yt->getVideoFeed($query);
$i=0;
foreach ($videoFeed as $videoEntry) {
  echo $i++;
    echo "---------VIDEO----------<br>";
    echo "Title: " . $videoEntry->getVideoTitle() . "<br>";
    echo "<img src=\"".$videoEntry->mediaGroup->thumbnail[0]->url."\"><br>";
    echo "\nDescription:\n";
    echo $videoEntry->getVideoDescription();
    echo "<br><hr>";
}

Nel dettaglio, occorre inizializzare l'ambiente in modo che la libreria Zend Gdata sia visibile allo script:

$clientLibraryPath = 'library';
$oldPath = set_include_path(get_include_path() . PATH_SEPARATOR . $clientLibraryPath);
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_YouTube');

Per poter definire i parametri di ricerca utilizzare l'oggetto VideoQuery:

$query = $yt->newVideoQuery();
$query->setLocation("45.8529825,9.3900705");
$query->setLocationRadius("5km");

In questo specifico caso, il metodo setLocation serve per definire la latitudine e longitudine dei video geolocalizzati che si vogliono ricercare e il metodo setLocationradius serve per definire l'area (5 kilometri) di ricerca.
Per ottenere l'elenco dei video è sufficiente utilizzare il metodo getVideoFeed:

$videoFeed = $yt->getVideoFeed($query);