Anno: 2009/10 Prof. Roberto Beraldi Autore: Giorgio Federici
INTRODUZIONE TECNOLOGIE UTILIZZATE FACEBOOK JOYENT FBML SDK-PHP GRAPH API YOUTUBE EBAY TMDb ENTRIAMO NELL’APPLICAZIONE LOGIN PERMESSI CONNESSIONI SCHEDE MUSIC FILM BOOKS eBayLibro.php libro.php
In questo progetto si è voluta realizzare un’applicazione mash-up che sfruttasse le API messe a disposizione da servizi già esistenti. In particolare, le API del social network Facebook sono state utilizzate per accedere alle informazioni del profilo di un utente registrato, le API di YouTube per la ricerca e la visualizzazione di contenuti video, le API di eBay per mostrare oggetti in vendita e infine le API di TMDb per collegarsi ad un movie DB. Nel seguito verranno presentate singolarmente le tecnologie di cui si è fatto uso, mostrandole sia singolarmente che nel loro complesso.
L’application server che verrà utilizzato è messo a disposizione da JOYENT.com nel suo Free Developer Program. Le risorse disponibili sono: One Joyent “shared” developer account with a single SSH/SFTP login One MySQL and PostgreSQL login with up to 5 databases (in total) allowed, access to phpMyAdmin and phpPgAdmin tools 5 GB of total disk space 100 GB of monthly bandwidth 200 MB of total memory available, with a 100 MB per-process limit 10 ports to run processes on Ability to create Cron jobs and define Bootup Actions (SMF services) Many command line utilities, editors, version control tools, etc.
Per la visualizzazione dell’applicazione sullo schermo si è sfruttato il linguaggio di markup di Facebook, FBML, simile all’HTML. Si tratta dell’estensione proprietaria, orientata alla piattaforma Facebook, di HTML. I tag e gli elementi di base del linguaggio si riconoscono per la sigla iniziale “fb:” che precede il nome. E’ possibile dividere gli elementi di FBML in gruppi, in base alla tipologia e a quello che riescono a fare. Tools Tools User/Groups User/Groups Notifications and Requests Notifications and Requests Platform Internationalization Platform Internationalization Deprecated Deprecated Status Messages Status Messages Page Navigation Page Navigation WallVisibility on Profile WallVisibility on Profile Profile-specific Profile-specific Misc Misc Editor Display Editor Display Embedded Media Embedded Media Dialog Dialog Additional Permissions Additional Permissions Social Plugins Social Plugins Message Attachments Message Attachments Forms Forms
L’applicazione sarà sviluppata utilizzando il linguaggio di programmazione PHP. Facebook mette a disposizione un PHP SDK: Dalla documentazione di Facebook: “This SDK provides Facebook Platform support to your PHP-based web apps. This library helps you add Facebook Login and Graph API support to your Website.”
Il 21 Aprile 2010, in occasione dell'evento F8 Live, Facebook ha presentato una serie di novità riguardanti il modo di sviluppare applicazioni per il social network. Con i nuovi SDK sono state presentate anche le nuove API, chiamate Graph API. L'idea dietro queste nuove API, infatti, è quella di considerare elementi quali utenti, pagine fan, gruppi, foto e video come nodi di un grafo (oggetti nella rivisitazione fatta da Facebook). Tutti questi nodi sono poi collegati tra loro tramite archi (o connessioni nel gergo Facebook). Le risposte API sono solo in formato JSON ed inoltre sarà possibile richiamarle tramite URL.
Una delle più importanti caratteristiche di YouTube sono le sue YouTube Data Api. Queste REST-based API permettono agli sviluppatori di accedere e visualizzare i dati video di YouTube, ed integrarli all’interno della propria applicazione. Come tutti i servizi REST-based si inizia con una richiesta HTTP per la risorsa voluta. Questa richiesta HTTP contiene una query con uno o più parametri di input. Il server risponde alla query con un Atom o RSS.
Direttamente da eBay: “L'API di eBay consente agli sviluppatori di accedere ai dati e alle funzionalità di eBay, incluse le informazioni sulle categorie e le inserzioni in corso, e di presentare tali informazioni in un formato personalizzato.” Nell’applicazione si utilizza il ramo di API chiamato Finding API. Queste forniscono l’accesso a funzionalità di ricerca sulla piattaforma eBay. Con le Finding API abbiamo la possibilità di cercare e navigare per gli oggetti in vendita su eBay. Verrà costruita una chiamata HTTP GET con una risposta in formato XML, che all’interno del codice PHP sarà presa per mostrare i risultati in una pagina web.
Le API TMDb sono una potente risorsa per tutti gli sviluppatori che vogliono integrare dati sui film e il loro cast, oltre ai poster e screens. Tutti i metodi delle API sono disponibili in XML, YAML e JSON Per utilizzare queste API bisogna: Registrare un account Generare la API Key da utilizzare poi per richiamare i metodi che vogliamo
Nel file config.php definiamo le costanti con i parametri, forniti da Facebook, utili a realizzare, poi, il login: Nel file applogin.php, prima includiamo la libreria php e poi realizziamo il login vero e proprio:
Leggiamo direttamente la documentazione di Facebook per conoscere quali permessi dobbiamo inserire nei parametri al momento del login. L’utente dovrà accettare che l’applicazione possa utilizzare questo tipo di informazioni. Eccoli nel codice:
Costruiamo tre array che contengono le connessioni alla musica, ai film e ai libri contenuti all’interno del profilo dell’utente che sta usando l’applicazione: Quello che noi catturiamo può essere visualizzato tramite il browser:
Per la navigazione delle pagine utilizziamo il sistema di schede che Facebook mette a disposizione tramite il linguaggio FBML: Nel codice questo è realizzato così:
La pagine dell’applicazione che riguarda la musica è realizzata in due parti, la prima utilizza FBML e le Graph API, mentre nella seconda viene realizzata la ricerca e la visualizzazione dei contenuti di YouTube. Mostriamo l’elenco dei musicisti che sono inseriti nel profilo dell’utente, tramite l’immagine e il nome associati alla relativa pagina Facebook. Il tag FBML consente di creare, passando l’identificatore del musicista, un link alla pagina Facebook dedicata ad esso.
Con una semplice form chiediamo all’utente di scegliere quale musicista (tra i suoi preferiti) utilizzare come parola chiave per la ricerca su YouTube, insieme al numero di risultati che devono essere visualizzati. Quando l’utente sottomette la form, i parametri decisi dall’utente sono inseriti all’interno di una feed URL e il risultato XML è processato e visualizzato.
La prima parte della pagina che riguarda i film, è analoga a quella per la musica, con l’unica differenza che i preferiti presi sono i movies presenti nel profilo dell’utente. Per prima cosa, tramite il nome del film, recuperiamo l’ID che lo identifica all’interno di TMDb. Si utilizza la chiamata Movie.search: Conoscendo l’ID, possiamo utilizzare la chiamata Movie.getInfo, per recuperare le informazioni che ci interessano del film:
Anche nella pagina relativa ai libri, diamo prima un elenco, con immagini, delle preferenze che l’utente ha inserito nel proprio profilo. La tecnica utilizzata è quella mostrata precedentemente. La parte di applicazione che riguarda eBay è realizzata tramite due classi: libro.php ebayLibro.php
Definiamo le variabili per la richiesta API: Dobbiamo costruire il filtro che utilizziamo per le nostre ricerche e tramite questo andare a creare un URL.
Costruiamo la chiamata HTTP GET findItemsByKeywords: Catturiamo il documento di ritorno dalla API di eBay: Infine, se la richiesta ha avuto successo, prendiamo dalla risposta alcuni campi per visualizzare il risultato:
E’ stata presentata l’applicazione realizzata per il corso di Piattaforme Software Distribuite Per utilizzarla sarà sufficiente iscriversi su Facebook e collegarsi a: Quelle mostrate sono solo alcune delle molte possibilità che si possono avere integrando le API dei servizi di cui si è parlato (Facebook, Youtube, eBay, TMDb). Le difficoltà incontrate riguardano spesso la documentazione, non sempre chiara e precisa nelle diverse versioni di API rilasciate. Inoltre, è fondamentale verificare, periodicamente, gli aggiornamenti degli sviluppatori, per non trovarsi con l’applicazione non funzionante.