Maak een bestand met de naam “package.json“, met de onderstaande content:
{
"name": "csv-lat-long",
"version": "1.0.0",
"description": "A script that reads a CSV file, fetches the lat and long using ApiCheck API and appends to each row",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"fast-csv": "^4.3.6",
"request": "^2.88.2"
}
}
Zorg dat je node hebt geinstalleerd, en dat het npm commando beschikbaar is in je terminal.
Navigeer in je terminal naar de locatie waat je package.json bestaand staat, en voer het commando “npm install” uit.
Zodra alle modules geïnstalleerd zijn maak je een nieuw bestand met de naam “index.js“. Voeg hieraan onderstaande code toe.
Pas de volgende regels aan:
- Regel 9: defineer de naam het input csv bestand
- Regel 15 t/m 17: defineer de namen van de kolommen waar de postcode, huisnummer en eventueel toevoeging in staan.
- Regel 23: Pas YOUR_API_KEY aan naar je eigen api-key
- Regel 52: Defineer de naam van jou output csv bestand (dit kan ook de naam zijn van je input csv bestand, en zal dan overschreven worden)
const fs = require('fs');
const fastCsv = require('fast-csv');
const request = require("request");
let outputRow = [];
startRead();
function startRead() {
const stream = fs.createReadStream('file.csv')
.on('error', (error) => {
console.log(`An error occurred while reading the file: ${error}`);
})
.pipe(fastCsv.parse({ headers: true, delimiter: ';' }))
.on('data', async (row) => {
const postalCode = row.Postcode;
const houseNumber = row.Huisnummer.replace(/[^0-9.]/g, '');
const numberAddition = row.Toevoeging.replace(/[^0-9.]/g, '');
if (postalCode != undefined || houseNumber != undefined) {
const options = {
url: `https://api.apicheck.nl/lookup/v1/address/nl?postalcode=${postalCode}&number=${houseNumber}&numberAddition=${numberAddition}`,
headers: {
'X-api-key': 'YOUR_API_KEY'
},
json: true
};
stream.pause();
request(options, (err, res, body) => {
if (err) {
console.log(`An error occurred while making the API request: ${err}`);
} else {
if (res.statusCode !== 200) {
console.log(`An error occurred with status code: ${res.statusCode} and message : ${JSON.stringify(body)}`);
row.latitude = "";
row.longitude = "";
outputRow.push(row);
} else {
row.latitude = body.data.Location.Coordinates.latitude;
row.longitude = body.data.Location.Coordinates.longitude;
outputRow.push(row);
}
}
stream.resume();
});
} else {
console.log(`Skipping the row as either postalCode or houseNumber is missing`)
}
})
.on('end', () => {
console.log('CSV file successfully processed');
const writeStream = fs.createWriteStream('file.csv', { flags: 'w' });
fastCsv.writeToStream(writeStream, outputRow, { headers: true, delimiter: ';' }).on('finish', () => {
console.log('CSV file successfully written');
writeStream.end();
});
});
}
Voer het script uit met het commando “npm index.js”