15 Anni di programmazione

Aneddoti e Codici di un inguaribile ottimista

agosto 2011 - Post

Partecipando alle riunioni dei soci di DOT NET Campania ho capito quanto fosse necessario cominciare a studiare un po’ di Javascript in prospettiva di lavorare su HTML 5. La prima esigenza  che ho avvertito è stata quella di collegare la pagina a una fonte dati. Ho quindi creato una pagina HTML contenente una mappa di Google e dei marker posizionati in punti estratti mediante un servizio OData.

Il servizio OData è disponibile al seguente indirizzo ed offre informazioni su una serie di concerti tenuti dagli U2 negli anni 80 in Irlanda. Un esempio di concerto (denotato dal tag <entry>) è il seguente:

 

CropperCapture[31]

 

Per consumare il servizio in una pagina HTML tramite Javascript ho utilizzato una fantastica libreria chiamata datajs, pubblicata su Codeplex al seguente indirizzo.


CropperCapture[32]

 

Il body della pagina si limita ad associare all’evento onload la funzione initialize:

<body onload="initialize()">
  <div id="map_canvas"></div>
</body>
</html>

 

CropperCapture[33]

 

La funzione initialize crea la mappa Google e poi tramite la libreria datajs legge il servizio Odata tramite la function (data). In essa eseguiamo un loop sui risultati della query: ad ogni concerto associamo un marker sulla mappa Google invocando la funzione addMarker.

CropperCapture[34]

Il risultato è il seguente:

CropperCapture[35]

 

Allego il codice sorgente della pagina HTML e la libreria Javascript necessaria al collegamento.

Gli Smartphone più comuni consentono di associare ad ogni foto le coordinate geografiche del punto in cui è stato eseguito lo scatto. Verifichiamolo salvando una foto su un computer e andando a visualizzare le proprietà del file corrispondente.

clip_image001

clip_image002

Quando carichiamo la foto su Flickr, l’interfaccia web ci chiede se vogliamo utilizzare o meno queste coordinate

clip_image003

clip_image005

clip_image006

Flickr mette a disposizione degli sviluppatori di software un insieme di API per l’accesso agli oltre 5 miliardi di foto presenti sul sito. Quasi quasi tutte le funzionalità eseguibili dal portale di Flickr sono disponibili tramite le API. L’utilizzo è gratuito per applicazioni non commerciali. Per iniziare occorre richiedere una chiave per l’accesso alle API al seguente indirizzo:

In particolare, Flickr offre al seguente indirizzo un servizio di reverse geocoding che partendo dalle coordinate geografiche date in ingresso cerca di estrarre informazioni sulla località cercata.

clip_image008

clip_image009

Il risultato della query è disponibile in vari formati (in figura è mostrato l’xml rest). Analizzando l’output si scopre che il tag place ha una proprietà associata chiamata woeid. Tempo fa, ho scritto un post sul tentativo da parte di Yahoo di mettere a disposizione dei suoi utenti un database geografico chiamato GeoPlanet. Il progetto è nato con l’ambizioso scopo di gestire TUTTE le località “permanenti” e dotate di nome sul pianeta Terra. Vi rimando al mio post per scoprire altri dettagli sul progetto. In rete si trova un GeoPlanet Explorer che consente di visualizzare tutte le informazioni associate a un woeid.

clip_image011

clip_image013

clip_image015

Quello che ci interessa di più è che le API di Flickr sono collegate a quelle di Yahoo e ciò apre orizzonti del tutto nuovi.

Sul portale Codeplex troviamo l’ultimo ingrediente necessario:  la libreria FlickrNET. Si tratta di una libreria .Net scritta interamente in C# per semplificare l’accesso alle API Flickr. Esistono librerie dll anche per versioni di Silverlight superiori alla 3.0,per Windows Phone e per Monotouch su Iphone.

La prima cosa da fare è creare un’istanza dell’oggetto Flickr:

clip_image016

Come passo successivo eseguiamo una ricerca nell’insieme di foto messe a disposizione di un particolare utente. Un utente di Flickr è identificato univocamente da uno User ID (nel mio caso è 35077877@N00). La libreria offre una classe chiamata PhotoSearchOptions per gestire i criteri di ricerca. Anzitutto creiamo una istanza della classe specificando nel costruttore lo User ID. Chiediamo poi alla libreria di aggiungere alle foto le informazioni geografiche (non disponibili per default).

clip_image017

Estraiamo quindi la collezione di foto associate ai nostri criteri di ricerca:

clip_image018

Possiamo scorrere quindi la lista delle nostro foto (nel mio caso 44)

clip_image019

Ogni oggetto Photo è caratterizzato da un PhotoId univoco. Estraiamo le informazioni associate a un particolare ID:

clip_image020

clip_image021

Il codice ci restituisce il WOEID associato alla foto. Supponiamo ora di voler cercare tutte le foto presenti su Flickr scattate in una particolare area definita da un particolare WOEID. Dobbiamo modificare i criteri di ricerca nella maniera seguente: non specifichiamo più lo UserID ma solo il WoeID della zona a cui siamo interessati.

clip_image022

Nel mio caso particolare la ricerca restituisce ben 158 risultati. Ecco uno snippet di quanto viene visualizzato nella griglia.

clip_image024

Possiamo anche ricercare le foto per Tag:

clip_image025

Per accedere a Flickr da un’applicazione per Windows Phone, bisogna anzitutto accedere alla libreria Flickr.NET specifica per WP7. Il codice di una ricerca è leggermente diverso per tenere conto della chiamata asincrona alle API di Flickr.

clip_image026

La funzione DoSomething agisce sui controlli dell’interfaccia utente.

clip_image027

Il risultato è il seguente (scusate al solito la bruttezza dell’interfaccia!)

clip_image028

Conoscendo il WOEID associato alla foto è possibile invocare tutti i web service offerti da Yahoo. Ecco ad esempio uno snippet di codice che estrae le condizioni del tempo e la temperatura (l’indirizzo del servizio web è il seguente: http://xml.weather.yahoo.com/forecast). Come vedrete siamo nella giornata più calda dell’anno!

clip_image030

clip_image031