[questo post si compone di diversi pezzi +o- tecnici, prendete pure solo ciò che vi serve :D ]

Oggi vi parlo anche di 2 servizi completamente differenti e di come li ho dovuti/voluti correlare.

Nokia Sports Tracker

Nokia sports tracker è un servizio offerto da nokia che raccoglie i propri dati da un software, disponibile per un certo numero di cellulari nokia, in grado di tracciare la propria attività fisica. Il programma, una volta installato e attivato, utilizza diversi elementi del telefono in uso per raccogliere i dati di cui ha bisogno: ricevitore GPS per la localizzazione, accelerometri per il contapassi, media player e le foto scattate durante l'attività per abbellire il tutto (vedo anche un heart rate sul sito ma non so come venga rilevato, il mio telefono non ha nulla per farlo e quindi non lo fa).
I dati così raccolti possono essere uploadati sul servizio con un paio di click e concorrono a creare una tabella di allenamento come la mia. Cliccando sul singolo "workout" è possibile visionare i dettagli dello specifico allenamento comprendenti la mappa del percorso effettuato, dove e quali canzoni sono state ascoltate durante l'allenamento, tempi, velocità medie...
Potete scaricare il software Sports Tracker direttamente dal sito della nokia.
E' possibile associare il profilo d'allenamento al proprio profilo OVI se se ne possiede uno.
[PLUS: nell'home page è possibile visualizzare chi si allena vicino a voi: a qualcuno potrebbe interessare]

Sfortunatamente ad oggi Nokia Sports Tracker non fornisce un feed con l'elenco dei propri allenamenti. Ecco dove entra in gioco yahoo pipes.


Yahoo pipes è una piattaforma che permette di "rimontare il web". Pipes mette a disposizione diversi oggettini (black boxes) ognuno (non proprio ognuno) atto a ricevere un ingresso e a fornire un'uscita.
Tra le entrate è possibile utilizzare risorse presenti sul web, siano esse semplici pagine html, feed RSS, JSON: insomma, qualsiasi cosa raggiungibile col vostro browser è utilizzabile anche come ingresso per yahoo pipes.
Montando insieme i pezzettini è possibile ottenere come uscita finale un feed disponibile sia sotto forma di RSS che sotto forma JSON.
E' vero che per montare una pipe non c'è bisogno di scrivere neanche una riga di codice (al max qualche semplice regular expression) ma sinceramente non mi sembra sia possibile per chiunque costruirsi la propria pipe senza un minimo di nozioni da programmatori; ma potrei sbagliarmi. Secondo yahoo bastano pochi minuti per imparare.
E' vero invece che ognuno può riutilizzare le pipe altrui.



Io non so farvi una serie di esempi dell'utilità di yahoo pipes, ma posso dirvi a cosa è servito a me.

Nokia Sports Tracker Feed grazie a Yahoo Pipes
Se avete aperto il link qui sopra in questo momento state guardando il feed dei miei allenamenti su sportstracker. Sostituendo lo "Sports Tracker User ID" è possibile visualizzare il feed di qualsiasi utente di sports tracker.

Qui entriamo un po' nel tecnico, salta pure a piè pari alla prossima sezione ;)

La pipe che ho costruito si compone di alcuni pezzettini che ora vi elencherò. Potete vedere la pipe nella sua nudità (previo login tramite account yahoo) cliccando sul tasto view source presente nella pagina della pipe.


  1. Il primo pezzetto è un Text Input (categoria User Inputs). Non prende ingresso proprio perchè l'ingresso è fornito dall'utente che utilizza la pipe. Nel nostro caso servirà ad ottenere l'user id dell'utente di cui vogliamo vedere il feed
  2. L'uscita del pezzo precedente finisce dentro un componente Url Builder (categoria Url) e fornisce in uscita un URL composto da alcuni pezzi configurati + l'ingresso di cui prima. Nel nostro caso l'url utilizzato è l'url di una chiamata ajax interna al sito sports tracker [si, c'è voluto un minimo-minimo di reverse engineering per ottenere questo url]
  3. Il terzo pezzo è un Fetch data (categoria Sources): riceve in ingresso l'url generato dal pezzo precedente e fornisce in uscita una rappresentazione a oggetti di ciò che ha letto da tale url. Nel nostro caso si tratta di un array di elementi di cui ogni elemento contiene i dettagli di un allenamento. Ogni elemento della lista sarà riferito come item, ogni elemento di un allenamento come item.campo (ad esempio la distanza percorsa sarà item.distance)
  4. Il feed che vogliamo in uscità sarà un feed RSS. Per rispettarne alla meno-meglio lo standard ogni item dovrà contentere i campi link, title, description e pubDate. Per i primi due utilizziamo il componente rename (categoria operators) che permette di rinominare o copiare i campi di ogni item. Copiamo così il campo id come campo link, e il campo startUTC come campo title e come campo pub. Questa è una lavorazione intermedia: proseguiamo.
  5. Il prossimo pezzetto è il pezzo RegExp (sempre da operators) che permette di applicare delle sostituzioni tramite regular expression ai valori dei campi di ogni item. Con questo trasformeremo il valore di link (che in questo momento contiene solo l'id dell'allenamento) nel suo indirizzo intero (aggiungendovi davanti http://sportstracker.nokia.com/nts/workoutdetail/index.do?id=), trasformeremo il titolo che in questo momento contiene solo data e ora dell'allenamento in "workout of data/ora" e trasformeremo pub (anche lui contente data e ora) invertendo anno e giorno e sostituendo i punti con degli slash / (ci servirà dopo in questa forma)
  6. Questo pezzetto è un loop (da operators) con un simple math (da number) innestato. Con questo pezzo trasformeremo il campo distanza da metri a km dividendone il contenuto per 1000
  7. Un altro loop ci aspetta questa volta con uno string builder (da string) innestato. Questo string builder ci aiuterà a costruire il campo description montando assieme distanza (item.distance) e tempo di percorrenza (item.duration)
  8. Un terzo e ultimo loop ci aiuterà a comporre pubDate. Questo è il campo più intricato di tutti poichè deve avere una certa forma ed è gestito in maniera "particolare" da yahoo. Infatti il campo che andremo a comporre non sarà pubDate ma bensì y:published. Penserà poi yahoo pipes a creare il campo pubDate nel feed finale. Per comporre y:published basterà usare un date builder (da date) e dargli in pasto il campo pub precedentemente preparato.
  9. l'ultimo pezzo è il Pipe Output che invia il risultato delle precedenti modifiche al mondo esterno.
NOTA: sfortunatamente l'orario che finisce nel titolo è nel fuso orario UTC (circa GMT) e con le mie conoscenze attuali di yahoo pipes non saprei come farlo cambiare in base all'ora solare/legale (oggi noi siamo GMT+2, il mese scorso eravamo GMT+1) per cui l'ho lasciato UTC piuttosto che portarlo a GMT+1. Il problema non si pone per il campo pubDate poichè quella data/ora riporta anche il proprio fuso orario di riferimento per cui può essere adattata in base all'osservatore.



Il tuo feed Sports Tracker
Se volete riutilizzare la pipe, ad esempio per importare il vostro feed di allenamenti su friendfeed come ho fatto io, prendete questo indirizzo
http://pipes.yahoo.com/pipes/pipe.run?SportsTrackerUID=252757&_id=656b4f700c19f5eb398c35308a9177ac&_render=rss
e sostituite 252757 con il vostro nokia sports tracker user id. Ottenere il proprio user id non è immediato; dovete recarvi sulla pagina del vostro profio sul sito sports tracker e visualizzarne il sorgente [solitamente, qualsiasi browser stiate usando, tasto dx,  "View Page Source" oppure "View HTML" oppure qualcosa di simile insomma]. Verso la fine della pagina troverete un pezzo simile a questo:

 

potrete quindi facilmente distinguere il vostro user id. [Se qualcuno conosce un metodo più pulito m'avvisi!!]