76 lines
2.3 KiB
JavaScript
76 lines
2.3 KiB
JavaScript
const express = require('express');
|
|
const app = express();
|
|
const PORT = 3000;
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const GeoJsonGeometriesLookup = require("geojson-geometries-lookup");
|
|
|
|
const lookupTable = require('./rep-lookup');
|
|
|
|
app.use(express.static(path.join(__dirname, 'public')));
|
|
|
|
app.use('/rep', async (req, res) => {
|
|
const lat = parseFloat(req.query.lat);
|
|
const lon = parseFloat(req.query.lon);
|
|
|
|
if (!lat || !lon) return
|
|
|
|
const f = fs.readFileSync(path.join(__dirname, 'public/circonscriptions-legislatives.json'), 'utf-8');
|
|
const data = JSON.parse(f)
|
|
|
|
gl = new GeoJsonGeometriesLookup(data);
|
|
|
|
const pos = {
|
|
type: "Point",
|
|
coordinates: [lon, lat],
|
|
};
|
|
|
|
const code = gl.getContainers(pos).features[0]?.properties["REF"]
|
|
|
|
const repFile = fs.readFileSync(path.join(__dirname, `public/reps/${lookupTable[code]}.json`), 'utf-8');
|
|
|
|
res.end(repFile);
|
|
|
|
/**
|
|
* GENERATE INITIAL DATA
|
|
* Basically a bad crawler made in an hour
|
|
*/
|
|
|
|
// const output = {}
|
|
|
|
// for (let i = 500; i < lookupTable.length; i++) {
|
|
// const repId = lookupTable[i];
|
|
// console.log(repId)
|
|
|
|
// const response = await fetch(`https://www.assemblee-nationale.fr/dyn/deputes/${repId}`);
|
|
// const body = await response.text()
|
|
|
|
// const depRegex = new RegExp(/(data-content=\"\/dyn\/carte\/departement\/)([A-Za-z0-9]{2,})/g)
|
|
// const cirRegex = new RegExp(/(\?circonscriptionNumero=)([A-Za-z0-9]{1,})/g)
|
|
|
|
// const depString = body.match(depRegex)?.[0]?.split('departement/')?.[1]
|
|
// const cirString = body.match(cirRegex)?.[0]?.split('circonscriptionNumero=')?.[1]
|
|
|
|
// if (!depString || !cirString) {
|
|
// output[`WRONG-WRONG`] = repId
|
|
|
|
// return
|
|
// }
|
|
|
|
// const depStringPad = String("0000" + depString)
|
|
// const cirStringPad = String("0000" + cirString)
|
|
|
|
// const rep = {
|
|
// departement: depStringPad.substring(depStringPad.length - 3),
|
|
// circo: cirStringPad.substring(cirStringPad.length - 2)
|
|
// }
|
|
|
|
// output[`${rep.departement}-${rep.circo}`] = repId
|
|
// }
|
|
|
|
// res.json(output);
|
|
})
|
|
|
|
app.listen(PORT, () => console.log(`Server listening on port: ${PORT}`));
|