En este tercer capítulo, continuamos con el modelo, dónde vamos a agregar una clase estática, que se ocupe de hacer las peticiones a los servicios web, y transformen las respuestas en listas de localizaciones y datos meteorológicos.
Vamos a hacer peticiones a dos servicios web, el primero es para obtener coordenadas y localizaciones, a partir de una cadena de texto que se introduzca en la aplicación. El segundo devuelve un bloque de datos a partir de las coordenadas que le pasemos de la localización seleccionada de las mostradas en el servicio anterior.
Para hacer todo esto, utilizaremos los servicios gratuitos de Bing Maps para la localización, y de Dark Sky Company. La razón de seleccionar ambos es que el primero, me parece bastante sencillo y en este post puedes ver como obtener la key para poder utilizar el servicio. Y el segundo web service, es porque me parece bastante curioso, puedes hacer peticiones del tiempo por minuto u hora, en un momento determinado en el intervalo de 60 años atrás y hasta 10 años hacía adelante, y aunque tiene algunas limitaciones, creo que puede ser interesante probarlo.
Web Services
Bing Maps
http://dev.virtualearth.net/REST/v1/Locations?query=query&maxResults=maxResults&key=APIKEY&output=xml
Parámetros:
- query: Palabra objeto para la consulta
- maxResults: Número de resultados que queremos establecer como máximo. Tiene un límite de 20 por consulta.
- APIKEY: Es la clave del API que hayamos obtenido de Bing
- output: Lo he establecido directamente en XML, pero si se elimina el parámetro automáticamente devuelve un JSON.
Forecast
http://api.forecast.io/forecast/APIKEY/Latitude,Longitude
Parámetros:
- APIKEY: Es la clave del API que hayamos obtenido de Forecast
- Latitude: Latitud en grados decimales.
- Longitude: Longitud en grados decimales.
Antes de generar la clase estática, vamos a almacenar estas urls parametrizadas en el fichero de recursos de proyecto.
Creamos la clase estática, con estos miembros, GetLocations() y GetWeather(), los cuales nos van a proveer los datos para la vista.
Client.cs
using System; using System.Collections.Generic; using System.Globalization; namespace WeatherApp.Model { public static class Client { private static readonly CultureInfo Culture = new CultureInfo("EN-US"); public static List<Location> GetLocations(String query, int maxResults = 20) { return null; } public static Weather GetWeather(Coordinates coords) { return null; } } }
En el siguiente post vamos a establecer unas pruebas unitarias para desarrollar estas funciones.