Skip to content

Instantly share code, notes, and snippets.

@Thomas-X
Created February 14, 2021 14:39
Show Gist options
  • Save Thomas-X/d59e4061ebb4cdc22d07985eb418860a to your computer and use it in GitHub Desktop.
Save Thomas-X/d59e4061ebb4cdc22d07985eb418860a to your computer and use it in GitHub Desktop.
estimates your non-existant chances of getting a house in the netherlands as a normal, average, adult working person
const fetch = require("node-fetch2")
const datefns = require("date-fns");
fetch("https://www.woningnetalmere.nl/webapi/verantwoording/verantwoordingv2?vanaf=10-02-2020", {
"headers": {
"accept": "*/*",
"accept-language": "nl-NL,nl;q=0.9,en-US;q=0.8,en;q=0.7,af;q=0.6",
"content-type": "application/json; charset=utf-8",
"sec-ch-ua": "\"Chromium\";v=\"88\", \"Google Chrome\";v=\"88\", \";Not A Brand\";v=\"99\"",
"sec-ch-ua-mobile": "?0",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"x-requested-with": "XMLHttpRequest",
},
"referrer": "https://www.woningnetalmere.nl/Verhuurd",
"referrerPolicy": "strict-origin-when-cross-origin",
"body": null,
"method": "GET",
"mode": "cors"
})
.then(x =>
x.json().then(f => {
const verantwoordingen = f["Verantwoordingen"]
// Woning
// {
// Adrestekst: 'Wagenmakerbaan 9 -H',
// Woonplaats: 'Almere',
// Wijk: 'Wijk 02 Almere Stad',
// NettoHuur: 633,
// VestigingEigenaar: 'De Alliantie Almere',
// Eenheiddetailsoort: 'Portiekflat',
// Doelgroep: 'Jongeren',
// KamersAantal: 2,
// AantalReacties: 260,
// ToewijzingsDatum: '08-02-2021',
// PublicatieBeginddatum: '04-12-2020',
// Verantwoording: 'De woning is verhuurd aan de 1e kandidaat (27-07-2011)'
// },
const sums = {}
const avgs = {}
const finishedObj = {
verantwoording: []
}
for (const woning of verantwoordingen) {
sums.reacties = woning.AantalReacties;
let str;
if (woning.Verantwoording.indexOf(" kandidaat") != -1) {
let idx = woning.Verantwoording.indexOf(" kandidaat");
str = woning.Verantwoording.substr(idx - 3, 2);
}
let type;
if (woning.Verantwoording.includes("bemiddeling")) {
type = "bemiddeling"
} else if (woning.Verantwoording.includes("Loting")) {
type = "loting"
} else {
type = "fair"
}
finishedObj["verantwoording"].push(
{
kandidaat: str === undefined ? 0 : Number(str.trim()),
type,
dagenTotToewijzing: datefns.differenceInDays(
new Date(woning.ToewijzingsDatum.split('-').reverse()), new Date(woning.PublicatieBeginddatum.split('-').reverse())
),
AantalReacties: woning.AantalReacties
}
)
}
let sumDagenTotToewijzing = 0;
let sumBemiddeling = 0;
let sumKandidaat = 0;
let sumReacties = 0;
let sumReactiesLoting = 0;
for (const entry of finishedObj["verantwoording"]) {
sumKandidaat += entry.kandidaat;
if (typeof entry.AantalReacties === "number" && !isNaN(entry.AantalReacties) && entry.type === "fair") {
sumReacties += Number(entry.AantalReacties)
} else if (typeof entry.AantalReacties === "number" && !isNaN(entry.AantalReacties) && (entry.type === "fair" || entry.type === "loting")){
sumReactiesLoting += Number(entry.AantalReacties)
}
sumBemiddeling += entry.type === "bemiddeling" ? 1 : 0
if (typeof entry.dagenTotToewijzing === "number" && !isNaN(entry.dagenTotToewijzing)) {
sumDagenTotToewijzing += entry.dagenTotToewijzing < 0 ? 0 : entry.dagenTotToewijzing;
if (isNaN(sumDagenTotToewijzing)) {
throw entry;
}
} else {
console.log(entry)
}
}
let x = (plek) => {
let total = 0;
for (const entry of finishedObj["verantwoording"]) {
if (entry.kandidaat === plek) {
total++
}
}
return total;
}
let l = finishedObj["verantwoording"].length
let o = l - sumBemiddeling;
console.log(`
Gemiddelde dagen tot toewijzing: ${(sumDagenTotToewijzing / l).toFixed(2)}
Aantal bemiddeling (uit ${l}): ${sumBemiddeling} (${((sumBemiddeling / l) * 100).toFixed(2)}%)
Gemiddelde kandidaat winnaar (uit ${l - sumBemiddeling}): ${sumKandidaat / (l - sumBemiddeling)}
Gemiddeld aantal reacties per woning: ${sumReacties / o}
Gemiddeld aantal reacties per woning (inclusief loting): ${sumReactiesLoting / o}
1ste plek winnaar kans: ${(( x(1) / o) * 100).toFixed(2)}%
2de plek winnaar kans: ${(( x(2) / o) * 100).toFixed(2)}%
3de plek winnaar kans: ${(( x(3) / o) * 100).toFixed(2)}%
4de plek winnaar kans: ${(( x(4) / o) * 100).toFixed(2)}%
5de plek winnaar kans: ${(( x(5) / o) * 100).toFixed(2)}%
6de plek winnaar kans: ${(( x(6) / o) * 100).toFixed(2)}%
7de plek winnaar kans: ${(( x(7) / o) * 100).toFixed(2)}%
8de plek winnaar kans: ${(( x(8) / o) * 100).toFixed(2)}%
9de plek winnaar kans: ${(( x(9) / o) * 100).toFixed(2)}%
10de plek winnaar kans: ${(( x(10) / o) * 100).toFixed(2)}%
11de plek winnaar kans: ${(( x(11) / o) * 100).toFixed(2)}%
12de plek winnaar kans: ${(( x(12) / o) * 100).toFixed(2)}%
13de plek winnaar kans: ${(( x(13) / o) * 100).toFixed(2)}%
14de plek winnaar kans: ${(( x(14) / o) * 100).toFixed(2)}%
15de plek winnaar kans: ${(( x(15) / o) * 100).toFixed(2)}%
`)
})
).catch(err => console.log(err))
@MagicanFury
Copy link

Kun je een console log toevoegen aan de git?

@MagicanFury
Copy link

Nvm heb 'm al :) Leuke code! ben zelf ook bezig met de api

@Thomas-X
Copy link
Author

Thomas-X commented Oct 4, 2022

Nvm heb 'm al :) Leuke code! ben zelf ook bezig met de api

@MagicanFury Je kan de code altijd copy-pasten in https://npm.runkit.com/playground en daarin runnen, hoef je niet lokaal packages te installeren ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment