Skip to content

Latest commit

 

History

History
185 lines (140 loc) · 4.13 KB

READMEForecast.md

File metadata and controls

185 lines (140 loc) · 4.13 KB

##Canducci FORECAST

####(version: 0.0.1)

Web Service CPTEC/INPE

##Demo

Canducci Forecast

NuGet NuGet

##Instalação do Pacote (NUGET)

PM> Install-Package Canducci.Forecast

##Como utilizar?

Declare o namespace using Canducci.Forecast;

try
{
    
    CityForecast cf = new CityForecast();
    
    //LISTA DE CIDADES
    //Busca textual das cidades para saber o código para utilizar
    // na pesquisa `cf.Forecast`
    Cities cities = cf.Cities("Sao Paulo");

    //Id = 244 é da Cidade de São Paulo Capital
    //ForecastDay pode ser de 7 resultados ou de 4 (valor padrão)
    Prevision prevision = cf.Forecast(244, ForecastDay.D4);


    cf.Dispose();
}
catch (CityForecastException ex)
{
    throw ex;
}

Nota: para versão NET 4.5 e superiores possui os métodos Async.

###Exemplo ASP.NET MVC com Async

[HttpPost]
[Route("cities")]
public async Task<JsonResult> ForecastCities(string name)
{
   
    if (!string.IsNullOrEmpty(name))
    {
        ICities cities = null;

        using (ICityForecast fc = new CityForecast())
        {
            cities = await fc.CitiesAsync(name.WithoutAccents());
        }
        return Json(cities, JsonRequestBehavior.DenyGet);
    }    
    return Json(new string[] { }, JsonRequestBehavior.DenyGet);
}
[HttpPost]
[Route("prevision")]
public async Task<JsonResult> ForecastPrevision(int? Id, int? Count = 4)
{    
    IPrevision prev = null;
    if (Id.HasValue)
    {                    
        using (ICityForecast fc = new CityForecast())
        {
            prev = await fc.ForecastAsync(Id.Value, 
                ((Count.HasValue && Count == 7) ? 
                    ForecastDay.D7 : 
                    ForecastDay.D4));
        }
        return Json(prev, JsonRequestBehavior.DenyGet);
    }
    return Json(new string[] { }, JsonRequestBehavior.DenyGet);
}

Observação: Quando for resgatar as cidades o texto informado não pode ser acentuado, então use a class logo abaixo como método de extensão para remover os acentos:

public static class Methods
{
    public static string WithoutAccents(this string str)
    {
        if (string.IsNullOrEmpty(str))
        {
            return string.Empty;
        }
        byte[] bytes = System.Text.Encoding.GetEncoding("iso-8859-8").GetBytes(str);
        return System.Text.Encoding.UTF8.GetString(bytes);
    }
}

###Modelo de Resposta da classe Cities e City

Cities

Classe que tem as informações das cidades seguindo o modelo de cidade.

public class Cities : ICities
{
    public Cities()
    {
        Citys = new List<City>();
    }
    public List<City> Citys { get; set; }
    public long Count
    {
        get
        {
            return Citys.Count;
        }
    }
}

City

Modelo de cidade.

public class City : ICity
{    
    public int Id { get; set; } 
    public string Name { get; set; }
    public string Uf { get; set; }
}

###Modelo de Resposta da classe Prevision e Days

Prevision

Classe que tem as informações da cidade e ultima atualização da Previsão do tempo

public class Prevision : IPrevision
{    
    public string Name { get; set; }
    public string Uf { get; set; }
    public DateTime Updated { get; set; }
    public List<Days> Days { get; set; }
}

Days

Classe que possui as datas relativas a previsão do tempo.

public class Days : IDays
{    
    public DateTime Data { get; set; }
    public string Time { get;set; }
    public Term TimeTerm { get; private set; }
    public decimal Max { get; set; }
    public decimal Min { get; set; }
    public decimal Iuv { get; set; }
}