示例#1
0
        public async Task BuffaloForecastCombineAllOptionsGermanCulture()
        {
            using var germanCultureParse =
                      new DarkSkyService(_apiKey, jsonSerializerService: new CultureSettingFixture());

            var forecast = await germanCultureParse.GetForecast(_latitude, _longitude,
                                                                new OptionalParameters
            {
                ExtendHourly        = true,
                DataBlocksToExclude = new List <ExclusionBlocks> {
                    ExclusionBlocks.Flags
                },
                LanguageCode     = "x-pig-latin",
                MeasurementUnits = "si"
            });

            Assert.NotNull(forecast);
            Assert.NotNull(forecast.Response);
            Assert.NotNull(forecast.Headers);
            Assert.NotEmpty(forecast.Response.Daily.Data);
            Assert.NotEmpty(forecast.Response.Hourly.Data);
            Assert.Null(forecast.Response.Flags);
            Assert.Equal(forecast.Response.Latitude, _latitude);
            Assert.Equal(forecast.Response.Longitude, _longitude);
        }
示例#2
0
        public async Task UnicodeLanguageIsSupported()
        {
            var client = new DarkSkyService(apiKey);
            var result = await client.GetWeatherDataAsync(AlcatrazLatitude, AlcatrazLongitude, Unit.Auto, Language.Chinese);

            Assert.That(result, Is.Not.Null);
        }
示例#3
0
        public async Task BuffaloForecastEverythingParsed()
        {
            using var parseAllJson =
                      new DarkSkyService(_apiKey, jsonSerializerService: new MissingMemberHandlingFixture());

            await parseAllJson.GetForecast(_latitude, _longitude);
        }
示例#4
0
        public void FullQueryBuilderTest()
        {
            var expectedQuery =
                $"forecast/fakekey/{ResponseFixture.Latitude},{ResponseFixture.Longitude},1970-01-01T00:00:00Z?&exclude=alerts,flags&extend=hourly&lang=x-pig-latin&units=si";
            const string baseUri    = @"https://api.darksky.net/";
            var          totalQuery = $"{baseUri}{expectedQuery}";

            var queryCheckClient = new Mock <IHttpClient>();

            queryCheckClient.Setup(f => f.HttpRequestAsync(totalQuery))
            .Returns((string s) => Task.FromResult(new HttpResponseMessage
            {
                StatusCode = HttpStatusCode.OK, ReasonPhrase = s
            }));

            using var darkSkyServiceQueryCheck =
                      new DarkSkyService("fakekey", new Uri(baseUri), queryCheckClient.Object);
            var parameters = new OptionalParameters
            {
                DataBlocksToExclude = new List <ExclusionBlocks> {
                    ExclusionBlocks.Alerts, ExclusionBlocks.Flags
                },
                ExtendHourly     = true,
                LanguageCode     = "x-pig-latin",
                MeasurementUnits = "si",
                ForecastDateTime = DateTime.UnixEpoch
            };
            var result = darkSkyServiceQueryCheck
                         .GetForecast(ResponseFixture.Latitude, ResponseFixture.Longitude, parameters).Result;

            Assert.Equal(result.ResponseReasonPhrase, totalQuery);
            Assert.True(result.IsSuccessStatus);
        }
示例#5
0
        public async Task TestGetBasicWeatherData()
        {
            var api = Config[_apiEnvVar];

            Assert.IsNotNull(api);

            var weather = new DarkSkyService(api);

            var forecast = await weather.GetForecast(_latitude, _longitude, new DarkSkyService.OptionalParameters
            {
                MeasurementUnits = "si",
            });

            var humid = forecast.Response.Currently.Humidity;

            var temp = forecast.Response.Currently.Temperature;

            var wind = forecast.Response.Currently.WindSpeed;

            var minToday = forecast.Response.Daily.Data[0].TemperatureLow;
            var maxToday = forecast.Response.Daily.Data[0].TemperatureHigh;

            var minTomorrow = forecast.Response.Daily.Data[1].TemperatureLow;
            var maxTomorrow = forecast.Response.Daily.Data[1].TemperatureHigh;

            foreach (var day in forecast.Response.Daily.Data)
            {
                var time = day.DateTime.ToLocalTime();
                Debug.WriteLine(time.ToString());
            }


            Debug.WriteLine($"Temp: {temp}, Humid: {humid}");
        }
