In questo articolo vi presentiamo 10 snippet - 10 brevi porzioni di codice - utili per collegarsi e consumare con PHP alcuni dei servizi web 2.0 più noti: Picasa, Flickr, Twitter, Youtube e così via.
Lo scopo è quello di mostrare, attraverso esempi pratici pronti da essere copiati e incollati, quanto sia semplice collegarsi a questi siti e pubblicare sul proprio sito i dati e le risorse che espongono: foto, video, post ecc.
Ogni codice proposto è ampiamente commentato e, con un po' di applicazione, è facilmente adattabile anche a situazioni diverse da quelle prospettate nell'esempio. Sono disponibili anche molti link verso le classi che rendono più semplice utilizzare, quando necessario, le API dei servizi.
Ecco l'elenco degli snippet disponibili in questo articolo
- Snippet 1: pubblicare la timeline di Twitter
- Snippet 2: estrarre le immagini di un album da Picasa
- Snippet 3: mostrare le immagini di un utente su Flickr
- Snippet 4: embedding di un video da YouTube
- Snippet 5: visualizzare una mappa di Google Maps
- Snippet 6: abbreviare gli URL con Bit.ly
- Snippet 7: mostrare sul proprio sito i pulsanti per il social bookmarking
- Snippet 8: aggiungere un evento a Google Calendar
- Snippet 9: stampare a video i documenti di Google Docs
- Snippet 10: leggere i feed RSS di un utente su Twitter
Se apprezzate l'articolo, e siete iscritti a Facebook, vi chiediamo due secondi del vostro tempo per fare click sul pulsante "mi piace" pubblicato qui sotto. Ci sarà utile per capire se questi approfondimenti siano o no graditi.
Snippet 1: pubblicare la timeline di Twitter
Il primo esempio di interazione con i servizi Web 2.0 che verrà analizzato in questa serie di articoli riguarda il noto servizio di microblogging Twitter che permette di postare tramite il proprio account brevi informazioni della lunghezza massima di 140 caratteri.
Per la procedura che verrà esposta di seguito sono necessari alcuni prerequisiti:
- un account su Twitter;
- la classe "twitterPHP" disponibile all'indirizzo http://code.google.com/p/twitter-php/;
- un ambiente di sviluppo che metta a disposizione il supporto per PHP come minimo in versione 5.x e con estensione cURL abilitata.
Non è invece richiesta alcuna API con la quale interfacciarsi né il supporto di alcun database. Una volta scaricata la classe, questa potrà essere salvata in una cartella, denominata per esempio "classi", all'interno della quale saranno caricate tutte le altre classi che verranno utilizzate per gli esempi descritti in questa trattazione.
Fatto questo sarà possibile utilizzare i metodi messi a disposizione dalla classe. Nello specifico verrà analizzata la procedura da utilizzare per accedere alla timeline di Twitter, cioè l'elenco dei post (tweets) pubblicati da un determinato account (per selezionare l'intero codice basta fare doppio clic al suo interno):
<?php
// inclusione del file di classe
@require_once("classi/twitter.class.php");
// abilitazione della cache, il percorso indicato deve corrispondere ad una risorsa scrivibile
Twitter::$cacheDir = dirname(__FILE__) . "/tmp";
// istanza della classe con autenticazione al proprio account su Twitter
$twitter = new Twitter("username", "password");
// regole per la visualizzazione dei Tweets
$channel = $twitter->load(Twitter::ME_AND_FRIENDS);
// conteggio dei Tweets presenti in Timeline
if (count($channel)!=0){
?>
<ul>
<?php
// ciclo per la visualizzazione dei Tweets
foreach ($channel->status as $status){
// link all'account
echo "<li><a href="http://twitter.com/".$status->user->screen_name."">";
// immagine e nome utente
echo "<img src="".$status->user->profile_image_url.""> ".$status->user->name."</a> ";
// testo del singolo Tweet
echo $status->text;
// data di pubblicazione
echo "<br />Pubblicato il ".date("j.m.Y H:i", strtotime($status->created_at))."<br /><br /></li>rn";
}
}else{
// notifica in caso di Timeline vuota
echo "Non sono presenti tweet nella Timeline.";
}
?>
</ul>
Per utilizzare il codice proposto è necessario utilizzarlo in una pagina Web con codifica UTF-8, inoltre, nella fase di istanza della classe:
$twitter = new Twitter("username", "password");
"username" e "password" vanno sostituiti con l'username e la password del proprio account su Twitter; se si desidera visualizzare soltanto i propri Tweets, la riga:
$channel = $twitter->load(Twitter::ME_AND_FRIENDS);
Dovrà essere modificata in questo modo:
$channel = $twitter->load(Twitter::ME);
Snippet 2: estrarre le immagini di un album da PicasaWeb
PicasaWeb è un servizio messo a disposizione da Google per la creazione di album fotografici online, nel caso specifico verrà mostrato il codice necessario per la creazione di una piccola applicazione in grado di autenticarsi a questa piattaforma, rilevare la presenza di un album e mostrare le immagini in esso contenute corredate dalle informazioni ad esse associate.
Per la realizzazione dello script non verrà utilizzata alcuna classe esterna, i prerequisiti per il suo utilizzo saranno quindi semplicemente:
- un Web album pubblicato su PicasaWeb, quindi un account su Gmail;
- un ambiente di sviluppo basato su PHP (almeno versione 5.x) con estensione SimpleXML abilitata.
Anche in questo caso non sarà necessario interagire con alcuna API:
<?php
// autenticazione a Picasa
$userid = 'username@gmail.com';
// costruzione del feed URL
$feed= "http://picasaweb.google.com/data/feed/api/user/$userid?kind=photo";
// lettura del feed URL
$xml = simplexml_load_file($feed);
// estrazione del nome dell'album
$contatore = $xml->children('http://a9.com/-/spec/opensearchrss/1.0/');
// conteggio delle immagini
$n_immagini = $contatore->totalResults;
// visualizzazione del titolo
echo $xml->title."<br />rn";
echo "Nell'album sono presenti: " . $n_immagini ." immagini.<br />rn";
// il resto del codice viene eseguito soltanto se sono disponibili delle immagini
if($n_immagini!=0){
// ciclo di visualizzazione delle immagini
foreach ($xml->entry as $entry) {
// nome dell'immagine
$nome = $entry->title;
// descrizione
$didascalia = $entry->summary;
// dimensioni
$immagine = $entry->children('http://schemas.google.com/photos/2007');
$dimensione = $immagine->size;
$altezza = $immagine->height;
$larghezza = $immagine->width;
// miniature e tags
$media = $entry->children('http://search.yahoo.com/mrss/');
$miniatura = $media->group->thumbnail[1];
$tags = $media->group->keywords;
// visualizzazione dell'album
echo "<img src="" . $miniatura->attributes()->{'url'} . ""/><br />rn";
echo "Nome</span>: " . $nome . "<br />rn";
// la didascalia può essere assente
if($didascalia !=""){echo "$didascalia <br />rn";}
echo "Dimensioni: ". $dimensione . " bytes (". $altezza . " * " . $larghezza .") <br />rn";
echo "Tags: " . $tags . "<br /><br />rn";
}
}
?>
Per l'autenticazione al servizio è sufficiente indicare un indirizzo di posta elettronica su Gmail all'interno della seguente stringa:
$userid = 'username@gmail.com';
Esso non deve essere necessariamente il proprio, è infatti possibile utilizzare anche quello di un altro account che abbia acconsentito alla condivisione delle proprie immagini; da notare come lo snippet effettui un controllo sull'effettiva presenza di immagini all'interno dell'album prima di eseguire il codice necessario per la loro visualizzazione, inoltre, è stato inserito un controllo anche sulle didascalie in modo che non venga prodotta una riga vuota nel caso in cui queste siano assenti.
Snippet 3: mostrare le immagini di un utente su Flickr
Come è noto Flickr è un servizio di proprietà di Yahoo! che permette di creare degli album fotografici online e di condividerli con altri utenti. Il prossimo snippet proposto riguarderà quindi la creazione di un piccolo motore di ricerca, da inserire sulle pagine di un sito Web, che permetterà di visualizzare le immagini caricate da un determinato utente.
Per utilizzare l'applicazione sono necessari alcuni prerequisiti:
- la classe phpFlickr;
- un'API key per Flickr ottenibile con una semplice iscrizione su modulo presente sul sito di Flickr;
- un ambiente di sviluppo basato su PHP 5.
<?php
// inclusione della classe PHP
@require_once("classi/phpFlickr.php");
// istanza della classe (inserire la propria API Key)
$flickr = new phpFlickr("ba63ccef488c00ae430xxxxxxxx");
// inizializzazione del contatore
$i = 0;
// controllo sul parametro d'invio
if (isset($_POST['utente']) && !empty($_POST['utente'])) {
// rilevazione dell'identificativo univoco dell'utente
$utente = $flickr->people_findByUsername($_POST['utente']);
// rilevazione dell'URL delle immagini uploadate dall'utente
$indirizzo = $flickr->urls_getUserPhotos($utente['id']);
// intercettazione delle prime 20 immagini pubblicate
$immagini = $flickr->people_getPublicPhotos($utente['id'], NULL, NULL, 20);
$n_immagini = (array)$immagini['photos']['photo'];
// controllo sul numero di immagini presenti
if (count(n_immagini)!=0)
{
// ciclo di visualizzazione
foreach ($n_immagini as $img) {
echo "<a href="" . $indirizzo.$img['id'] ."">";
echo "<img alt="" . $img['title'] . "" src=" . $flickr->buildPhotoURL($img, "Square") . ">";
echo "</a>rn";
// incremento del contatore
$i++;
// creazione di una nuova riga ogni 5 immagini
if ($i % 5 == 0) {
echo "<br />rn";
}
}
}
}
?>
<h3>Ricerca un utente su Flikr</h3>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="utente"><br />
<input type="submit" value="Mostra Immagini">
</form>
L'applicazione proposta funziona in modo molto semplice, infatti:
- l'istanza della classe phpFlickr richiede come parametro l'API key per l'interazione con il servizio;
- una volta verificata la validità dell'API key, verrà effettuato un controllo sul parametro inviato dal form;
- se questo è disponibile e non è vuoto, verrà allora estratto l'identificativo univoco relativo all'utente cercato, con questo dato potrà essere rilevata l'URL associata alle immagini uploadate dall'utente stesso;
- una volta impostato il numero di immagini che si desidera visualizzare (nel caso specifico "20"), i file presenti in corrispondenza dell'URL rilavata verranno contati, se è disponibile almeno un'immagine viene eseguito il ciclo di visualizzazione delle miniature;
- ogni miniatura viene linkata al suo ingrandimento presente su Flickr.
Snippet 4: embedding di un video da YouTube
Il servizio per lo streaming video YouTube di Mountain View mette a disposizione un apposito codice per l'embedding ("inclusione") dei filmati presenti nella piattaforma all'interno di pagine Internet.
In certi casi, per esempio quando gli identificatori di più video sono memorizzati in una base di dati, può però essere utile ricorrere ad una classe apposita come per esempio YouTube Class, che consente di effettuare operazioni di embedding senza ricorrere al codice JavaScript fornito dal servizio.
Utilizzare questa classe è relativamente semplice e non richiede di interfacciarsi ad alcuna API, una volta scaricata è possibile richiamarla in uno snippet come il seguente per incorporare un video qualsiasi in una pagina:
<?php
// inclusione del file di classe
@require_once("classi/youtube.class.php");
// istanza della classe
$video = new YouTube("http://www.youtube.com/watch?v=qhkKRsKqWKU");
// immagini del video
echo $video->ShowImg() . " " . $video->ShowImg("http://www.youtube.com/watch?v=qhkKRsKqWKU", 2) . " " . $video->ShowImg("qhkKRsKqWKU", 3, "La Terra dei Cachi");
echo "<br /><br />n";
// embedding del filmato
echo $video->EmbedVideo();
echo "<br /><br />rn";
// visualizzazione dell'identificatore del video
echo "ID del filmato: " . YouTube::parseURL("http://www.youtube.com/watch?v=qhkKRsKqWKU&mode=user&search=");
?>
La prima operazione da compiere sarà quella relativa all'inclusione del file della classe (naturalmente salvato nella cartella "classi" che contiene tutte le librerie presentate in questa trattazione); in secondo luogo vi è la fase dell'istanza che accetta come parametro l'URL del filmato da includere completa di Video ID (nel caso specifico qhkKRsKqWKU); si giunge quindi alla parte relativa alla visualizzazione delle immagini del filmato grazie all'utilizzo del metodo ShowImg()
che accetta tre parametri opzionali:
- l'URL del video o in alternativa il relativo Video ID, se questo parametro dovesse essere omesso l'applicazione utilizzerà il dato passato come argomento al costruttore della classe;
- l'identificatore delle immagini, può essere "1","2" o "3" mentre come impostazione predefinita è uguale a "1";
- un testo alternativo all'immagine che, nel caso specifico, è "La Terra dei Cachi" mentre di default è "Video Screenshot".
A questo punto si passerà alla fase di embedding del filmato, questa sarà possibile attraverso l'apposito metodo denominato EmbedVideo()
che accetta tre parametri opzionali:
- l'URL del filmato o in alternativa il relativo identificatore univoco, se questo argomento dovesse essere omesso l'applicazione utilizzerà il dato passato come parametro al costruttore della classe;
- la larghezza del filmato espressa in pixels, come impostazione predefinita questa è pari a "425";
- l'altezza del filmato espressa in pixels, come impostazione predefinita questa è pari a "344".
Da notare l'utilizzo del metodo parseURL
che permette di estrarre il Video ID di un filmato da un'URL anche se questa presenta in querystring dei parametri addizionali; nel caso specifico, l'istruzione
// visualizzazione dell'identificatore del video
echo "ID del filmato: " . YouTube::parseURL("http://www.youtube.com/watch?v=qhkKRsKqWKU&mode=user&search=");
Permetterà di stampare la stringa:
ID del filmato: qhkKRsKqWKU
Snippet 5: visualizzare una mappa di Google Maps
Nel sempre utile PHPClasses.org è disponibile una classe denominata Easy Google Maps che semplifica nettamente il lavoro necessario per l'interazione tra un'applicazione PHP e le Google Maps messe a disposizione da Mountain View; nel caso specifico verrà mostrato un esempio del codice necessario per l'inclusione di una mappa all'interno di una pagina Web, per far questo sarà però prima necessario acquisire una Google API Key che potrà essere acquisita con una semplice richiesta sul sito di GoogleCode.
Fatto questo bisognerà salvare la classe Easy Google Maps nella cartella "classi" è creare un file in grado di istanziarla e di utilizzarne i metodi; a questo proposito, si analizzi l'esempio seguente:
<?php
// inclusione del file di classe
@require_once("classi/EasyGoogleMap.class.php");
// istanza della classe (necessario l'inserimento dell'API Key)
$gm = new EasyGoogleMap("ABQIAAAA7X29gAq8gWBqIXVJOF-mhxSYEBA2J6pchYJ27gm6_uNmvUaF6RTznA9_U_Z73wXLIqxxxxxxx");
// definizione del marker per la località, in questo caso una stella
$gm->SetMarkerIconStyle('STAR');
// impostazione dello zoom per la mappa
$gm->SetMapZoom(10);
// indicazione dell'indirizzo da visualizzare
$gm->SetAddress("Via Giulio Cesare, Monserrato, Cagliari");
// informazioni da visualizzare tramite il fumetto informativo
$gm->SetInfoWindowText("Inserire qui informazioni utili sulla località.");
// localizzazione della mappa
$gm->SetAddress("Sardegna, Italia");
// fumetto informativo per la localizzazione
$gm->SetInfoWindowText("L'isola della Sardegna.");
// destinazione del link al di sotto della mappa
$gm->SetSideClick('Sardegna');
?>
<html>
<head>
<title>Dove Trovarci</title>
<?php
// chiamata all'API Key
echo $gm->GmapsKey();
?>
</head>
<body>
<?php
// visualizzazione della mappa
echo $gm->MapHolder();
echo $gm->InitJs();
echo $gm->GetSideClick();
echo $gm->UnloadMap();
?>
</body>
</html>
Una volta incluso il file contenente la classe, si potrà passare alla fase di istanza della stessa, all'istanza dovrà essere passata come argomento l'API Key ottenuta in seguito alla richiesta effettuata su GoogleCode; a questo punto sarà possibile utilizzare i metodi della classe che, come risulta chiaro dal codice proposto, permettono di impostare alcune informazioni relative alla mappa, tra cui:
- l'indirizzo relativo alla località che verrà visualizzata;
- il livello dello zoom (in questo caso "10");
- le informazioni sulle località da mostrare attraverso il fumetto informativo;
- i collegamenti a corredo della mappa.
Per quanto riguarda il livello dello zoom, esso potrà essere definito arbitrariamente ma il valore definito dovrà essere supportato da Google Maps per la località indicata.
Snippet 6: abbreviare gli URL con Bit.ly
Con la diffusione delle piattaforme 2.0 si va sempre più affermando l'utilizzo di URL abbreviate (si pensi per esempio alla loro utilità nei servizi per il microblogging come Twitter e nei vari social network); uno dei servizi più utilizzati per l'accorciamento degli indirizzi Web è chiamato Bit.ly, un'applicazione utilizzabile gratuitamente che mette a disposizione delle API appositamente realizzate per l'URL shortening.
Nell'esempio mostrato in questo articolo verrà presentato un semplice snippet in grado di raccogliere come parametro un'URL in formato originale per poi restituirla in forma abbreviata; a questo scopo, oltre ad un ambiente di sviluppo basato su PHP 5.x, saranno necessarie:
- o la classe denominata Bitly API interaction PHP class;
- o un'API Key di Bit.ly che potrà essere ottenuta iscrivendosi al sito Web del servizio per poi recarsi sulla pagina appositamente dedicata alla generazione della API Key.
Durante la fase di iscrizione su Bit.ly verrà fornita anche una username che dovrà essere utilizzata per l'autenticazione al servizio all'interno dello script proposto di seguito.
Una volta scaricata la classe Bitly API interaction, essa potrà essere salvata all'interno della cartella dedicata alle classi, sarà quindi possibile passare al codice necessario per la realizzazione dello snippet che, come sarà possibile osservare, è composto da poche righe:
<?php
// inclusione del file di classe
@require_once "classi/bitly.php";
// istanza della classe
$bitly = new bitly("claudiogarau", "R_c98cb95e584f471cc1f98c90963axxxx");
// accorciamento dell'URL
echo $bitly->shorten("http://www.claudiogarau.it/")
?>
Analizziamo il codice proposto:
- viene incluso il file contenente la classe;
- si passa alla fase dell'istanza, questa richiede come argomenti la username definita durante l'iscrizione al servizio e l'API Key per l'interazione con Bit.ly, senza questi dati non sarà possibile eseguire lo script con successo;
- viene richiamato il metodo "shorten()" a cui viene passata come parametro l'URL da abbreviare.
Eseguendo la piccola applicazione, sarà possibile ottenere in output un risultato simile al seguente: http://bit.ly/amYATm
Naturalmente, il risultato sarà il medesimo per ogni esecuzione del codice (l'URL abbreviata deve essere univoca) a meno che non venga modificata l'URL da accorciare.
La classe utilizzata permette di svolgere anche l'operazione opposta rispetto a quella descritta in precedenza, cioè la riconversione di un'URL abbreviata nel suo formato originale ed esteso, in questo caso però dovrà essere utilizzato il metodo denominato expand():
// conversione dell'URL abbreviata
echo $bitly->expand('http://bit.ly/amYATm');
Snippet 7: mostrare sul proprio sito i pulsanti per il social bookmarking
Come è noto, il social bookmarking è un'evoluzione on line dei classici "Preferiti" disponibili per tutti i browser più utilizzati, la differenza fondamentale sta nel fatto che nel caso dei social bookmark gli indirizzi memorizzati vengono condivisi in Rete in modo da rendere disponibili le relative risorse collegate anche per gli altri internauti.
I servizi per il social bookmarking sono ormai centinaia, decine se si contano soltanto quelli più utilizzati, corredare i propri post con dei pulsanti che permettano di segnalarli alle diverse piattaforme di condivisione può quindi rivelarsi molto utile per generare traffico grazie ai propri visitatori.
In questo articolo verrà mostrato il codice necessario per utilizzare una classe, denominata Bookmarks Class e scaricabile dall'indirizzo, all'interno del proprio sito Web; questa classe mette a disposizione i pulsanti necessari per il bookmark su tutti i servizi più utilizzati tra cui per esempio Google Bookmarks, Digg, Yahoo Bookmarks, del.icio.us, StumbleUpon e Technorati.
Utilizzare questa classe è molto semplice e non richiede l'utilizzo di alcuna API, una volta salvato il file bookmars.class.php nella cartella destinata alle classi sarà possibile creare una semplice applicazione che la richiami:
<?php
// inclusione del file di classe
@require_once("classi/bookmarks.class.php");
// dominio del sito Web
$YourDomain = "http://www.claudiogarau.it";
// titolo del sito
$YourTitle = "Sito dedicato agli snippets 2.0";
// parole chiave del sito
$YourKeywords = "OOP, PHP, applicazioni Web, API, database";
// istanza della classe
$sb = new sozialBookmarks($YourDomain, $YourTitle, $YourKeywords);
// cartella delle immagini
$sb->setVar("imagesFolder", "pulsanti");
// larghezza immagini
$sb->setVar("imageWidth", 20);
// altezza immagini
$sb->setVar("imageHeight", 20);
// produzione dei pulsanti
$result = $sb->GetCode();
// visualizzazione dei pulsanti
echo $result;
?>
Una volta richiamato il file della classe, sono disponibili tre variabili destinate alle informazioni relative al sito Web da segnalare, completate queste informazioni sarà possibile definire alcune caratteristiche dei pulsanti (percorso e dimensioni ) e procedere con la loro visualizzazione.
Da notare che nell'archivio compresso della classe le immagini dei pulsanti non sono state inserite all'interno di alcuna cartella; nel caso in cui per una questione di ordine si voglia dedicare alle immagini un percorso apposito, ciò sarà possibile specificando la cartella utilizzata direttamente nel file che richiama la classe:
// cartella delle immagini
$sb->setVar("imagesFolder", "pulsanti");
Il file di classe, all'interno della funzione setcode()
, contiene una lista di link verso i vari social bookmark proposta nel seguente formato:
$SBCode .= ' <a href="http://www.google.com/reader/preview/*/feed/'.$this->url.'" target="'.$this->target.'" title=" @ to Google Reader "><img src="./'.$this->imagesFolder.'/bookmark_google_reader.png" width="'.$this->imageWidth.'" height="'.$this->imageHeight.'" alt="add to Google Reader" title=" @ to Google Reader " /></a>';
Sarà quindi possibile aggiungere facilmente nuovi social bookmark rispettando la sintassi già utilizzata e ricordandosi di caricare un nuovo pulsante nell'apposita cartella per ogni nuovo servizio linkato all'interno della funzione. Nello stesso modo sarà possibile commentare le righe relative ai social bookmarks che non si desidera utilizzare.
Snippet 8: aggiungere un evento a Google Calendar
Per creare uno snippet con il quale inserire eventi in Google Calendar è possibile utilizzare due classi:
- MyCurl: un wrapper che permette di inviare richieste HTTP tramite cURL;
- Google Calendar Wrapper che contiene i metodi necessari per l'autenticazione al servizio e l'inserimento degli eventi.
Inoltre, bisognerà possedere un account su Google con tanto di indirizzo di posta elettronica su Gmail; si noterà che le due classi sono un po' datate in quanto presentano il delimitatore iniziale di PHP nella forma <?
(che si consiglia di correggere in <?php
), per il resto però compiono la loro funzione efficacemente e senza errori (non è necessario utilizzare alcuna API Key).
Una volta scaricati i file richiesti che andranno salvati nella cartella "classi", si potrà procedere con la digitazione del codice dello snippet:
<?php
// controllo sull'invio da form
if(isset($_POST['submit']) && ($_POST['submit']=="Invia evento"))
{
// inclusione del file di classe
@require_once("classi/GoogleCalendarWrapper.php");
// istanza della classe
$gc = new GoogleCalendarWrapper("tuamail@tuamail.com", "tuapassword");
// parametri per l'inserimento
$evento = array();
$evento["title"] = filter_var($_POST["titolo"], FILTER_SANITIZE_STRING);
$evento["content"] = filter_var($_POST["testo"], FILTER_SANITIZE_STRING);
$evento["where"] = filter_var($_POST["dove"], FILTER_SANITIZE_STRING);
$evento["startDay"] = filter_var($_POST["inizio"], FILTER_SANITIZE_STRING);
$evento["startTime"] = filter_var($_POST["ora_inizio"], FILTER_SANITIZE_STRING);
$evento["endDay"] = filter_var($_POST["fine"], FILTER_SANITIZE_STRING);
$evento["endTime"] = filter_var($_POST["ora_fine"], FILTER_SANITIZE_STRING);
// chimata al metodo per l'inserimento
if($gc->add_event($evento)){
// notifica in caso di inserimento
echo "Evento '".$evento["title"]."' inserito con successo!";
}else{
// notifica in caso d'insuccesso
echo "Errore in inserimento";
}
}else{
// form per l'invio dell'evento
?>
<h1>Inserisci un evento:</h1>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Titolo:<br />
<input type="text" name="titolo"><br />
Testo:<br />
<inputtype="text" name="testo"><br />
Dove:<br />
<inputtype="text" name="dove"><br />
Inizio (aaaa-mm-gg):<br />
<input type="text" name="inizio"><br />
Ora inizio(oo:mm:ss):<br />
<input type="text" name="ora_inizio"><br />
Fine (aaaa-mm-gg):<br />
<input type="text" name="fine"><br />
Ora fine(oo:mm:ss):<br />
<input type="text" name="ora_fine"><br />
<input type="submit" name="submit" value="Invia evento">
</form>
<?php
}
?>
Lo snippet consiste in un semplice form che invia i dati al metodo add_event()
della classe, il quale si occupa dell'invio dell'evento a Google Calendar tramite una sessione cURL.
Snippet 9: stampare a video i documenti di Google Docs
Google Docs è un'applicazione che consente di editare e salvare documenti di testo e fogli di lavoro in formati largamente utilizzati come per esempio ".doc" e ".pdf"; la raccolta di programmi di Mountain View si caratterizza per essere utilizzabile direttamente online, grazie ad un semplice Google Account, senza la necessità di memorizzare nulla nel proprio disco rigido.
Ad ogni documento salvato su Google Docs corrisponde un identificativo univoco (ad esempio, la stringa alfanumerica ddw2x8n_169dpzsxfng), per cui sarà possibile accedere da browser ad un qualsiasi salvataggio per cui è consentito l'accesso dall'esterno grazie ad una querystring che contenga questo valore, sullo stile di quella di seguito indicata come esempio:
http://docs.google.com/View?id=ddw2x8n_169dpzsxfng
Questo stesso identificativo univoco, viene utilizzato da una piccola classe denominata "GoogleDocPrinter" (scaricabile da questa phpclasses) per stampare a video un documento on line ad esso corrispondente; utilizzare la classe è molto semplice e non richiede il possesso di alcuna API Key per interfacciarsi al motore di ricerca.
Si supponga per esempio di voler creare un piccolo form in grado di inviare ad un'applicazione l'identificativo univoco di un documento memorizzato sui server di Google Docs, lo snippet in questione potrebbe essere strutturato nel modo seguente:
<?php
// controllo sull'invio da form
if(isset($_POST['submit']) && ($_POST['submit']=="Invia Id") && isset($_POST['id_doc']) && ($_POST['id_doc'] !=""))
{
// inclusione del file di classe
@require_once("classi/GoogleDocPrinter.php");
// ricezione del parametro d'invio
$id_doc = trim($_POST['id_doc']);
// stampa a video del documento
GoogleDocPrinter::PrintGoogleDoc($id_doc);
}else{
// form per l'invio della richiesta
?>
<h1>Inserisci l'identificatore di un documento:</h1>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Id Google Docs:<br />
<input type="text" name="id_doc"><br />
<input type="submit" name="submit" value="Invia Id">
</form>
<?php
}
?>
In pratica:
- l'applicazione controlla che siano stati inviati i parametri richiesti, se questi non sono disponibili viene visualizzato il form per l'inserimento dell'identificatore univoco;
- una volta inviato il dato necessario per la stampa a video del documento, questo viene raccolto e passato al metodo della classe denominato "PrintGoogleDoc" che accetta come unico argomento l'identificatore del documento desiderato;
- se l'identificatore è realmente associato ad un documento presente nel server di Google, allora viene visualizzato per intero il contenuto di quest'ultimo.
La stessa classe potrà essere utilizzata, per esempio, per visualizzare più documenti i cui identificatori sono contenuti in un array o in un database, attraverso un semplice ciclo.
Snippet 10: leggere i feed RSS di un utente su Twitter
Questo articolo dedicato all'interazione tra PHP e servizi Web 2.0 è iniziato descrivendo uno snippet dedicato alla visualizzazione della Timeline di Twitter e si conclude con un articolo che tratta ancora della nota piattaforma per il microblogging, questa volta però verrà proposta una piccola applicazione i grado di leggere i feed RSS di un specifico utente.
Per la creazione dello script verranno utilizzate la librerie Magpierss che forniscono un'interfaccia per il parsing (apertura e lettura) dei feed RSS; di seguito verrà proposto il codice dello snippet:
<?php
// inclusione del file di funzione
@require_once("classi/magpierss/rss_fetch.inc");
// username dell'utente
$nome_utente = "user_name";
// percorso assoluto al feed RSS dell'account
$posts = fetch_rss("http://twitter.com/statuses/user_timeline/".$nome_utente.".rss");
// ciclo di estrazione dei dati
foreach ( $posts->items as $post ){
// testo del Tweet
$tweet = " ".substr(strstr($post['description'],': '), 2, strlen($post['description']))." ";
// URL del singolo Tweet
$collegamento = $post['link'];
// costruzione del link contenuto nel Tweet
$x = "x" . $tweet;
$pos = strpos( $x, "http://" );
// se nel Tweet vi sono uno o più link verranno intercettati..
if ( $pos > 0 ){
$link = substr ( $x, $pos, strlen($x) );
$link = substr ( $link, 0, strpos( $link, " " ));
// .. e stampati
$collegamento_completo = "<a href="$link">$link</a>";
$x = str_replace ( $link, $collegamento_completo, $x );
$x = substr ( $x, 1, strlen($x));
// collegamento al Tweet
echo $x . "<a href="".$collegamento."">#</a>";
}else{
echo "<br />" . $tweet . "<a href="".$collegamento."">#</a><br />rn";
}
// data di pubblicazione dei Tweets
$data = substr( $post['pubdate'], 0, strlen($post['pubdate'])-6);
echo " " . $data . "<br /><br />rn";
}
?>
Da notare come l'applicazione sia in grado di intercettare sia i link presenti all'interno del testo del Tweet (anche se questi sono più di uno), sia i link verso gli stessi post, essi verranno trasformati in altrettanti collegamenti cliccabili alle relative risorse.
Conclusioni
In questo articolo sono stati proposti 10 snippet (frammenti di codice) per l'interazione tra applicazioni realizzate in PHP e alcuni dei più noti servizi online scelti tra web application, social network, social bookmark, servizi si geolocalizzazione, piattaforme di video streaming etc.
Quando è stato possibile, per la realizzazione degli snippet sono state utilizzate delle classi già pronte tutte rilasciate sotto licenza Open Source e quindi scaricabili e utilizzabili liberamente.