Exemple #1
0
        /// <summary>
        /// Asynchronously retrieves weather data for a particular latitude and longitude, on
        /// a given day.
        /// <para>
        /// Only conditions for the day are given (i.e. the time is ignored, and taken to be the
        /// current time).
        /// </para>
        /// <para>
        /// Allows specification of units of measurement, language used, extended hourly forecasts,
        /// and exclusion of data blocks.
        /// </para>
        /// </summary>
        /// <param name="latitude">
        /// The latitude to retrieve data for.
        /// </param>
        /// <param name="longitude">
        /// The longitude to retrieve data for.
        /// </param>
        /// <param name="date">
        /// The date to retrieve data for.
        /// </param>
        /// <param name="unit">
        /// The units of measurement to use.
        /// </param>
        /// <param name="extends">
        /// The type of forecast to retrieve extended results for. Currently limited to hourly blocks.
        /// </param>
        /// <param name="excludes">
        /// Any blocks that should be excluded from the request.
        /// </param>
        /// <param name="language">
        /// The language to use for summaries.
        /// </param>
        /// <returns>
        /// A <see cref="Task"/> for a <see cref="Forecast"/> with the requested data, or null if the data was corrupted.
        /// </returns>
        public async Task<Forecast> GetTimeMachineWeatherAsync(
            double latitude,
            double longitude,
            DateTimeOffset date,
            Unit unit,
            IList<Extend> extends,
            IList<Exclude> excludes,
            Language language)
        {
            this.ThrowExceptionIfApiKeyInvalid();

            var unitValue = unit.ToValue();
            var extendList = string.Join(",", extends.Select(x => x.ToValue()));
            var excludeList = string.Join(",", excludes.Select(x => x.ToValue()));
            var languageValue = language.ToValue();
            var unixTime = date.ToUnixTime();

            var requestUrl = string.Format(
                CultureInfo.InvariantCulture,
                SpecificTimeConditionsUrl,
                this.apiKey,
                latitude,
                longitude,
                unixTime,
                unitValue,
                extendList,
                excludeList,
                languageValue);

            return await this.GetForecastFromUrl(requestUrl);
        }