@rapidthenerd/ergast-ts
Version:
Node wrapper for Ergast API
66 lines (53 loc) • 2.3 kB
text/typescript
import { LapsData } from "./interface/LapsData";
import axios from "axios";
import { CircuitData } from "./interface/CircuitData";
import { TimingsData } from "./interface/TimingsData";
import {Cache} from "./cache/cache";
export class Laps {
public async getForCurrentYear(raceNumber: number, lap: number): Promise<LapsData> {
return this.getFor(new Date().getFullYear(), raceNumber, lap);
}
public async getFor(year: number | string, raceNumber: number, lap: number): Promise<LapsData> {
const key = Cache.generateKey("laps", year, raceNumber, lap);
if (Cache.isEnabled() && Cache.isInCache(key)) {
return Cache.get(key);
}
const response = await axios.get(`https://ergast.com/api/f1/${year}/${raceNumber}/laps/${lap}.json`);
const responseData = response.data.MRData.RaceTable;
const racesData = responseData.Races[0];
const circuitData: CircuitData = {
season: racesData.season,
round: racesData.round,
name: racesData.Circuit.circuitName,
wikiUrl: racesData.Circuit.url,
id: racesData.Circuit.circuitId,
lat: parseFloat(racesData.Circuit.Location.lat),
long: parseFloat(racesData.Circuit.Location.long),
local: racesData.Circuit.Location.locality,
country: racesData.Circuit.Location.country,
};
const lapsData = racesData.Laps[0];
const timings: TimingsData[] = [];
for (let timing of lapsData.Timings) {
let time: TimingsData = {
driverId: timing.driverId,
position: parseInt(timing.position),
time: timing.time,
};
timings.push(time);
}
const laps: LapsData = {
season: year,
round: raceNumber,
wikiUrl: racesData.url,
raceName: racesData.raceName,
circuit: circuitData,
date: new Date(racesData.date),
time: racesData.time,
number: parseInt(lap.toString()),
timings: timings,
};
Cache.set(key, laps);
return laps;
}
}