示例#6
0
        public ForecastResult Get(double lat, double lng)
        {
            var client          = new DarkSkyService(DARKSKY_API);
            var darkSkyForecast = client.GetWeatherDataAsync(lat, lng).Result;

            var result = new ForecastResult
            {
                CurrentSummary = darkSkyForecast.Currently.Summary,
                CurrentTemp    = darkSkyForecast.Currently.Temperature.ToString("0.0")
            };

            foreach (var dsDayForecast in darkSkyForecast.Daily.Days)
            {
                var dayForecast = new DailyForecast
                {
                    LowTemp   = dsDayForecast.LowTemperature.ToString("0.0"),
                    HiTemp    = dsDayForecast.HighTemperature.ToString("0.0"),
                    Summary   = dsDayForecast.Summary,
                    DayOfWeek = dsDayForecast.SunriseTime.ToLocalTime().DayOfWeek.ToString()
                };

                result.Future.Add(dayForecast);
            }
            return(result);
        }
示例#7
0
        public async void TimeMachineExclusionWorksCorrectly()
        {
            // prepare
            var      date   = new DateTime(2021, 01, 24, 10, 00, 01, DateTimeKind.Utc);
            Forecast output = null;

            using (var stream = new BufferedStream(File.OpenRead("./Resources/DarkSky_GetWeatherByDate_SI.json"), 8192)) {
                var mockHttp = new MockHttpMessageHandler();
                mockHttp
                .When(DarkSkyService.EndPointRoot + "*")
                .Respond("application/json", stream);

                var exclusionList = new List <Exclude> {
                    Exclude.Minutely, Exclude.Hourly
                };
                IDarkSkyService client = new DarkSkyService("a_valid_key", mockHttp);
                output = await client.GetWeatherByDate(AlcatrazLatitude, AlcatrazLongitude, date, exclusionList, DSUnit.SI);

                stream.Close();
            }

            Assert.NotNull(output);
            Assert.Null(output.Hourly);
            Assert.NotNull(output.Currently);
            Assert.NotNull(output.Daily);
            Assert.NotNull(output.Daily.Data);
            output.Daily.Data.Count.ShouldBe(1);
            output.Daily.Data[0].Time.Date.ShouldBe(date.Date);
        }
示例#8
0
        public async Task <RuntimeResult> GetWeatherForLocationAsync([Summary("User")] SocketUser user = null)
        {
            var targetUser = user ?? Context.User;
            var record     = UserRepository.GetCoordinates(targetUser);

            if (record == null)
            {
                return(CommandRuntimeResult.FromError(
                           "Location is not set yet! Please set the location first!"));
            }
            var geocodeResults = await Geocoder.ReverseGeocodeAsync(record.Latitude, record.Longitude).ConfigureAwait(false);

            var geocode = geocodeResults.FirstOrDefault();

            if (geocode == null)
            {
                return(CommandRuntimeResult.FromError(
                           "I could not find the set location! Try setting another location."));
            }
            var forecast = await DarkSkyService.GetForecast(
                geocode.Coordinates.Latitude,
                geocode.Coordinates.Longitude,
                _darkSkyParams
                ).ConfigureAwait(false);

            var embeds = await Weather.GetWeatherEmbedsAsync(forecast, geocode).ConfigureAwait(false);

            await ReplyAsync("", embed : embeds.WeatherResults.FirstOrDefault().Build()).ConfigureAwait(false);

            foreach (var alert in embeds.Alerts)
            {
                await ReplyAsync("", embed : alert.Build()).ConfigureAwait(false);
            }
            return(CommandRuntimeResult.FromSuccess());
        }
示例#9
0
        public DarkSkyWeatherService()
        {
            var settings = Mvx.IoCProvider.Resolve <IAppSettings>();

            Serial         = settings.DarkSkySerial;
            WeatherService = new DarkSkyService(Serial);
        }
