Passa ai contenuti principali

Microsoft Band SDK – Web Tile : REST

In questo post, ultimo di questa mini serie dedicata alle Web Tile, vedremo come sia possibile realizzare una tile che visualizza dei dati presi da un servizio REST.
Il servizio che utilizzeremo è un semplicissimo servizio REST, hostato su Azure, che permette di eseguire il ping verso un indirizzo web.
Il servizio risponde all’url

http://webtileapi.azurewebsites.net/api/Ping?urlToPing=<url da verificare>

e lo fa con un JSON del tipo

{
  "UrlPinged": "<url da verificare>",
  "Result": 0,
  "ResultString": "Ok",
  "PingDurationInMilliseconds": 100,
  "PingDateTime": "2015-07-27T18:02:57.1500904Z"
}

in cui troviamo il risultato del ping (OK o ERROR), il tempo di attesa e il timestamp di esecuzione dell’operazione.
Quello che vogliamo fare è creare una Web Tile in grado di mostrare le statistiche per due siti e i dettagli per ogni sito, quindi un totale di 3 pagine.
In questo caso, tralasciando la parte del file manifest.json relativa ai metadati, i punti cruciali del file stesso sono la definizione delle risorse (con le relative variabili da utilizzare) e la definizione delle pagine.
Partiamo con la definizione delle risorse:

"resources": [
    {
      "url": "http://webtileapi.azurewebsites.net/api/Ping?urlToPing=http://www.dotnetpodcast.com",
      "style": "Simple",
      "content": {
        "DNPpingdatetime": "PingDateTime",
        "DNPresultstring": "ResultString"
      }
    },
    {
      "url": "http://webtileapi.azurewebsites.net/api/Ping?urlToPing=http://www.domusdotnet.org",
      "style": "Simple",
      "content": {
        "DDNpingdatetime": "PingDateTime",
        "DDNresultstring": "ResultString"
      }
    }
  ]

Il tipo di entrambe le risorse è “Simple”, il che comunica all’infrastruttura delle Web Tile (gestita dall’app mobile Microsoft Health), che si avrà a che fare con una risposta composta da una struttura JSON e non da una collezione di item, come avviene nel caso del tipo “Feed”.
Nella parte di content definiamo i dati che ci interessa mostrare e, in particolare, XXXpingdatetime e XXXresultstring che conterranno i valori delle proprietà PingDateTime e ResultString della struttura JSON restituita del servizio.
Le due chiamate ai servizi verranno eseguite nell’ordine impostato.
Nella definizione delle pagine troviamo:

"pages": [
    {
      "layout": "MSBand_MetricsWithIcons",
      "condition": "true",
      "iconBindings": [
        {
          "elementId": "11",
          "conditions": [
            {
              "condition": "true",
              "icon": "dotnetpodcasticon"
            }
          ]
        },
        {
          "elementId": "21",
          "conditions": [
            {
              "condition": "true",
              "icon": "domusdotneticon"
            }
          ]
        }
      ],
      "textBindings": [
        {
          "elementId": "12",
          "value": "dotNETpodcast {{DNPresultstring}}"
        },
        {
          "elementId": "22",
          "value": "DomusDotNet {{DDNresultstring}}"
        }
      ]
    },
    {
      "layout": "MSBand_NoScrollingText",
      "condition": "true",
      "textBindings": [
        {
          "elementId": "1",
          "value": "dotNET{podcast}"
        },
        {
          "elementId": "2",
          "value": "{{DNPresultstring}}"
        },
        {
          "elementId": "3",
          "value": "{{DNPpingdatetime}}"
        }
      ]
    },
    {
      "layout": "MSBand_NoScrollingText",
      "condition": "true",
      "textBindings": [
        {
          "elementId": "1",
          "value": "DomusDotNet"
        },
        {
          "elementId": "2",
          "value": "{{DDNresultstring}}"
        },
        {
          "elementId": "3",
          "value": "{{DDNpingdatetime}}"
        }
      ]
    }
  ]

Abbiamo, quindi, tre pagine.
Il layout della prima di queste è di tipo MSBand_MetricsWithIcons:

SNAGHTMLab8921b

che mostrerà il riepilogo dell’ultima invocazione:

image

Nel JSON che definisce il binding degli elementi visuali della pagina possiamo osservare la sezione iconBindings all’interno della quale assegniamo delle icone agli elementi visuali in grado di contenerle.
Le icone in questione sono contenute nella cartella icons del package e definite nella sezione JSON icons:

"icons": {
  "dotnetpodcasticon": "icons/dotnetpodcast.png",
  "domusdotneticon": "icons/domusdotnet.png"
},

Nella parte del binding degli elementi visuali che contengono il testo, invece, assegniamo delle scritte a cui concateniamo uno dei valori prelevati dal servizio.
Le altre due pagine sono uguali tra loro e usano il layout MSBand_NoScrollingText:

SNAGHTMLab98ecb

Le tre righe sono messe in binding, rispettivamente, con una stringa costante (il nome del sito) e con i due valori ottenuti dal servizio, ottenendo, ad esempio:

image

In questo modo, ogni volta che Microsoft Health aggiornerà la Web Tile (l’intervallo in minuti è contenuto nella proprietà refreshIntervalMinutes, come visto nei precedenti post), verrà invocato due volte il servizio ed effettuato il binding dei dati sulle pagine.
Le pagine così create non hanno, al momento, interazione con l’utente.
Il file manifest completo è il seguente:

