Skip to content

Commit 4deff26

Browse files
committed
promisified the functions
1 parent cce61d5 commit 4deff26

File tree

5 files changed

+121
-103
lines changed

5 files changed

+121
-103
lines changed

src/links/links.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ interface staticLinks {
44
}
55

66
interface dynamicLinks {
7-
driverStanding_1: string
8-
driverStanding_2: string
7+
driverStandings_1: string
8+
driverStandings_2: string
9+
constructorStandings_1: string
10+
constructorStandings_2: string
911
}
1012

1113
export const staticLinks: staticLinks = {
@@ -14,6 +16,8 @@ export const staticLinks: staticLinks = {
1416
}
1517

1618
export const dynamicLinks: dynamicLinks = {
17-
driverStanding_1: "https://www.formula1.com/en/results.html",
18-
driverStanding_2: "drivers.html"
19+
driverStandings_1: "https://www.formula1.com/en/results.html",
20+
driverStandings_2: "drivers.html",
21+
constructorStandings_1: "https://www.formula1.com/en/results.html",
22+
constructorStandings_2: "team.html"
1923
}

src/scraper/driver-data.ts

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,36 +12,41 @@ interface drivers {
1212
driverImage: string | undefined
1313
}
1414

15-
export function getDriverData() {
15+
export const getDriverData = (): Promise<drivers[]> => {
1616

17-
let driversArray: drivers[] = []
17+
let drivers: drivers[] = []
1818

19-
axios(staticLinks.drivers).then(response => {
20-
const html = response.data
21-
const $ = cheerio.load(html)
19+
return new Promise((resolve, reject) => {
20+
axios(staticLinks.drivers)
21+
.then(response => {
22+
const html = response.data
23+
const $ = cheerio.load(html)
2224

23-
$('fieldset').each(
24-
function () {
25-
const firstName: string = $(this).find('.container > div:nth-child(1) > div:nth-child(1) > span:nth-child(1)').text().trim()
26-
const secondName: string = $(this).find('.container > div:nth-child(1) > div:nth-child(1) > span:nth-child(2)').text().trim()
27-
const team: string = $(this).find(' p:nth-child(3)').text()
28-
const rank: number = parseInt($(this).find('.rank').text())
29-
const points: number = parseInt($(this).find('.points > div:nth-child(1)').text())
30-
const nationalityImage: string | undefined = $(this).find('.container > .row.justify-content-between.align-items-center.listing-item--head > .col-xs-4.country-flag > picture:nth-child(1) > img:nth-child(2)').attr('data-src')
31-
const driverImage: string | undefined = $(this).find(' div:nth-child(4) > picture:nth-child(1) > img:nth-child(2)').attr('data-src')
25+
$('fieldset').each(
26+
function () {
27+
const firstName: string = $(this).find('.container > div:nth-child(1) > div:nth-child(1) > span:nth-child(1)').text().trim()
28+
const secondName: string = $(this).find('.container > div:nth-child(1) > div:nth-child(1) > span:nth-child(2)').text().trim()
29+
const team: string = $(this).find(' p:nth-child(3)').text()
30+
const rank: number = parseInt($(this).find('.rank').text())
31+
const points: number = parseInt($(this).find('.points > div:nth-child(1)').text())
32+
const nationalityImage: string | undefined = $(this).find('.container > .row.justify-content-between.align-items-center.listing-item--head > .col-xs-4.country-flag > picture:nth-child(1) > img:nth-child(2)').attr('data-src')
33+
const driverImage: string | undefined = $(this).find(' div:nth-child(4) > picture:nth-child(1) > img:nth-child(2)').attr('data-src')
3234

33-
if (firstName.length !== 0 && secondName.length !== 0 && team.length !== 0 && rank !== NaN && points !== NaN) {
34-
const driversObj: drivers = {
35-
name: firstName.concat(" ", secondName),
36-
team,
37-
rank,
38-
points,
39-
nationalityImage,
40-
driverImage
41-
}
42-
driversArray.push(driversObj)
43-
}
35+
if (firstName.length !== 0 && secondName.length !== 0 && team.length !== 0 && rank !== NaN && points !== NaN) {
36+
const driver: drivers = {
37+
name: firstName.concat(" ", secondName),
38+
team,
39+
rank,
40+
points,
41+
nationalityImage,
42+
driverImage
43+
}
44+
drivers.push(driver)
45+
}
46+
})
47+
resolve(drivers)
48+
return Promise.all(drivers)
4449
})
45-
console.log(driversArray)
50+
.catch(err => { reject(err) })
4651
})
4752
}

src/scraper/driver-standings.ts

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -11,38 +11,43 @@ interface driverStanding {
1111
points: number
1212
}
1313

14-
export function getDriverStandings(year: number) {
15-
16-
let driverStandingArray: driverStanding[] = []
17-
18-
axios(`${dynamicLinks.driverStanding_1}/${year}/${dynamicLinks.driverStanding_2}`).then(
19-
response => {
20-
const html = response.data
21-
const $ = cheerio.load(html)
22-
//
23-
$('tr').each(
24-
function () {
25-
const position: number = parseInt($(this).find(' td:nth-child(2) ').text())
26-
27-
const firstName: string = $(this).find(' a.dark.bold.ArchiveLink > span:nth-child(1)').text()
28-
const lastName: string = $(this).find(' a.dark.bold.ArchiveLink > span:nth-child(2)').text()
29-
30-
const driver = firstName.concat(" ", lastName)
31-
const nationality: string = $(this).find(' td.dark.semi-bold.uppercase').text()
32-
const car: string = $(this).find('td:nth-child(5) > a.grey.semi-bold.uppercase.ArchiveLink').text()
33-
const points: number = parseInt($(this).find(' td:nth-child(6) ').text())
34-
35-
if (position !== NaN && points !== NaN && driver.length !== 0 && nationality.length !== 0 && car.length !== 0) {
36-
const driverStandingsObj: driverStanding = {
37-
position,
38-
driver,
39-
nationality,
40-
car,
41-
points
42-
}
43-
driverStandingArray.push(driverStandingsObj)
44-
}
14+
export const getDriverStandings = (year: number): Promise<driverStanding[]> => {
15+
16+
let driverStandings: driverStanding[] = []
17+
18+
return new Promise((resolve, reject) => {
19+
axios(`${dynamicLinks.driverStandings_1}/${year}/${dynamicLinks.driverStandings_2}`)
20+
.then(
21+
response => {
22+
const html = response.data
23+
const $ = cheerio.load(html)
24+
//
25+
$('tr').each(
26+
function () {
27+
const position: number = parseInt($(this).find(' td:nth-child(2) ').text())
28+
29+
const firstName: string = $(this).find(' a.dark.bold.ArchiveLink > span:nth-child(1)').text()
30+
const lastName: string = $(this).find(' a.dark.bold.ArchiveLink > span:nth-child(2)').text()
31+
32+
const driver = firstName.concat(" ", lastName)
33+
const nationality: string = $(this).find(' td.dark.semi-bold.uppercase').text()
34+
const car: string = $(this).find('td:nth-child(5) > a.grey.semi-bold.uppercase.ArchiveLink').text()
35+
const points: number = parseInt($(this).find(' td:nth-child(6) ').text())
36+
37+
if (position !== NaN && points !== NaN && driver.length !== 0 && nationality.length !== 0 && car.length !== 0) {
38+
const driverStanding: driverStanding = {
39+
position,
40+
driver,
41+
nationality,
42+
car,
43+
points
44+
}
45+
driverStandings.push(driverStanding)
46+
}
47+
})
48+
resolve(driverStandings)
49+
return Promise.all(driverStandings)
4550
})
46-
console.log(driverStandingArray)
47-
})
51+
.catch(err => { reject(err) })
52+
})
4853
}

src/scraper/team-data.ts

Lines changed: 43 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,43 +12,49 @@ interface teams {
1212
carImage: string | undefined
1313
}
1414

15-
export function getTeamsData() {
16-
17-
let teamsArray: teams[] = []
18-
19-
axios(staticLinks.teams).then(response => {
20-
const html = response.data
21-
const $ = cheerio.load(html)
22-
23-
$('fieldset').each(
24-
function () {
25-
const name: string = $(this).find(' div:nth-child(1) > .listing-info > .name.f1-bold--m > .f1-color--black').text()
26-
const points: number = parseInt($(this).find('.points > div:nth-child(1)').text())
27-
const rank: number = parseInt($(this).find('.rank').text())
28-
29-
const driver1_0: string = $(this).find(' div:nth-child(1) > div:nth-child(3) > div:nth-child(1) > div:nth-child(1) > span:nth-child(1)').text()
30-
const driver1_1: string = $(this).find(' div:nth-child(1) > div:nth-child(3) > div:nth-child(1) > div:nth-child(1) > span:nth-child(2)').text()
31-
const driver2_0: string = $(this).find('div:nth-child(1) > div:nth-child(3) > div:nth-child(2) > div:nth-child(1) > span:nth-child(1)').text()
32-
const driver2_1: string = $(this).find('div:nth-child(1) > div:nth-child(3) > div:nth-child(2) > div:nth-child(1) > span:nth-child(2)').text()
33-
const driver1 = driver1_0.concat(" ", driver1_1)
34-
const driver2 = driver2_0.concat(" ", driver2_1)
35-
const drivers: string[] = [driver1, driver2]
36-
37-
const carLogo: string | undefined = $(this).find('div:nth-child(1) > div:nth-child(2) > div:nth-child(2) > picture:nth-child(1) > img:nth-child(2)').attr('data-src')
38-
const carImage: string | undefined = $(this).find('div:nth-child(1) > div:nth-child(4) > picture:nth-child(1) > img:nth-child(5)').attr('data-src')
39-
40-
if (name.length !== 0 && points !== NaN && rank !== NaN) {
41-
const teamObj: teams = {
42-
name,
43-
drivers,
44-
points,
45-
rank,
46-
carLogo,
47-
carImage,
48-
}
49-
teamsArray.push(teamObj)
50-
}
15+
export const getTeamsData = (): Promise<teams[]> => {
16+
17+
let teams: teams[] = []
18+
19+
return new Promise((resolve, reject) => {
20+
axios(staticLinks.teams)
21+
.then(response => {
22+
const html = response.data
23+
const $ = cheerio.load(html)
24+
25+
$('fieldset').each(
26+
function () {
27+
const name: string = $(this).find(' div:nth-child(1) > .listing-info > .name.f1-bold--m > .f1-color--black').text()
28+
const points: number = parseInt($(this).find('.points > div:nth-child(1)').text())
29+
const rank: number = parseInt($(this).find('.rank').text())
30+
31+
const driver1_0: string = $(this).find(' div:nth-child(1) > div:nth-child(3) > div:nth-child(1) > div:nth-child(1) > span:nth-child(1)').text()
32+
const driver1_1: string = $(this).find(' div:nth-child(1) > div:nth-child(3) > div:nth-child(1) > div:nth-child(1) > span:nth-child(2)').text()
33+
const driver2_0: string = $(this).find('div:nth-child(1) > div:nth-child(3) > div:nth-child(2) > div:nth-child(1) > span:nth-child(1)').text()
34+
const driver2_1: string = $(this).find('div:nth-child(1) > div:nth-child(3) > div:nth-child(2) > div:nth-child(1) > span:nth-child(2)').text()
35+
const driver1 = driver1_0.concat(" ", driver1_1)
36+
const driver2 = driver2_0.concat(" ", driver2_1)
37+
const drivers: string[] = [driver1, driver2]
38+
39+
const carLogo: string | undefined = $(this).find('div:nth-child(1) > div:nth-child(2) > div:nth-child(2) > picture:nth-child(1) > img:nth-child(2)').attr('data-src')
40+
const carImage: string | undefined = $(this).find('div:nth-child(1) > div:nth-child(4) > picture:nth-child(1) > img:nth-child(5)').attr('data-src')
41+
42+
if (name.length !== 0 && points !== NaN && rank !== NaN) {
43+
const team: teams = {
44+
name,
45+
drivers,
46+
points,
47+
rank,
48+
carLogo,
49+
carImage,
50+
}
51+
teams.push(team)
52+
}
53+
})
54+
resolve(teams)
55+
return Promise.all(teams)
5156
})
52-
console.log(teamsArray)
57+
.catch(err => { reject(err) })
5358
})
59+
5460
}

src/server.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,4 @@ import { getDriverData } from "./scraper/driver-data";
22
import { getTeamsData } from "./scraper/team-data";
33
import { getDriverStandings } from "./scraper/driver-standings";
44

5-
// getDriverData();
6-
// getTeamsData()
7-
// getDriverStandings(2022)
5+
export { getDriverData, getTeamsData, getDriverStandings }

0 commit comments

Comments
 (0)