-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.mjs
30 lines (22 loc) · 1.08 KB
/
index.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import { writeFileSync } from "fs";
import { csvDelimiter, fieldsToPick, limit, outputPath } from "./config.mjs";
import { pick } from "./utils/common.mjs";
import { fetchData } from "./utils/fetch.mjs";
import { createUrl } from "./utils/url-helper.mjs";
const flights = [];
let totalCount;
console.log("First request to estimate total count");
const response = await fetchData(createUrl(0));
totalCount = response.meta.totalCount;
console.log(`Total number of flights for this query is ${totalCount}`);
flights.push(...response.data);
const numberOfChunks = Math.ceil(totalCount / limit);
console.log(`Will try to retrieve remaining flights with ${numberOfChunks} more requests`);
for (let index = 1; index <= numberOfChunks; index++) {
const nextResponse = await fetchData(createUrl(index * limit));
flights.push(...nextResponse.data);
}
const pickedData = flights.map((f) => pick(f, ...fieldsToPick));
const csvData = pickedData.map((e) => Object.values(e).join(csvDelimiter)).join("\n");
writeFileSync(outputPath, csvData, { encoding: "utf-8" });
console.log(`Exported data to ${outputPath}`);