@rapidthenerd/ergast-ts
Version:
Node wrapper for Ergast API
62 lines (52 loc) • 2.34 kB
text/typescript
import axios from 'axios';
import {SeasonData} from './interface/SeasonData';
import {CircuitData} from "./interface/CircuitData";
import {Cache} from "./cache/cache";
export class Seasons {
/**
* Gets the current season data.
* @return an array of {@link SeasonData}
*/
public async getForCurrentYear(): Promise<SeasonData[]> {
return this.getForYear(new Date().getFullYear());
}
/**
* Returns the current race data for the year specified.
* @param year to get the data from.
* @return an array of {@link SeasonData}
*/
public async getForYear(year: string | number): Promise<SeasonData[]> {
const key = Cache.generateKey("seasons", year);
if (Cache.isEnabled() && Cache.isInCache(key)) {
return Cache.get(key);
}
const response = await axios.get(`https://ergast.com/api/f1/${year}.json`);
const racesData = response.data.MRData.RaceTable.Races;
const seasonData: SeasonData[] = racesData.map((raceData: any) => {
const circuit: CircuitData = {
name: raceData.Circuit.circuitName,
wikiUrl: raceData.Circuit.url,
id: raceData.Circuit.circuitId,
lat: parseFloat(raceData.Circuit.Location.lat),
long: parseFloat(raceData.Circuit.Location.long),
local: raceData.Circuit.Location.locality,
country: raceData.Circuit.Location.country
}
return {
season: year,
round: raceData.round,
wikiUrl: raceData.url,
raceName: raceData.raceName,
circuit: circuit,
date: new Date(raceData.date),
time: raceData.time,
firstPractice: raceData.FirstPractice?.date ? raceData.FirstPractice.date : null,
secondPractice: raceData.SecondPractice?.date ? raceData.SecondPractice.date : null,
thirdPractice: raceData.ThirdPractice?.date ? raceData.ThirdPractice.date : null,
qualifying: raceData.Qualifying?.date ? raceData.Qualifying.date : null,
};
});
Cache.set(key, seasonData);
return seasonData;
}
}