/// <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); }