Skip to content

dmitry-bym/YandexWeatherApi

Repository files navigation

YandexWeatherApi C# wrapper

YandexWeatherApi nuget downloads lisence
YandexWeatherApi.DependencyInjection nuget downloads lisence

Create a request

var request = YandexWeather.CreateBuilder()
    .UseApiKey("your api key")
    .Build()
    .Forecast(); // or Informers()

Adding parameters

To add parameters you can use extension or set it to fields

request.WeatherLocale = WeatherLocale.be_BY;
request.Extra = true;
request.Hours = true;

Or

request
    .WithLocale(WeatherLocale.be_BY)
    .Hours()
    .Extra(false)
    .WithLocality(55, 21);

Send request

Just call Send

var result = await request.Send(cancellationToken);

Result

Result contains response or error if something goes wrong

var isSuccess = result.IsSuccess;
var isFail = result.IsFail;

var data = result.Data;                      //throw if error
var dataOrDefault = result.DataOrDefault;    //null if error
var error = result.Error;                    //throw if success 
var errorOrDefault = result.ErrorOrDefault;   //null if success 

YandexWeatherApi.DependencyInjection

    builder.Services.AddYandexWeather(options =>
    {
        options.ClientFactory = factory
        options.Logger = loger
        options.Client = client
        options.ApiKey = "key";
    });

Or you can use service provider to resolve dependencies

    builder.Services.AddYandexWeather((provider, options) =>
    {
        options.ClientFactory = provider.GetRequiredService<IHttpClientFactory>();
        options.ApiKey = "key";
    });

After registration just resolve IYandexWeatherRequestCreator

    private readonly IYandexWeatherRequestCreator _requestCreator;
    public WeatherForecastController(IYandexWeatherRequestCreator requestCreator)
    {
        _requestCreator = requestCreator;
    }

    [HttpGet(Name = "GetWeatherForecast")]
    public async Task<ForecastResponse> Get(CancellationToken ct)
    {
        var result = await _requestCreator.Forecast()
            .Extra()
            .WithLocality(55, 21)
            .Send(ct);
        
        return result.Data;
    }

Default behaviour

If HttpClient and IHttpClientFactory wasn't send it will try to resolve IHttpClientFactory from Services, if factory wasn't found it will create new HttpClient()

License

Authored by: Dmitry Kaznacheev (dmitry-bym)

This project is under MIT license. You can obtain the license copy here.

This work based on Yandex.Weather API: https://yandex.com/dev/weather