import { fetchWeatherApi } from "openmeteo"; const params = { latitude: 52.52, longitude: 13.41, daily: ["temperature_2m_max", "temperature_2m_min", "sunrise", "sunset", "daylight_duration", "sunshine_duration"], hourly: ["temperature_2m", "relative_humidity_2m", "apparent_temperature", "precipitation", "precipitation_probability", "rain", "showers", "snowfall", "cloud_cover", "visibility", "uv_index", "is_day", "sunshine_duration"], wind_speed_unit: "mph", }; const url = "https://api.open-meteo.com/v1/forecast"; const responses = await fetchWeatherApi(url, params); // Process first location. Add a for-loop for multiple locations or weather models const response = responses[0]; // Attributes for timezone and location const latitude = response.latitude(); const longitude = response.longitude(); const elevation = response.elevation(); const utcOffsetSeconds = response.utcOffsetSeconds(); console.log( `\nCoordinates: ${latitude}°N ${longitude}°E`, `\nElevation: ${elevation}m asl`, `\nTimezone difference to GMT+0: ${utcOffsetSeconds}s`, ); const hourly = response.hourly()!; const daily = response.daily()!; // Define Int64 variables so they can be processed accordingly const sunrise = daily.variables(2)!; const sunset = daily.variables(3)!; // Note: The order of weather variables in the URL query and the indices below need to match! const weatherData = { hourly: { time: Array.from( { length: (Number(hourly.timeEnd()) - Number(hourly.time())) / hourly.interval() }, (_, i) => new Date((Number(hourly.time()) + i * hourly.interval() + utcOffsetSeconds) * 1000) ), temperature_2m: hourly.variables(0)!.valuesArray(), relative_humidity_2m: hourly.variables(1)!.valuesArray(), apparent_temperature: hourly.variables(2)!.valuesArray(), precipitation: hourly.variables(3)!.valuesArray(), precipitation_probability: hourly.variables(4)!.valuesArray(), rain: hourly.variables(5)!.valuesArray(), showers: hourly.variables(6)!.valuesArray(), snowfall: hourly.variables(7)!.valuesArray(), cloud_cover: hourly.variables(8)!.valuesArray(), visibility: hourly.variables(9)!.valuesArray(), uv_index: hourly.variables(10)!.valuesArray(), is_day: hourly.variables(11)!.valuesArray(), sunshine_duration: hourly.variables(12)!.valuesArray(), }, daily: { time: Array.from( { length: (Number(daily.timeEnd()) - Number(daily.time())) / daily.interval() }, (_, i) => new Date((Number(daily.time()) + i * daily.interval() + utcOffsetSeconds) * 1000) ), temperature_2m_max: daily.variables(0)!.valuesArray(), temperature_2m_min: daily.variables(1)!.valuesArray(), // Map Int64 values to according structure sunrise: [...Array(sunrise.valuesInt64Length())].map( (_, i) => new Date((Number(sunrise.valuesInt64(i)) + utcOffsetSeconds) * 1000) ), // Map Int64 values to according structure sunset: [...Array(sunset.valuesInt64Length())].map( (_, i) => new Date((Number(sunset.valuesInt64(i)) + utcOffsetSeconds) * 1000) ), daylight_duration: daily.variables(4)!.valuesArray(), sunshine_duration: daily.variables(5)!.valuesArray(), }, }; // The 'weatherData' object now contains a simple structure, with arrays of datetimes and weather information console.log("\nHourly data:\n", weatherData.hourly) console.log("\nDaily data:\n", weatherData.daily)

Privacy Preference Center