示例#10
0
        private static async Task <Forecast> GetDarkSkyForecast(double lat, double longitude)
        {
            var ds       = new DarkSkyService("");
            var forecast = await ds.GetWeatherDataAsync(lat, longitude);

            return(forecast);
        }
        public async Task GetForecastWithMockData()
        {
            var mockCLient = new Mock <IHttpClient>();

            mockCLient.Setup(f => f.HttpRequest(It.IsAny <string>())).Returns(Task.FromResult(_mockHttpResponse));

            var darkSkyService = new DarkSkyService("fakekey", mockCLient.Object);
            var forecast       = await darkSkyService.GetForecast(_latitude, _longitude);

            Assert.NotNull(forecast);

            // Check Response (basic deserialization check)
            Assert.NotNull(forecast.Response);
            Assert.Equal(forecast.Response.Latitude, _latitude);
            Assert.Equal(forecast.Response.Longitude, _longitude);
            Assert.NotEmpty(forecast.Response.Alerts);
            Assert.NotNull(forecast.Response.Currently);
            Assert.NotNull(forecast.Response.Daily);
            Assert.NotEmpty(forecast.Response.Daily.Data);
            Assert.NotNull(forecast.Response.Flags);
            Assert.NotNull(forecast.Response.Hourly);
            Assert.NotEmpty(forecast.Response.Hourly.Data);
            Assert.NotNull(forecast.Response.Minutely);
            Assert.NotEmpty(forecast.Response.Minutely.Data);
            Assert.NotNull(forecast.Response.TimeZone);
        }
示例#12
0
        public async void GetWeather()
        {
            var client = new DarkSkyService(GlobalVars.DarkSkyWeatherKey);

            // 52.499836, 6.079915 are Windesheim Coordinates
            Weather = await client.GetWeatherDataAsync(52.499836, 6.079915);
        }
示例#13
0
        public async Task <RuntimeResult> GetWeatherForLocationAsync([Summary("Location")][Remainder] string location)
        {
            var geocodeResults = await Geocoder.GeocodeAsync(location).ConfigureAwait(false);

            var geocode = geocodeResults.FirstOrDefault();

            if (geocode == null)
            {
                return(CommandRuntimeResult.FromError($"I could not find {location}! Try another location."));
            }
            var forecast = await DarkSkyService.GetForecast(
                geocode.Coordinates.Latitude,
                geocode.Coordinates.Longitude,
                _darkSkyParams).ConfigureAwait(false);

            var embeds = await Weather.GetWeatherEmbedsAsync(forecast, geocode).ConfigureAwait(false);

            await ReplyAsync("", embed : embeds.WeatherResults.FirstOrDefault().Build()).ConfigureAwait(false);

            foreach (var alert in embeds.Alerts)
            {
                await ReplyAsync("", embed : alert.Build()).ConfigureAwait(false);
            }
            return(CommandRuntimeResult.FromSuccess());
        }
示例#14
0
        public string GetWeatherForLocation(double latitude, double longitude)
        {
            var service  = new DarkSkyService("97fb52ad1c8fb2f59ff1f5da02d0337c");
            var forecast = Task.Run(() => service.GetForecast(latitude, longitude)).Result;

            return($"Current weather is {forecast.Response.Currently.Temperature}");
        }
示例#15
0
        public async void CurrentAnd7DaysForecastWorksCorrectly()
        {
            // prepare
            Forecast output = null;

            using (var stream = new BufferedStream(File.OpenRead("./Resources/DarkSky_CurrentAnd7DaysForecast_SI.json"), 8192)) {
                var mockHttp = new MockHttpMessageHandler();
                mockHttp
                .When(DarkSkyService.EndPointRoot + "*")
                .Respond("application/json", stream);
                IDarkSkyService client = new DarkSkyService("a_valid_key", mockHttp);

                var exclusionList = new List <Exclude> {
                    Exclude.Hourly, Exclude.Minutely, Exclude.Alerts, Exclude.Flags
                };
                output = await client.GetWeather(BolognaLatitude, BolognaLongitude, null, exclusionList, DSUnit.Auto, Language.Italian);

                stream.Close();
            }

            // assert
            Assert.NotNull(output);
            Assert.NotNull(output.Currently);
            Assert.Null(output.Minutely);
            Assert.Null(output.Hourly);
            Assert.NotNull(output.Currently);
            Assert.NotNull(output.Daily);
            Assert.NotNull(output.Daily.Data);
            Assert.NotEmpty(output.Daily.Data);
        }
示例#16
0
        public async void GetForecast_ByCoordinates_Test()
        {
            // prepare
            Forecast output = null;

            using (var stream = new BufferedStream(File.OpenRead("./Resources/DarkSky_GetForecast_SI.json"), 8192)) {
                var mockHttp = new MockHttpMessageHandler();
                mockHttp
                .When(DarkSkyService.EndPointRoot + "*")
                .Respond("application/json", stream);
                IDarkSkyService client = new DarkSkyService("a_valid_key", mockHttp);

                output = await client.GetForecast(BolognaLatitude, BolognaLongitude, DSUnit.SI, Language.Italian);

                stream.Close();
            }

            // assert
            Assert.NotNull(output);
            Assert.NotNull(output.Currently);
            Assert.Null(output.Minutely);
            Assert.NotNull(output.Hourly);
            Assert.NotNull(output.Hourly.Data);
            Assert.NotEmpty(output.Hourly.Data);
            Assert.NotNull(output.Daily);
            Assert.NotNull(output.Daily.Data);
            Assert.NotEmpty(output.Daily.Data);
        }
