Open-Meteo API Typescript SDK
This is a TypeScript/Javascript API client designed for retrieving weather information from the Open-Meteo Weather API in Typescript / Javascript.
Unlike conventional JSON APIs, this API client employs FlatBuffers for data transfer. This is a more efficient method, particularly for handling extended time-series data. You can locate the schema definition files on GitHub open-meteo/sdk.
Features:
- Easily access weather data
- Retrieve weather data for multiple locations with a single request
- Automatic retry mechanism for handling errors
- Enhanced bandwidth efficiency and speedy parsing using FlatBuffers and Zero Copy technology
- Type annotations for enhanced code clarity
Install
npm install openmeteo
Usage
Note: The Open-Meteo API documentation generates the required Typescript code automatically.
import { fetchWeatherApi } from 'openmeteo';
const params = {
latitude: [52.54],
longitude: [13.41],
current: 'temperature_2m,weather_code,wind_speed_10m,wind_direction_10m',
hourly: 'temperature_2m,precipitation',
daily: 'weather_code,temperature_2m_max,temperature_2m_min'
};
const url = 'https://api.open-meteo.com/v1/forecast';
const responses = await fetchWeatherApi(url, params);
const range = (start: number, stop: number, step: number) =>
Array.from({ length: (stop - start) / step }, (_, i) => start + i * step);
const response = responses[0];
const utcOffsetSeconds = response.utcOffsetSeconds();
const timezone = response.timezone();
const timezoneAbbreviation = response.timezoneAbbreviation();
const latitude = response.latitude();
const longitude = response.longitude();
const current = response.current()!;
const hourly = response.hourly()!;
const daily = response.daily()!;
const weatherData = {
current: {
time: new Date((Number(current.time()) + utcOffsetSeconds) * 1000),
temperature: current.variables(0)!.value(),
weatherCode: current.variables(1)!.value(),
windSpeed: current.variables(2)!.value(),
windDirection: current.variables(3)!.value()
},
hourly: {
time: range(Number(hourly.time()), Number(hourly.timeEnd()), hourly.interval()).map(
(t) => new Date((t + utcOffsetSeconds) * 1000)
),
temperature: hourly.variables(0)!.valuesArray()!,
precipitation: hourly.variables(1)!.valuesArray()!,
},
daily: {
time: range(Number(daily.time()), Number(daily.timeEnd()), daily.interval()).map(
(t) => new Date((t + utcOffsetSeconds) * 1000)
),
weatherCode: daily.variables(0)!.valuesArray()!,
temperatureMax: daily.variables(1)!.valuesArray()!,
temperatureMin: daily.variables(2)!.valuesArray()!,
}
};
for (let i = 0; i < weatherData.daily.time.length; i++) {
console.log(
weatherData.daily.time[i].toISOString(),
weatherData.daily.weatherCode[i],
weatherData.daily.temperatureMax[i],
weatherData.daily.temperatureMin[i]
);
}
Parameter
This package only exposes one function to fetch weather data and decode the FlatBuffer messages.
async function fetchWeatherApi(
url: string,
params: any,
retries = 3,
backoffFactor = 0.2,
backoffMax = 2
): Promise<WeatherApiResponse[]> {
}