ceiba-scores/scripts/fetchData.js

68 lines
1.8 KiB
JavaScript
Raw Normal View History

2022-04-05 12:05:12 +02:00
import {createWriteStream, existsSync, mkdirSync} from 'fs';
2022-03-29 23:30:23 +02:00
import fs from "fs/promises";
2022-04-05 12:05:12 +02:00
import {pipeline} from 'stream';
import {promisify} from 'util'
const streamPipeline = promisify(pipeline);
2022-03-29 23:30:23 +02:00
const apiUrl = "https://admin.ceiba-conseil.com";
async function fetchJSONApi(path) {
const url = `${apiUrl}${path}`;
const options = {
method: "GET",
headers: {
"content-type": "application/json",
},
};
console.log(`fetchJSONApi: ${url}`);
const response = await fetch(url, options);
if (!response.ok) {
const errors = await response.json();
throw errors.errors[0].message;
}
return response.json();
}
2022-04-05 12:05:12 +02:00
async function fetchAsset(uuid) {
const url = `${apiUrl}/assets/${uuid}`;
return fetch(url)
}
2022-03-29 23:30:23 +02:00
async function fetchData() {
const fields = [
"*",
"translations.*",
"questions.sort",
"questions.questions_id.*",
"questions.questions_id.translations.*",
"questions.questions_id.answers.*",
"questions.questions_id.answers.answers_id.*",
"questions.questions_id.answers.answers_id.translations.*",
"results.*",
"results.results_id.*",
"results.results_id.translations.*",
];
const url = `/items/scores?${fields
.map((item) => `fields[]=${item}`)
.join("&")}`;
2022-04-05 12:05:12 +02:00
const data = (await fetchJSONApi(url)).data;
await fs.writeFile("./src/data.json", JSON.stringify(data), "utf8");
const folder = 'public/answers'
if (!existsSync(folder)) mkdirSync(folder);
for (const score of data) {
for (const question of score.questions) {
for (const answer of question.questions_id.answers) {
const uuid = answer.answers_id.image
if (uuid) {
const response = await fetchAsset(uuid)
await streamPipeline(response.body, createWriteStream(`${folder}/${uuid}.png`));
}
}
}
}
2022-03-29 23:30:23 +02:00
}
fetchData();