const fs = require('fs');
const csv = require('csv-parser');
const axios = require('axios');
const { createObjectCsvWriter } = require('csv-writer');
console.time('ScriptExec');
let outputData = [];
const csvWriter = createObjectCsvWriter({path: 'output.csv'});
async function makeGraphQLRequest(apiUrl, query, variables) {
try {
const response = await axios.post(apiUrl, {
query: query,
variables: variables,
});
return response.data.data.price_trader_log
.map(entry => entry.values[entry.values.length - 1].price_trader_new);
} catch (error) {
setTimeout(() => makeGraphQLRequest(), 2000);
}
}
const apiUrl = 'https://wiki.cs.money/api/graphql';
const query = `
query price_trader_log($name_ids: [Int!]!) {
price_trader_log(input: {name_ids: $name_ids}) {
name_id
values {
price_trader_new
}
}
}
`;
fs.createReadStream('variables.csv')
.pipe(csv()).on('data', async (row) => {
const nameIds = row.name_ids.split(',').map(id => parseInt(id.trim()));
const scrapInfo = [];
console.log(nameIds);
for (const pickId of nameIds) {
console.log(pickId);
if ( pickId > 0 ) {
const variables = { name_ids: pickId };
makeGraphQLRequest(apiUrl, query, variables)
.then(result => scrapInfo.push(result)) //console.log(result) is Promise {<pending>}
.catch(err => console.error(err));
} else {
scrapInfo.push(pickId);
}
}
outputData.push( {title: row.title, prices: scrapInfo} );
console.log(outputData);
}).on('end', () => { // this saver doesn`t work
csvWriter.writeRecords(outputData)
.then(() => console.log('Data sucsesfully writed in output.csv'))
.catch(err => console.error('ERROR in wrhite csv process:', err))
console.timeEnd('ScriptExec');
});
Example of variables.csv: title,name_ids usp-s|whiteout,"1087302,1086843,1086836,1087237,1087212" usp-s|targetacquired,"1083799,1083764,1083692,1083800,1084013" usp-s|killconfirmed,"942,896,1332,7411,1042" usp-s|killconfirmed_stattrak,"13665,13822,2429,587,2595" usp-s|printstream,"1092369,1092414,1092339,1092498,1092346" usp-s|printstream_stattrak,"1092439,1092295,1092405,1092442,1092422" usp-s|orangeanolis,"1087219,1087263,1087249,0,0" usp-s|darkwater,"0,1581,10527,0,0"
I try await makeGraphQLRequest and block .then().catch()