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);

giovedì 12 novembre 2009

Go: un nuovo linguaggio di programmazione

Go è un nuovo linguaggio di programmazione, che ha suscitato in me un po' di interesse.
Dal sito ufficiale http://golang.org/ dicono che sia semplice, veloce, sicuro, in grado di gestire la concorrenza tra i thread, divertente e open source.
Forse questo video (in lingua inglese) aiuta a capire che cos'è e i suoi punti di forza:

A questo punto non ci rimane che provarlo :) .
Ho effettuato i miei test su un PC con una installazione GNU/Linux e distribuzione Ubuntu. Premetto che non ho fatto altro che seguire le istruzioni riportate sul sito ufficiale, ma sappiamo benissimo che quando si tratta di nuovi strumenti, un conto e leggere un howto, un altro è provare il tutto sulla propria pelle .. ehm ... sul proprio sistema.
Il primo passo è quello di installare i pacchetti necessari per il processo di compilazione del compilatore :) (bel gioco di parole):
sudo apt-get install bison gcc libc6-dev ed
sudo apt-get install mercurial
Quindi occorre impostare le variabili d'ambiente necessarie all'esecuzione di GO:
export GOROOT=$HOME/go
export GOOS=linux
export GOARCH=386
export GOBIN=$HOME/go/bin
Per verificare le modifiche fatte:
env | grep '^GO'
Quindi aggiornare la variabile d'ambiente PATH:
export PATH=$PATH:$GOBIN
Ora occorre procurarsi i sorgenti. Per questo utilizzeremo il comando hg, il software client di Mercurial, il software utilizzato per l'archiviazione dei sorgenti di Go:
hg clone -r release https://go.googlecode.com/hg/ $GOROOT

Una volta recuperati i sorgenti, procedere con la compilazione:
cd $GOROOT/src
mkdir $GOBIN
./all.bash
In questo modo sul nostro sistema è installato il compilatore Go, pronto per l'uso.
In un normalissimo editor di testo scriviamo il nostro primo programma:
package main
import "fmt"
func main() {
  fmt.Printf("hello, world\n")
}
Supponendo di salvare il file con nome hello.go, da terminale eseguire il processo di compilazione:
8g hello.go
eseguire il processo di linking:
8l hello.8
lanciare l'eseguibile del programma appena creato:
./8.out
Il risultato:
hello, world
Come direbbero in un noto programma televisivo... cotto ... mangiato!