Exemple #1
0
        public IEnumerable <IWeatherItem> Get(string queryUrl, DateTime dateTime)
        {
            var baseUrl  = _baseUrlProvider.Get();
            var url      = $"{baseUrl}{queryUrl}";
            var htmlWeb  = new HtmlWeb();
            var document = htmlWeb.Load(url);

            var times          = _timeExtractor.Extract(document.DocumentNode);
            var descriptions   = _descriptionExtractor.Extract(document.DocumentNode);
            var temperatures   = _temperatureExtractor.Extract(document.DocumentNode);
            var windSpeeds     = _windSpeedExtractor.Extract(document.DocumentNode);
            var precipitations = _precipitationExtractor.Extract(document.DocumentNode);

            var weatherItems = times.Select(time => new WeatherItem(time, dateTime)).ToArray();

            var descriptionIndex = 0;

            foreach (var description in descriptions)
            {
                weatherItems[descriptionIndex++].Description = description;
            }

            var temperatureIndex = 0;

            foreach (var temperature in temperatures)
            {
                var weatherItem = weatherItems[temperatureIndex++];

                weatherItem.Celsius    = temperature.Celsius;
                weatherItem.Fahrenheit = temperature.Fahrenheit;
            }

            var windSpeedIndex = 0;

            foreach (var windSpeed in windSpeeds)
            {
                var weatherItem = weatherItems[windSpeedIndex++];

                weatherItem.MetersPerSecond   = windSpeed.MetersPerSecond;
                weatherItem.MilesPerHour      = windSpeed.MilesPerHour;
                weatherItem.KilometersPerHour = windSpeed.KilometersPerHour;
            }

            var precipitationIndex = 0;

            foreach (var precipitation in precipitations)
            {
                weatherItems[precipitationIndex++].Precipitation = precipitation;
            }

            return(weatherItems);
        }
Exemple #2
0
        private IEnumerable <ICityInfo> InternalGet()
        {
            var baseUrl  = _baseUrlProvider.Get();
            var htmlWeb  = new HtmlWeb();
            var document = htmlWeb.Load(baseUrl);

            var data = document.GetElementbyId("noscript");

            foreach (var childNode in data.ChildNodes.Where(node => node.Name == "a"))
            {
                var cityUrl  = childNode.GetAttributeValue("href", string.Empty);
                var cityName = childNode.GetAttributeValue("data-name", string.Empty);
                var id       = childNode.GetAttributeValue("data-id", 0);

                yield return(new CityInfo(id, cityName, cityUrl));
            }
        }