Skip to content

Instantly share code, notes, and snippets.

@livarb
Created April 26, 2023 11:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save livarb/f43ee4abdfdbbca668d4287bcea4f7f7 to your computer and use it in GitHub Desktop.
Save livarb/f43ee4abdfdbbca668d4287bcea4f7f7 to your computer and use it in GitHub Desktop.
<?php
header("Access-Control-Allow-Origin: *");
header('Content-Type: application/json; charset=utf-8');
$brregFylkeskommunerUrl = "https://data.brreg.no/enhetsregisteret/api/enheter?organisasjonsform=FYLK&size=10000";
$brregKommunerUrl = "https://data.brreg.no/enhetsregisteret/api/enheter?organisasjonsform=KOMM&size=10000";
$dataRaw = getHTTPCached($brregFylkeskommunerUrl);
$fylkeskommuner = json_decode($dataRaw["content"], true)["_embedded"]["enheter"];
$debug = array();
// Generere fylker ut frå fylkeskommuner
$fylker = array();
foreach ($fylkeskommuner as $fylkeskommune) {
// Dropp forhåndsregistreringar
if (strpos($fylkeskommune["navn"], "FORHÅNDSREGISTRERING") != null) continue;
$fylke = array();
$fylke["namn"] = str_replace(" FYLKESKOMMUNE", "", $fylkeskommune["navn"]);
$fylkesnr = substr($fylkeskommune["forretningsadresse"]["kommunenummer"], 0, 2);
if ($fylke["namn"] == "VIKEN") $fylkesnr = "30";
if ($fylke["namn"] == "AKERSHUS") $fylkesnr = "32";
$fylke["nr"] = $fylkesnr;
$fylker[] = $fylke;
}
// Legg til Oslo som fylke manuelt
$fylker[] = array("namn" => "OSLO", "nr" => "03");
// Sortere fylker alfabetisk på namn
usort($fylker, function ($fylke1, $fylke2) {
return $fylke1["namn"] <=> $fylke2["namn"];
});
// Hent kommuner
$dataRaw = getHTTPCached($brregKommunerUrl);
$kommuner = json_decode($dataRaw["content"], true)["_embedded"]["enheter"];
// Bygg opp hierarki
$kommunalSektor = array();
$kommunalSektorKort = array();
foreach ($fylker as $fylke) {
$kommunalSektor[$fylke["nr"]] = $fylke;
$kommunalSektor[$fylke["nr"]]["enheter"] = array();
$kommunalSektorKort[$fylke["nr"]] = $fylke;
$kommunalSektorKort[$fylke["nr"]]["enheter"] = array();
}
foreach ($fylkeskommuner as $fylkeskommune) {
// Dropp forhåndsregistreringar
if (strpos($fylkeskommune["navn"], "FORHÅNDSREGISTRERING") != null) continue;
// TODO: filtrere vekk eventuelle sletta enheter
$fylkesnr = substr($fylkeskommune["forretningsadresse"]["kommunenummer"], 0, 2);
// Manuell korrigering av Viken / Akershus som har forretningsadresse i Oslo
if ($fylkeskommune["organisasjonsnummer"] == "921693230") $fylkesnr = "30"; // Viken fylkeskommune - t.o.m. 2023
if ($fylkeskommune["organisasjonsnummer"] == "930580783") $fylkesnr = "32"; // Akershus fylkeskommune - f.o.m. 2024
$kommunalSektor[$fylkesnr]["enheter"][] = $fylkeskommune;
$kommunalSektorKort[$fylkesnr]["enheter"][] = $fylkeskommune["navn"];
}
foreach ($kommuner as $kommune) {
// Dropp forhåndsregistreringar
if (strpos($kommune["navn"], "FORHÅNDSREGISTRERING") != null) continue;
// TODO: filtrere vekk eventuelle sletta enheter
$fylkesnr = substr($kommune["forretningsadresse"]["kommunenummer"], 0, 2);
$kommunalSektor[$fylkesnr]["enheter"][] = $kommune;
$kommunalSektorKort[$fylkesnr]["enheter"][] = $kommune["navn"];
}
print(json_encode($kommunalSektor, JSON_PRETTY_PRINT));
// For debugging - kommenter ut så det berre er ei print-linje
// print(json_encode($kommunalSektorKort, JSON_PRETTY_PRINT));
// print(
// json_encode(
// array("debug" => $debug, "fylker" => $fylker, "kommunalSektorKort" => $kommunalSektorKort,
// "resten" => array_merge($kommunalSektor, $kommuner, $fylkeskommuner)),
// JSON_PRETTY_PRINT
// )
// );
/**
* NB1. Kommunar med samme namn
* Det er to tilfeller der to kommunar har samme namn.
* Pr. 25.04.2024 er det Våler og Herøy, jf. https://no.wikipedia.org/wiki/Norges_kommuner#Kommunene
*
* NB2. Endringar i fylkesnummer frå 2024
* https://www.regjeringen.no/no/tema/kommuner-og-regioner/kommunestruktur/nye-kommune-og-fylkesnummer-fra-1.-januar-2024/id2924701/
*
* NB3. Ikkje tatt høgde for å filtrere vekk gamle kommunar og fylkeskommunar. Antar org.nr. for enheter som opphøyrer frå 2024 blir liggande nokre dagar i Enhetsregisteret.
* TODO
*/
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment