02 maja 2011

Wersja 0.2 Weather.com .NET klienta jest już dostępna

Co nowego w wersji 0.2 biblioteki Weather.com.Client?

Nowa wersja Weather.com.Client jest już dostępna na codeplex.com. Więcej informacji o Weather.com można znaleźć w poście Prognoza pogody na dziś - Weather.com .NET klient.

Weather.com.Client API wspiera asynchroniczne wywołania funkcji.

WeatherClient client = new WeatherClient("[Partner Id here]"
, "[License Key here]");
IAsyncResult result = client.BeginGetLocation("Warsaw,Poland",null, null);
//Do some work here
// Wait until the operation completes.
result.AsyncWaitHandle.WaitOne();
List locations = _client.EndGetLocation(result);


Linki z reklamami są już dostępne przez API

WeatherClient client = new WeatherClient("[Partner Id here]"
, "[License Key here]");
List locations = client.GetLocation("Warsaw,Poland");
Location location = locations[0];
CurrentWeatherInfo conditions = client.GetCurrentConditions(location);
PromoLink firstPromoLink = conditions.PromotionalLinks[0];
//firstPromoLink.Position
//firstPromoLink.Title
//firstPromoLink.Url.AbsolutePath

Ustawienie Timeout'u dla wywołania serwisu

WeatherClient client = new WeatherClient("[Partner Id here]"
, "[License Key here]");
client.Timeout = TimeSpan.FromMinutes(1);
List locations = client.GetLocation("Madrid,Spain")

System metryczny może być ustawiony przy użyciu właściwości Units.

WeatherClient client = new WeatherClient("[Partner Id here]"
, "[License Key here]");
client.Units = UnitsSystem.Standard;
//or
_client.Units = UnitsSystem.Metric;

Dokumentacja jest już dostępna na codeplex.com.

Unit testy projektu weryfikują czy XML zwracany przez serwis Weather.com jest kompatybilny z implementacją Weather.com.Client. Więcej na temat weryfikacji w punkcie poniżej.

Weather.com.Client - czy to jeszcze działa?


Serwis Weather.com udostępniający dane pogodowe jest rozwijany niezależnie od Weather.com.Client. Nie mam wglądu w plany nowych wersji interfejsu serwisu, zatem powstaje następujące pytanie - W jaki sposób umożliwić użytkownikowi sprawdzenie czy implementacja biblioteki Weather.com.Client jest nadal kompatybilna z serwisem Weather.com.

W tym momencie Weather.com.Client obsługuje trzy sposoby interakcji z serwisem
  • Znajdź lokalizację
  • Pobierz informacje pogodowe na dzisiaj 
  • Pobierz prognozę pogody.
Rezultatem odpytywania serwisu Weather.com o te informacje jest XML o innym formacie. Na podstawie generowanego XMLa wygenerowałem trzy schematy XSD. Schemat załączyłem do projektu Unit Testów i napisałem trzy testy, które weryfikują mi zgodność implementacji z XML generowanym aktualnie przez Weather.com serwis.

Schemat XSD jest przechowywany jako Embedded Resource w DLL'u Unit Testów.

Przykładowy kod implementacji weryfikacji z użyciem XSD i XML'a zwracanego przez usługę.
WeatherClient client = new WeatherClient("[Partner Id here]"
, "[License Key here]");
string locationXml = client.GetLocationAsXml("Warsaw,Poland");
Assembly assembly = Assembly.GetExecutingAssembly();
Stream resourceStream = assembly.GetManifestResourceStream(
    assembly.GetName().Name + "." 
+ "SupportedServiceSchema.LocationSearch.LocationSearch.xsd");
using(Stream xsdStream = resourceStream)
{
    using (XmlValidatingReader xmlReader = 
        new XmlValidatingReader(
                     new XmlTextReader(
                        new StringReader(locationXml))))
    {
        XmlSchema xmlSchema = XmlSchema.Read(
                    new XmlTextReader(xsdStream), null);
        xmlReader.Schemas.Add(xmlSchema);
        while (xmlReader.Read())
        { }
    }
}

Brak komentarzy:

Prześlij komentarz

Uwaga: tylko uczestnik tego bloga może przesyłać komentarze.