Ore 14 abbondanti riesco a strapparmi dall'ufficio per andare a mangiare qualcosa. A casa, rigorosamente a casa.
Si, faccio parte di quella classe di privilegiati, a mio avviso, che lavorano in provincia, abitano a cinque minuti dal proprio domicilio e possono tornare a casa un'ora e pranzare con calma.
Stacchi la spina un'ora, ti allontani dal brusio dell'ufficio, dalla convulsione delle telefonate, dalle email che ti guardano frettolose attraverso i cristalli liquidi.
Non male vero?
Chiaramente alle 14 abbondanti mangio da solo, anche a casa. Ma non mi dispiace per nulla.
Oggi mi servo, mi siedo, accendo la tele, breve zapping e... i campionati europei di pattinaggio artistico! Nella mie mente l'esclamazione se n'é uscita tutta in maiuscolo: adoro il pattinaggio, la grazia e la destrezza che esprime, il controllo di potenza, fluidità ed equilibrio.
Ogni volta é come assistere ad un miracolo.
La perfetta pausa pranzo.
Avevamo bisogno di applicare i tag anche alle pagine? Ultimate Tag Warrior per quanto sia un plugin eccellente assegnava i tag solo ai post.
Christine deve aver sentito il nostro urlo disperato fino in Nuova Zelanda, perché la nuova versione di UTW implementa i tag nelle pages di Wordpress!
function UTW_GetTagsForCurrentPost() {
global $utw, $post;
$myTags = $utw->GetTagsForPost($post->ID);
$r = array ();
$i = 0;
foreach ($myTags as $myTag) {
$r[$i] = $myTag->tag;
$i++;
}
return $r;
}
UTW_GetTagsForCurrentPost() ha il semplicissimo compito di estrarre l'array di tags che abbiamo assegnato ad un post.
Fatto questo modifichiamo i nostri template. L'idea é che nel loop di Wordpress, vicino a post e tag, vengano estratte le immagini contestuali tratte da Flickr attraverso il plugin flickrRSS. Ecco l'esempio di codice.
<?php
if(count(UTW_GetTagsForCurrentPost()) > 0) {
$myTags = implode(",", UTW_GetTagsForCurrentPost());
get_flickrrss(6, "user", $myTags, "square", "", "", "IL_VOSTRO_ID_FLICKR");
get_flickrrss(6, "public", $myTags, "square", "", "", "");
}
?>
Il funzionamento anche in questo caso é semplice:
Per poter accedere alla API di YouTube é necessario ottenere un Developer ID e la documentazione é abbastanza completa, anche se mi aspettavo qualche metodo in più. Le metodologie di accesso sono due: REST e XML-RPC.
Obiettivo del post é fare una panoramica di come implementare una classe Java che, dati DEV_ID e una lista di VIDEO_ID, acceda alle API di YouTube, ne scarichi i dettagli, provveda a costruire una cache su filesystem. Non entrerò in dettagli che uno sviluppatore Java conosce sicuramente meglio di me.
Metologie di caching:
REST Interface
Interfaccia estremamente semplice si basa su una chiamata http che come risultato restituisce un file xml. Un esempio.
http://www.youtube.com/api2_rest?
method=youtube.videos.get_details&dev_id=YOUR_DEV_ID
&video_id=YOUR_VIDEO_ID
dove:
La nostra classe:
Per effettuare una chiamata http é necessaria una libreria che implementi un client http, va benissimo l'HttpClient del progetto Jakarta Commons. La chiamata può essere fatta in GET o in POST: in questo senso la documentazione di YouTube non dice nulla (l'esempio sopra simula una GET) ma penso che l'API accetti entrambi i metodi (preferibile il POST).
Il codice (plausibilmente un metodo privato della classe) dovrà essere strutturato più o meno così:
HttpClient client = new HttpClient();
PostMethod method = new PostMethod("http://www.youtube.com/api2_rest");
method.addParameter("method", "youtube.videos.get_details");
method.addParameter("dev_id", YOUR_DEV_ID);
method.addParameter("video_id", YOUR_VIDEO_ID);
try {
// eseguo la chiamata
int statusCode = client.executeMethod(method);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + method.getStatusLine());
}
// leggo la risposta
byte[] responseBody = method.getResponseBody();
// utilizzo la response.
// Attenzione: assicurarsi che l'encoding sia corretto ne non siano dati binari
String myXML = new String(responseBody));
} catch (HttpException e) {
... // gestione dell'eccezione
} catch (IOException e) {
... // gestione dell'eccezione
} finally {
// chiudo la connessione.
method.releaseConnection();
}
Le possibilità di ottimizzazione sono svariate, come per esempio creare un unico client e sfruttare un'unica connessione per evitare overhead inutili: a voi la scelta. La response che si otterrà sarà simile a questa.
Per elaborare l'xml e trasformarlo in un più comodo oggetto, possiamo utilizzare uno dei moltissimi parser a disposizione della piattaforma Java. La scelta in questo caso é più orientata su considerazioni di gusto (riguardo l'API del parser), di leggerezza del parser e della sua velocità di elaboarzione.
Per un utilizzo leggero e snello consiglio di utilizzare un pull-parser anche senza feature di validazione (che in questo caso servono a poco e non avremmo comunque il DTD su cui lavorare). Un elenco veloce di alcuni:
Alla prossima puntata farò una panoramica su come può funzionare l'approccio via interfaccia XML-RPC.
Ieri la mia commercialista mi ha notificato l'avvenuta apertura della mia partita iva personale. E' stata una piccola emozione.
Il motivo é una nuova avventura lavorativa, che si svolgerà parallelamente a quanto già faccio ora: un nuovo traguardo e punto di partenza professionale.