YQL, Yahoo! Query Language

Da sempre ho sostenuto che Yahoo! è una delle realtà più attive per quanto rigarda la creazione di tool potenti e di facile impiego per la presentazione e manipolazione delle informazioni null’universo di Internet. Basta pensare a Yahoo! Pipes, BOSS, le API del suo motore di ricerca e diverse altre cose.

A Londra ho conosciuto YQL, Yahoo! Query Language, uno strumento le cui potenzialità mi hanno davvero strabiliato! YQL, infatti, permette di interrogare un insieme di dati con una sintassi molto simile all’SQL (per i dotnettari, praticamente e’ come usare LINQ). Il bello e’ che gia’ pronti per queste ricerche ci sono una marea di fonti: Flickr, Upcoming, Yahoo! Messenger, Google, Facebook, Twitter, Friendfeed, Lastfm, WordPress e molte, molte altre.

Per usare YQL basta una semplice query REST in GET e i risultati possono essere ritornati sia in JSON che in XML. Ad esempio, per conoscere il mio ultimo status su Twitter, va usata una query con questa sintassi:

select * from twitter.user.status where id='rainbowbreeze'

che tradotta in una richiesta REST con output XML, torna questi dati qui. Assolutamente fantastico, basta una veloce botta di parsing e si ottengono in un attimo le informazioni ricercate.

Come e’ facile notare, non sono passato per le API di Twitter, e questo significa aver risparmiato un bel po’ di codice. Certo, non ho tutte le stesse funzionalità esposte dalle API, ma davvero ne ho sempre ed in ogni caso bisogno? Tempi di sviluppo tremendamente abbassati, con indubbi vantaggi per il porting multipiattaforma dei programmi per mobile.

Il bello e’ che moltissimi dei dati presenti sono georeferenziati, quindi per trovare una foto su flickr della mia citta o zone limitrofe, basta scrivere una cosa del genere:

select * from flickr.photos.info where photo_id in
  (select id from flickr.photos.search where place_id in
    (select place_id from flickr.places.info where woe_id in
      (select woeid from geo.places.neighbors where neighbor_woeid in
        (select woeid from flickr.places where query="Civitanova marche, Italy"))))
limit 20

select woeid from flickr.places where query=”Civitanova marche, Italy”: agganciandosi al servizio PlaceMake, che permette definire in maniera univoca ogni luogo geografico al di la’ del suo nome, si ricava il woeid della mia citta’.

select woeid from geo.places.neighbors where neighbor_woeid in (…): si ricavano altri woeid limitrofi alla mia citta’.

select * from flickr.photos.info where photo_id in (select id from flickr.photos.search where place_id in (select place_id from flickr.places.info where woe_id in(…) limit 20: si richiedono tutte le info delle foto di flickr che sono state scattate nei luoghi dei woeid ricavati.

Semplice anche ricavare la query per avere gli eventi a Roma:

select * from upcoming.events where woeid in
  (select woeid from geo.places.neighbors where neighbor_woeid in
    (select woeid from geo.places where query="Roma, Italy"))
limit 20

Ecco una presentazione di Ricardo su YQL e mobile, con degli esempi davvero sfiziosi

E come se non bastasse, le fonti dati di YQL possono essere estese a piacere. Oltre a quelle supportate attualmente e a quelle che verranno aggiunte da Yahoo! in futuro, grazie ad Open Data Table, e’ possibile far girare YQL su una qualunque fonte dati personalizzata, che altro non e’ che un file XML. Un database con le farmacie di turno, quello con i voli aerei, quello con il report delle proprie attivita’ estrapolate dal gestionale di turno ecc ecc ecc. Un po’ di scraping, qualche parser, e i possibili orizzonti diventano davvero infiniti!

Grande Yahoo!

11 Comments

  1. è da un po’ che penso di dare un’occhiata da vicino a YQL. Quasi quasi …
    se ne viene un articolo, ti cito nei credits ;-)

  2. Ma lo sai che ti stavo proprio per mandare una mail suggerendotelo come futuro argomento da tenere in considerazioni per le tue “esplorazioni”?

    Qualcosa tipo “a te che ormai hai fatto delle api il tuo pane quotidiano, stavolta hai una possibilita’ per fare le stesse cose, ma diversamente…”

    Telepatia :D

  3. OK, mi hai convinto. ho riletto con più attenzione il tuo post e ho deciso che costituirà:
    1) il tema del mio prossimo articolo
    2) il mio passatempo per i prossimi 2 mesi
    3) uno degli argomenti di discussione di sabato prossimo
    :-)

  4. Onorato di essere stato la tua musa ispiratrice…
    x sabato, e’ meglio che ci portiamo dietro diversi litri di acqua, mi sa che serviranno per non farci asciugare le tonsille, prevedo fitti scambi informativi/innovativi all’orizzonte ;)

  5. ciao sto cercando dappetutto una tabella con tutti i WOEID di yahoo weather ma nn la trovo da nessuna parte :(
    potresti suggerirmi il modo di averla?

  6. scs il doppio post ma volevo aggiungere che ho provato anche con YQL ma chiaramente x nn appesantire il server controllano la restrizione della query a un solo dato >.<
    ho fatto persino un programma che vada a interrogare il database geo.places x ogni indirizzo ma nn è fattibile: funziona si ma ho fatto dannare i tecnici yahoo che hanno subito modificato la pagina x impedirmi di fare il parsing e continuare a interrogarli. riesco ancora ma farei molto prima a trovare la tabella completa :( inoltre nn voglio fare hackerate… il mio programma se lasciato girare pianterebbe il server e nn ne ho nessuna intensione :(

  7. indisputably, teacher has lots of very good quality choices for a comparatively less expensive amount.

Leave a Reply