{
  "manifestVersion": 1,
  "name": "PingBand",
  "description": "Tieni sotto controllo i tuoi siti con PingBand",
  "version": 1,
  "versionString": "1.0",
  "author": "Massimo Bonanni",
  "contactEmail": "massimo.bonanni@tiscali.it",
  "tileIcon": {
    "46": "icons/largeicon.png"
  },
  "badgeIcon": {
    "24": "icons/smallIcon.png"
  },
  "icons": {
    "dotnetpodcasticon": "icons/dotnetpodcast.png",
    "domusdotneticon": "icons/domusdotnet.png"
  },
  "refreshIntervalMinutes": 15,
  "resources": [
    {
      "url": "http://webtileapi.azurewebsites.net/api/Ping?urlToPing=http://www.dotnetpodcast.com",
      "style": "Simple",
      "content": {
        "DNPpingdatetime": "PingDateTime",
        "DNPresultstring": "ResultString"
      }
    },
    {
      "url": "http://webtileapi.azurewebsites.net/api/Ping?urlToPing=http://www.domusdotnet.org",
      "style": "Simple",
      "content": {
        "DDNpingdatetime": "PingDateTime",
        "DDNresultstring": "ResultString"
      }
    }
  ],
  "pages": [
    {
      "layout": "MSBand_MetricsWithIcons",
      "condition": "true",
      "iconBindings": [
        {
          "elementId": "11",
          "conditions": [
            {
              "condition": "true",
              "icon": "dotnetpodcasticon"
            }
          ]
        },
        {
          "elementId": "21",
          "conditions": [
            {
              "condition": "true",
              "icon": "domusdotneticon"
            }
          ]
        }
      ],
      "textBindings": [
        {
          "elementId": "12",
          "value": "dotNETpodcast {{DNPresultstring}}"
        },
        {
          "elementId": "22",
          "value": "DomusDotNet {{DDNresultstring}}"
        }
      ]
    },
    {
      "layout": "MSBand_NoScrollingText",
      "condition": "true",
      "textBindings": [
        {
          "elementId": "1",
          "value": "dotNET{podcast}"
        },
        {
          "elementId": "2",
          "value": "{{DNPresultstring}}"
        },
        {
          "elementId": "3",
          "value": "{{DNPpingdatetime}}"
        }
      ]
    },
    {
      "layout": "MSBand_NoScrollingText",
      "condition": "true",
      "textBindings": [
        {
          "elementId": "1",
          "value": "DomusDotNet"
        },
        {
          "elementId": "2",
          "value": "{{DDNresultstring}}"
        },
        {
          "elementId": "3",
          "value": "{{DDNpingdatetime}}"
        }
      ]
    }
  ]
}

Con questo è tutto per quanto riguarda la mini serie dedicata alla preview delle Web Tile.

Commenti

Post popolari in questo blog

VB.NET for Dummies: Gli Eventi

Vorrei iniziare con questo post una serie dedicata ad aspetti di VB.NET di base che possono essere utile a coloro che si avvicinano al mondo .NET e che, in genere, non vengono trattati a livello base. La serie di post non ha la pretesa di essere assolutamente esaustivi sugli argomenti che tratterò In questo primo post parleremo degli eventi. Cosa sono e a cosa servono Un evento è la “notifica” dell’accadimento di qualcosa. Quando, ad esempio, premiamo un bottone della finestra di un’applicazione, dietro le quinte, il bottone stesso “notifica” al mondo circostante che qualcuno, in quell’istante, lo ha premuto. Sta, poi, al mondo circostante preoccuparsi di “intercettare” l’evento stesso per gestirlo (tramite un gestore di evento). Attenzione a non confondere la pressione del tasto con la “notifica” della pressione del tasto: l’evento è la “notifica” dell’accadimento, non l’accadimento stesso. Ma a cosa serve tutto ciò? Utilizzare gli eventi è un modo per disaccoppiare ...

VB.NET: SplashScreen con effetto fade-in

In questo post vorrei proporvi un modo per realizzare una splash screen per le nostre applicazioni Windows Form che appare progressivamente con un effetto fade. Supponiamo di avere il nostro progetto VB.NET in una soluzione Visual Studio 2008 in cui abbiamo il sorgente della nostra applicazione Windows Form. Inseriamo una splash screen utilizzando il menù Progetto->Aggiungi Nuovo Elemento e selezionando il tipo di elemento “Schermata Iniziale” A questo punto Visual Studio creerà, automaticamente, la schermata iniziale che possiamo personalizzare graficamente come vogliamo. Per poter fare in modo che questa finestra appaia nel momento in cui avviamo l’applicazione, è necessario aprire le proprietà del progetto e impostare la maschera di avvio: In questo modo, all’avvio dell’applicazione, la schermata appare immediatamente e scompare un attimo prima della visualizzazione della finestra dell’applicazione. Possiamo far apparire la schermata iniziale con un ef...

Alla scoperta del Kinect: presentazioni e convenevoli

Oggi è arrivato un Kinect nuovo nuovo su cui cominciare a fare sperimentazione ed ho, quindi, deciso di condividere tutto ciò che scopro, le cavolate che faccio e i segreti che scopro con chi mi segue. I post che cercherò di scrivere con frequenza sono post di un neofita che si avvicina all’”Aggeggio” e che quindi sono diretti a chi nulla dell’argomento. Gli esperti troveranno noiosi e banali questi post, ma non si può aver tutto dalla vita. Per cominciare, scartato l’”Aggeggio” ho cominciato a preparare l’ambiente di sviluppo: 1) Visual Studio 2010 Ultimate (che uso normalmente ma che non è necessario in quanto si può sviluppare tranquillamente con la express edition); 2) Kinect SDK, scaricabile all’indirizzo http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx 3) DirectX Software Development Kit scaricabile all’indirizzo http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=6812 A questo punto vi basta connettere il Kinect al...