示例#17
0
        //Jeff Munson API key
        //9a9c19a4d9a62d812bf17136c99cc6cf

        // Zucker Hillside hospital
        //40°45'09.7"N 73°42'39.3"W
        //40.752700, -73.710906

        //Central Park
        //40°46'53.5"N 73°57'60.0"W
        //40.781531, -73.966657

        //18 miles north, White Plains Hospital
        //41°01'35.0"N 73°46'05.9"W
        //41.026394, -73.768312

        //38 miles north NewYork-Presbyterian/Hudson Valley Hospital, Cortlandt Manor NY
        //41°17'33.9"N 73°53'34.1"W
        //41.292741, -73.892797

        //28 miles west, University Hospital in Newark
        //40°44'25.5"N 74°11'22.9"W
        //40.740423, -74.189698

        //33 miles E NE, Stony Brook University Hospital
        //40°54'34.6"N 73°06'48.4"W
        //40.909615, -73.113439



        public DarkSky()
        {
            //
            // TODO: Add constructor logic here
            //
            client = new DarkSkyService("9a9c19a4d9a62d812bf17136c99cc6cf");
        }
示例#18
0
        public async Task GetForecastWithMockData()
        {
            var darkSkyService = new DarkSkyService("fakekey", _fixture.MockClient.Object);
            var forecast       = await darkSkyService.GetForecast(_latitude, _longitude);

            Assert.NotNull(forecast);

            //Check Response (basic deserialization check)
            Assert.NotNull(forecast.Response);
            Assert.Equal(forecast.Response.Latitude, _latitude);
            Assert.Equal(forecast.Response.Longitude, _longitude);
            Assert.NotEmpty(forecast.Response.Alerts);
            Assert.NotNull(forecast.Response.Currently);
            Assert.NotNull(forecast.Response.Daily);
            Assert.NotEmpty(forecast.Response.Daily.Data);
            Assert.NotNull(forecast.Response.Flags);
            Assert.NotNull(forecast.Response.Hourly);
            Assert.NotEmpty(forecast.Response.Hourly.Data);
            Assert.NotNull(forecast.Response.Minutely);
            Assert.NotEmpty(forecast.Response.Minutely.Data);
            Assert.NotNull(forecast.Response.Timezone);

            // Check Headers (match pre-defined values)
            Assert.NotNull(forecast.Headers);
            Assert.Equal(forecast.Headers.ApiCalls.Value, _fixture.ApiCalls);
            Assert.Equal(forecast.Headers.CacheControl.MaxAge.Value.TotalMinutes, _fixture.CacheMinutes);
            Assert.Equal(forecast.Headers.ResponseTime, _fixture.ResponseTime);
        }
示例#19
0
        /// <summary>
        /// Fetches DarkSky api, Tidal api to gather weather data, and select relevant data
        /// assigning it to this object
        /// </summary>
        /// <param name="lat">Latitude</param>
        /// <param name="lon">Longitude</param>
        /// <param name="location">Location name for provided coordinates</param>
        /// <param name="stationId">Tidal station id</param>
        /// <param name="addDays">Fetch data for future days. How many days add to today date</param>
        /// <param name="addHours">Fetch data for current hours + addHours</param>
        public void Update(double lat, double lon, string location, string stationId, int addDays = 0, int addHours = 0)
        {
            var client = new DarkSkyService(Constants.DarkSkyKey);
            // creating time object which depicts forecast time
            var time = DateTimeOffset.Now.AddDays(addDays).AddHours(addHours);

            // calling api for weather info
            DarkSkyApi.Models.Forecast f = Task.Run(() => client.GetTimeMachineWeatherAsync(lat, lon, time)).Result;
            // setting model properties with api result
            icon          = f.Currently.Icon;
            this.location = location;
            double _temp = Math.Round(UnitConverters.FahrenheitToCelsius(f.Currently.Temperature), 1);

            temperature   = _temp.ToString() + "°C";
            summary       = f.Currently.Summary;
            humidity      = $"{(int)(f.Currently.Humidity * 100)}%";
            windSpeed     = string.Format("{0:0.00}m/s", f.Currently.WindSpeed / 2.237); // convert to m/s
            windDirection = ((int)(f.Currently.WindBearing)).ToString() + "°";
            if (stationId != string.Empty)
            {
                waterLevel = TidalApi.GetInstance().GetWaterInfo(stationId, addDays, time.Hour);
            }
            else
            {
                waterLevel = "0m";
            }
            // setting forecast time in model, setting minutes and seconds to 0
            date = new DateTime(time.Year, time.Month, time.Day, time.Hour, 0, 0);
        }
