@wayota/redata-api-client
Version:
TypeScript client for the REData (Red Eléctrica de España) public API. Provides convenient methods to fetch Spanish electricity data widgets, supporting category, widget, date range, and geographic filters. The client is based on a custom OpenAPI specific
61 lines (50 loc) • 1.98 kB
text/typescript
import { Category } from "./enums/Category";
import { GeoLimit } from "./enums/GeoLimit";
import { GeoTrunc } from "./enums/GeoTrunc";
import { Lang } from "./enums/Lang";
import { TimeTrunc } from "./enums/TimeTrunc";
import { Widget } from "./enums/Widget";
export type ClientConfig = {
baseUrl?: string;
}
export type GetByCategoryByWidgetParams = {
lang?: Lang;
category: Category;
widget: Widget;
query: {
startDate: string; // ISO 8601 format
endDate: string; // ISO 8601 format
timeTrunc: TimeTrunc;
geotrunc?: GeoTrunc;
geoLimit?: GeoLimit;
geoIds?: string;
}
}
export class Client {
private lang: Lang = Lang.es;
constructor(private readonly config: ClientConfig = { baseUrl: 'https://apidatos.ree.es' }) { }
private buildUrl({ category, widget, lang }: { category: Category, widget: Widget, lang: Lang}) {
return new URL(`${this.config.baseUrl}/${lang}/datos/${category}/${widget}`);
}
async getByCategoryByWidget(params: GetByCategoryByWidgetParams) {
const { lang = this.lang, category, widget, query } = params;
const url = this.buildUrl({ category, widget, lang });
url.searchParams.set('start_date', query.startDate);
url.searchParams.set('end_date', query.endDate);
url.searchParams.set('time_trunc', query.timeTrunc);
if (query.geotrunc) {
url.searchParams.set('geo_trunc', query.geotrunc);
}
if (query.geoLimit) {
url.searchParams.set('geo_limit', query.geoLimit);
}
if (query.geoIds) {
url.searchParams.set('geo_ids', query.geoIds);
}
const response = await fetch(url.toString());
if (!response.ok) {
throw new Error(`Error fetching data: ${response.statusText}`);
}
return response.json();
}
}