Benvenuti alla prima puntata della serie “Bending the Web“.
Bending the web – issue #1
L’idea di base di questi post è sperimentare nuovi modi di sfruttare le diverse risorse disponibili in rete per i propri (sordidi) scopi.
Possiamo pensare alla rete come un grande sistema operativo, in cui le URL sono chiamate di funzione, e i formati JSON, RSS e XML garantiscono l’interoperabilità tra applicativi.
A nostra disposizione abbiamo una serie in continuo aumento di API che vengono rilasciate dai diversi siti, servizi di hosting gratuito, servizi di condivisione e conversione files, servizi di editing on line, etc.
Le regole del gioco sono semplici
- si possono utilizzare solo risorse gratuite in rete (blogs, servizi online, social networks)
- il tutto deve poter essere ripetuto da qualsiasi utente
- si deve colmare un vuoto, cioè fare qualche cosa che al momento non sia possibile fare con le funzionalità base già offerte dai vari servizi web.
Oggi vi propongo un workaround a un doloroso problema, che chi usa massicciamente google reader avrà sicuramente sperimentato: al momento GReader non permette di ricercare tra gli elementi starred limitatamente a una categoria. Nel mio caso mi interessava poter ricercare solo tra gli elementi starred della categoria tv, per poter ritrovare i film che mi ero ripromesso di ehm, visionare.
L’ unica soluzione che sono riuscito a trovare è
- rendere pubblico il feed della categoria tv e quello degli elementi starred,
- calcolare un feed contenente l’intersezione dei due feed precedenti
- abbonarmi a quel feed che ho chiamato starredTvItems
A quel punto posso fare la mia ricerca sul feed starredTvItems e finalmente riuscire a ritrovare quel film che avevo marcato con la stellina perchè dovevo assolutamente vederlo.
Vediamo nel dettaglio come fare:
1 – rendere pubblico il feed della categoria tv e quello degli elementi starred:
Presumo tutti sappiano come rendere pubblico un feed di google reader.
In ogni caso: si va in settings -> folders and tags .
A quel punto per ciascun folder/tag che vogliamo rendere pubblico clicchiamo sull’iconcina del feed che da grigia diventa arancione arancione.

Comparirà nella stessa riga un link alla pagina ‘pubblica’ di quel feed. Se apro la pagina pubblica mi trovo una pagina creata automaticamente dallo zio google che contiene i nostri elementi condivisi e un link al feed. Sarà quel link che mi servirà nello step successivo.

2 – calcolare un nuovo feed contenente l’intersezione di due feed preesistenti:
Questa è la parte piu’ interessante. Ovviamente potermmo scrivere uno script in php e piazzarlo da qualche parte. Ma è piu’ interessante provare a farlo con meccanismi automatici disponibili in rete. E qui entra in gioco Yahoo Pipes.
Pipes è un sistema offerto gratuitamente da Yahoo per maneggiare (aggregare, modificare, pubblicare) contenuti web, feed, etc in maniera visuale. Lo trovo molto interessante perchè utilizza un approccio visuale alla programmazione, ossia permette di creare un progamma non scrivendo codice ma manipolando degli elementi grafici e ricollegandoli tra loro. E’ un sistema molto utilizzato in ambienti di sviluppo multimediale come max/msp e vvvv.
Una volta entrati in yahoo pipes se clicco su create new pipe mi si apre una specie di canvas in cui posso collocare diversi elementi logici trascinandoli dalla barra di sinistra.

I primi due elementi di cui ho bisogno sono quelli che leggeranno i contenuti dei miei due feed. Quindi trascino due blocchi del tipo Fetch Feed e come parametro ci incollo le url dei due feed, quelli degli items starred e quello degli items della categoria che mi interessa.
A questo punto se io avessi un elemento di pipes che calcola l’intersezione tra due feed la cosa sarebbe immediata. Purtroppo non c’e’. Allora siamo costretti a inventarci un altro sistema. Per prima cosa calcolo l’unione dei due feed, ossia un unico feed che contiene la somma degli elementi di entrambi. La patch necessaria la trovo nella sezione Operators. Connetto i punti di entrata della patch Union con quelli di uscita dei due elementi Fetch Feed.
Come posso verificare cliccando sul box union (L’editor di YPipes mi mostra l’output subito sotto) ora pero’ i risultati non sono piu’ ordinati, quindi li devo riordinare per data. Per fare questo aggiungo una patch Sort (che trovo sempre nella sezione operators). Notate che quando collego la patch YPipes popola la tendina della patch con tutti i campi del feed su cui è possibile fare il sorting.
Io ordinerò per item.pubDate e item.Title
Ora aggiungo una patch che si chianma Unique e che ( chi l’avrebbe detto) presenta ciascun elemento presente nel feed una e una sola volta, rimuovendo quindi i duplicati. La cosa interessante è che la patch Unique aggiunge anche un attributo agli elementi del feed che indica quanti doppioni erano stati trovati prima di applicare il filtro di unicità. L’attributo si chiama proprio item.y:repeatcount .
Ora finalmente posso selezionare solo gli elementi che hanno item.y:repeatcount > 1 . Lo faccio collegando una ultima patch di tipo Filter (sempre nella sezione Operators). Collego poi l’output di quest’ultima patch al pipe output, quindi all’output generale del programma. Ecco l’intero programma:
Rimane solo da salvare il pipe (ce’ un pulsante save in alto a dx) . Veniamo riportati alla pagina descrittiva del pipe e possiamo prendere il link Get as RSS e aggiungerlo al nostro reader. Ci comparirà una nuova entry nella colonna di sinistra del GReader contenente, finalmente, tutti gli items starred della categoria che avevamo scelto.
Sperando che il giochetto vi sia stato utile vi invito a comunicarmi i nuovi pazzi pazzi tubi che costruirete giocando con pipes e vi aspetto per la prossima strabiliante puntata di Bending The Web.