示例#20
0
 public ParksController(NPDbContext context, IConfiguration configuration)
 {
     _context      = context;
     Configuration = configuration;
     _apiKey       = Configuration[_apiEnvVar];
     darkSky       = new DarkSkyService(_apiKey);
 }
 public WheaterSimulator()
 {
     // 37076b047b44f229bd60d7bffb9a8c22
     // fa6d00664c0c9abf42654341ff91db31
     // e67254e31e12e23461c61e0fb0489142
     // ab42e06e054eb1164d36132c278edef9
     darkSkyProxy = new DarkSkyService("fa6d00664c0c9abf42654341ff91db31");
 }
 public void ExceptionThrownForMissingApiKey(string value)
 {
     Assert.ThrowsAny <ArgumentException>(() =>
     {
         var darkSkyService = new DarkSkyService(value);
         var result         = darkSkyService.GetForecast(0, 0);
     });
 }
        public async Task <Forecast> Get(double latitude, double longitude)
        {
            var      client = new DarkSkyService(Environment.GetEnvironmentVariable("ApiKey"));
            Forecast result = await client.GetWeatherDataAsync(latitude, longitude);

            JsonConvert.SerializeObject(result);
            return(result);
        }
示例#24
0
 public void Dispose()
 {
     _darkSky = null;
     JsonConvert.DefaultSettings = () => new JsonSerializerSettings
     {
         MissingMemberHandling = MissingMemberHandling.Ignore
     };
 }
示例#25
0
        public async Task UnitSIWorksCorrectly()
        {
            var client = new DarkSkyService(apiKey);

            var result = await client.GetWeatherDataAsync(MumbaiLatitude, MumbaiLongitude, Unit.SI);

            Assert.That(result, Is.Not.Null);
            Assert.That(result.Currently, Is.Not.Null);
        }
示例#26
0
        public async Task NonUSDataCanBeRetrieved()
        {
            var client = new DarkSkyService(apiKey);

            var result = await client.GetWeatherDataAsync(MumbaiLatitude, MumbaiLongitude);

            Assert.That(result, Is.Not.Null);
            Assert.That(result.Currently, Is.Not.Null);
        }
示例#27
0
        public async Task ValidKeyRetrievesData()
        {
            var client = new DarkSkyService(apiKey);

            var result = await client.GetWeatherDataAsync(AlcatrazLatitude, AlcatrazLongitude);

            Assert.That(result, Is.Not.Null);
            Assert.That(result.Currently, Is.Not.Null);
        }
示例#28
0
        public async Task UnitsCanBeSpecified()
        {
            var client = new DarkSkyService(apiKey);

            var result = await client.GetWeatherDataAsync(AlcatrazLatitude, AlcatrazLongitude, Unit.CA);

            Assert.That(result, Is.Not.Null);
            Assert.That(result.Flags.Units, Is.EqualTo(Unit.CA.ToValue()));
        }
示例#29
0
 private void Settings_OnChanged()
 {
     _weather = new DarkSkyService(_settings.DARKSKY_API_KEY);
     BoardStatusValues.TOOLATE  = _settings.TOO_LATE;
     BoardStatusValues.RUNNOW   = _settings.RUN_TIME_TO_STATION;
     BoardStatusValues.GONOW    = _settings.WALK_TIME_TO_STATION;
     BoardStatusValues.DRINKUP  = _settings.DRINK_UP_TIME;
     BoardStatusValues.GETDRINK = _settings.GET_DRINK_TIME;
 }
示例#30
0
        public ResponseHeadersIntegrationTests()
        {
            var configBuilder = new ConfigurationBuilder().AddEnvironmentVariables();
            var config        = configBuilder.Build();
            var apiKey        = config.GetValue <string>(_apiEnvVar);

            Assert.False(string.IsNullOrWhiteSpace(apiKey), $"You must set the environment variable {_apiEnvVar}");
            _darkSky = new DarkSkyService(apiKey);
        }