Skip to content

Commit

Permalink
feat(court URLs): update replacements, heuristics, URLs
Browse files Browse the repository at this point in the history
  • Loading branch information
chohner committed Jan 25, 2024
1 parent 5cd33c8 commit 4860f74
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 45 deletions.
57 changes: 44 additions & 13 deletions app/services/gerichtsfinder/checkURLs.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
import fs from "node:fs";
import path from "node:path";
import { http, https } from "follow-redirects";
import { type FollowResponse, http, https } from "follow-redirects";
import pMap from "p-map";
import { getEncrypted } from "./encryptedStorage";
import type { GerbehFile } from "./convertJsonDataTable";
import { normalizeURL } from "../../util/strings";
import { type IncomingMessage } from "node:http";

const manualReplacements = {
const manualReplacements: Record<string, string> = {
"www.amtsgericht-straubing.de":
"https://www.justiz.bayern.de/gerichte-und-behoerden/amtsgerichte/straubing/",
"www.saarland.de/amtsgericht_saarlouis.htm":
"https://www.saarland.de/agsls/DE/home/home_node.html",
"www.justiz.bayern.de/gericht/ag-aoe":
"https://www.justiz.bayern.de/gerichte-und-behoerden/amtsgerichte/altoetting/",
"https://ordentliche-gerichtsbarkeit.hessen.de/AG-Koenigstein":
"https://ordentliche-gerichtsbarkeit.hessen.de/landgerichtsbezirk-frankfurt-am-main/amtsgericht-koenigstein-im-taunus",
};

const OUTFILE = path.resolve(
Expand All @@ -25,19 +32,48 @@ function allCourtURLs() {
return Object.values(gerbehDb).map((court) => court?.URL1 ?? "");
}

function warnIfNot200(
intialUrl: string,
response: IncomingMessage & FollowResponse,
) {
if (response.statusCode && response.statusCode !== 200)
console.warn(
`Warning: ${intialUrl} was forwarded to ${response.responseUrl} with statuscode ${response.statusCode}`,
);
}

function checkUrl(urlString: string) {
// First follow https, then follow http
// 1. try manual replacement or https, 2. try http, 3. try strip www. subdomain (for example www.ag-badliebenwerda.brandenburg.de)
return new Promise<[string, string]>((resolve) =>
https
.get(normalizeURL(urlString, "https"), (response) => {
resolve([urlString, response.responseUrl]);
})
.get(
manualReplacements[urlString] ?? normalizeURL(urlString, "https"),
(response) => {
warnIfNot200(urlString, response);
resolve([urlString, response.responseUrl]);
},
)
.on("error", () => {
http
.get(normalizeURL(urlString, "http"), (response) => {
warnIfNot200(urlString, response);
resolve([urlString, response.responseUrl]);
})
.on("error", () => resolve([urlString, ""]));
.on("error", () => {
https
.get(
normalizeURL(urlString.replace("www.", ""), "https"),
(response) => {
warnIfNot200(urlString, response);
resolve([urlString, response.responseUrl]);
},
)
.on("error", () => {
if (urlString)
console.error(`No valid redirect found for ${urlString}`);
resolve([urlString, ""]);
});
});
}),
);
}
Expand All @@ -46,12 +82,7 @@ async function checkAllURLS() {
const urls = allCourtURLs();
const uniqueURLs = Array.from(new Set(urls));
console.log(`Checking a total of ${uniqueURLs.length} unique URLs...`);
const checkedURLs = await pMap(uniqueURLs, checkUrl, { concurrency });
const urlMap = Object.fromEntries(checkedURLs);
for (const [url, correction] of Object.entries(manualReplacements)) {
urlMap[url] = correction;
}
return urlMap;
return Object.fromEntries(await pMap(uniqueURLs, checkUrl, { concurrency }));
}

async function writeURLMap() {
Expand Down
64 changes: 32 additions & 32 deletions app/services/gerichtsfinder/data/sanitizedURLs.json
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@
"https://ag-seligenstadt-justiz.hessen.de": "https://ordentliche-gerichtsbarkeit.hessen.de/landgerichtsbezirk-darmstadt/amtsgericht-seligenstadt",
"https://ag-badhomburg-justiz.hessen.de": "https://ordentliche-gerichtsbarkeit.hessen.de/landgerichtsbezirk-frankfurt-am-main/amtsgericht-bad-homburg-v-d-hoehe",
"https://ag-frankfurt-justiz.hessen.de": "https://ordentliche-gerichtsbarkeit.hessen.de/landgerichtsbezirk-frankfurt-am-main/amtsgericht-frankfurt-am-main",
"https://ordentliche-gerichtsbarkeit.hessen.de/AG-Koenigstein": "https://ordentliche-gerichtsbarkeit.hessen.de/AG-Koenigstein",
"https://ordentliche-gerichtsbarkeit.hessen.de/AG-Koenigstein": "https://ordentliche-gerichtsbarkeit.hessen.de/landgerichtsbezirk-frankfurt-am-main/amtsgericht-koenigstein-im-taunus",
"https://ag-badhersfeld-justiz.hessen.de": "https://ordentliche-gerichtsbarkeit.hessen.de/landgerichtsbezirk-fulda/amtsgericht-bad-hersfeld",
"https://ag-fulda-justiz.hessen.de": "https://ordentliche-gerichtsbarkeit.hessen.de/landgerichtsbezirk-fulda/amtsgericht-fulda",
"https://ag-huenfeld-justiz.hessen.de": "https://ordentliche-gerichtsbarkeit.hessen.de/landgerichtsbezirk-fulda/amtsgericht-huenfeld",
Expand Down Expand Up @@ -282,50 +282,50 @@
"https://ag-idstein-justiz.hessen.de": "https://ordentliche-gerichtsbarkeit.hessen.de/landgerichtsbezirk-wiesbaden/amtsgericht-idstein",
"https://ag-ruedesheim-justiz.hessen.de": "https://ordentliche-gerichtsbarkeit.hessen.de/landgerichtsbezirk-wiesbaden/amtsgericht-ruedesheim-am-rhein",
"https://ag-wiesbaden-justiz.hessen.de": "https://ordentliche-gerichtsbarkeit.hessen.de/landgerichtsbezirk-wiesbaden/amtsgericht-wiesbaden",
"www.agkh.justiz.rlp.de": "https://agkh.justiz.rlp.de/de/startseite/",
"www.agio.justiz.rlp.de": "https://agio.justiz.rlp.de/de/startseite/",
"www.agkh.justiz.rlp.de": "https://agkh.justiz.rlp.de/",
"www.agio.justiz.rlp.de": "https://agio.justiz.rlp.de/",
"www.agsim.justiz.rlp.de": "https://agsim.justiz.rlp.de/de/startseite/",
"www.agsob.justiz.rlp.de": "https://agsob.justiz.rlp.de/de/startseite/",
"www.agak.justiz.rlp.de": "https://agak.justiz.rlp.de/de/startseite/",
"www.agand.justiz.rlp.de": "https://agand.justiz.rlp.de/de/startseite/",
"www.agand.justiz.rlp.de": "https://agand.justiz.rlp.de/",
"www.agaw.justiz.rlp.de": "https://agaw.justiz.rlp.de/de/startseite/",
"www.agbd.justiz.rlp.de": "https://agbd.justiz.rlp.de/de/startseite/",
"www.agcoc.justiz.rlp.de": "https://agcoc.justiz.rlp.de/de/startseite/",
"www.agdz.justiz.rlp.de": "https://agdz.justiz.rlp.de/de/startseite/",
"www.agbd.justiz.rlp.de": "https://agbd.justiz.rlp.de/",
"www.agcoc.justiz.rlp.de": "https://agcoc.justiz.rlp.de/",
"www.agdz.justiz.rlp.de": "https://agdz.justiz.rlp.de/",
"www.agko.justiz.rlp.de": "https://agko.justiz.rlp.de/de/startseite/",
"www.aglah.justiz.rlp.de": "https://aglah.justiz.rlp.de/de/startseite/",
"www.aglin.justiz.rlp.de": "https://aglin.justiz.rlp.de/de/startseite/",
"www.agmy.justiz.rlp.de": "https://agmy.justiz.rlp.de/de/startseite/",
"www.aglin.justiz.rlp.de": "https://aglin.justiz.rlp.de/",
"www.agmy.justiz.rlp.de": "https://agmy.justiz.rlp.de/",
"www.agmon.justiz.rlp.de": "https://agmon.justiz.rlp.de/de/startseite/",
"www.agnr.justiz.rlp.de": "https://agnr.justiz.rlp.de/de/startseite/",
"www.aggoa.justiz.rlp.de": "https://aggoa.justiz.rlp.de/de/startseite/",
"www.agsin.justiz.rlp.de": "https://agsin.justiz.rlp.de/de/startseite/",
"www.agwes.justiz.rlp.de": "https://agwes.justiz.rlp.de/de/startseite/",
"www.agaz.justiz.rlp.de": "https://agaz.justiz.rlp.de/de/startseite/",
"www.aggoa.justiz.rlp.de": "https://aggoa.justiz.rlp.de/",
"www.agsin.justiz.rlp.de": "https://agsin.justiz.rlp.de/",
"www.agwes.justiz.rlp.de": "https://agwes.justiz.rlp.de/",
"www.agaz.justiz.rlp.de": "https://agaz.justiz.rlp.de/",
"www.agbi.justiz.rlp.de": "https://agbi.justiz.rlp.de/de/startseite/",
"www.agmz.justiz.rlp.de": "https://agmz.justiz.rlp.de/de/startseite/",
"www.agwo.justiz.rlp.de": "https://agwo.justiz.rlp.de/de/startseite/",
"www.agber.justiz.rlp.de": "https://agber.justiz.rlp.de/de/startseite/",
"www.agbit.justiz.rlp.de": "https://agbit.justiz.rlp.de/de/startseite/",
"www.agdau.justiz.rlp.de": "https://agdau.justiz.rlp.de/de/startseite/",
"www.agher.justiz.rlp.de": "https://agher.justiz.rlp.de/de/startseite/",
"www.agpru.justiz.rlp.de": "https://agpru.justiz.rlp.de/de/startseite/",
"www.agsaa.justiz.rlp.de": "https://agsaa.justiz.rlp.de/de/startseite/",
"www.agtr.justiz.rlp.de": "https://agtr.justiz.rlp.de/de/startseite/",
"www.agwil.justiz.rlp.de": "https://agwil.justiz.rlp.de/de/startseite/",
"www.agber.justiz.rlp.de": "https://agber.justiz.rlp.de/",
"www.agbit.justiz.rlp.de": "https://agbit.justiz.rlp.de/",
"www.agdau.justiz.rlp.de": "https://agdau.justiz.rlp.de/",
"www.agher.justiz.rlp.de": "https://agher.justiz.rlp.de/",
"www.agpru.justiz.rlp.de": "https://agpru.justiz.rlp.de/",
"www.agsaa.justiz.rlp.de": "https://agsaa.justiz.rlp.de/",
"www.agtr.justiz.rlp.de": "https://agtr.justiz.rlp.de/",
"www.agwil.justiz.rlp.de": "https://agwil.justiz.rlp.de/",
"www.agduw.justiz.rlp.de": "https://agduw.justiz.rlp.de/de/startseite/",
"www.agft.justiz.rlp.de": "https://agft.justiz.rlp.de/de/startseite/",
"www.aggru.justiz.rlp.de": "https://aggru.justiz.rlp.de/de/startseite/",
"www.aglu.justiz.rlp.de": "https://aglu.justiz.rlp.de/de/startseite/",
"www.aggru.justiz.rlp.de": "https://aggru.justiz.rlp.de/",
"www.aglu.justiz.rlp.de": "https://aglu.justiz.rlp.de/",
"www.agnw.justiz.rlp.de": "https://agnw.justiz.rlp.de/de/startseite/",
"www.agsp.justiz.rlp.de": "https://agsp.justiz.rlp.de/de/startseite/",
"www.agkl.justiz.rlp.de": "https://agkl.justiz.rlp.de/de/startseite/",
"www.agkus.justiz.rlp.de": "https://agkus.justiz.rlp.de/de/startseite/",
"www.agro.justiz.rlp.de": "https://agro.justiz.rlp.de/de/startseite/",
"www.agger.justiz.rlp.de": "https://agger.justiz.rlp.de/de/startseite/",
"www.agkan.justiz.rlp.de": "https://agkan.justiz.rlp.de/de/startseite/",
"www.agld.justiz.rlp.de": "https://agld.justiz.rlp.de/de/startseite/",
"www.agbbz.justiz.rlp.de": "https://agbbz.justiz.rlp.de/de/startseite/",
"www.agkl.justiz.rlp.de": "https://agkl.justiz.rlp.de/",
"www.agkus.justiz.rlp.de": "https://agkus.justiz.rlp.de/",
"www.agro.justiz.rlp.de": "https://agro.justiz.rlp.de/",
"www.agger.justiz.rlp.de": "https://agger.justiz.rlp.de/",
"www.agkan.justiz.rlp.de": "https://agkan.justiz.rlp.de/",
"www.agld.justiz.rlp.de": "https://agld.justiz.rlp.de/",
"www.agbbz.justiz.rlp.de": "https://agbbz.justiz.rlp.de/",
"www.aglst.justiz.rlp.de": "https://aglst.justiz.rlp.de/de/startseite/",
"www.agps.justiz.rlp.de": "https://agps.justiz.rlp.de/de/startseite/",
"www.agzw.justiz.rlp.de": "https://agzw.justiz.rlp.de/de/startseite/",
Expand Down Expand Up @@ -487,7 +487,7 @@
"www.justiz.bayern.de/gericht/ag/wor/": "https://www.justiz.bayern.de/gerichte-und-behoerden/amtsgerichte/wolfratshausen/",
"www.amtsgericht-freyung.de": "https://www.justiz.bayern.de/gerichte-und-behoerden/amtsgerichte/freyung/",
"www.justiz.bayern.de/gericht/ag/pa": "https://www.justiz.bayern.de/gerichte-und-behoerden/amtsgerichte/passau/",
"www.justiz.bayern.de/gericht/ag-aoe": "https://www.justiz.bayern.de/gericht/ag-aoe/",
"www.justiz.bayern.de/gericht/ag-aoe": "https://www.justiz.bayern.de/gerichte-und-behoerden/amtsgerichte/altoetting/",
"www.justiz.bayern.de/gericht/ag/lf/": "https://www.justiz.bayern.de/gerichte-und-behoerden/amtsgerichte/laufen/",
"www.justiz.bayern.de/gericht/ag/mue/": "https://www.justiz.bayern.de/gerichte-und-behoerden/amtsgerichte/muehldorf-am-inn/",
"www.justiz.bayern.de/gericht/ag/ro/": "https://www.justiz.bayern.de/gerichte-und-behoerden/amtsgerichte/rosenheim/",
Expand All @@ -514,7 +514,7 @@
"www.ag-nk.saarland.de": "https://www.saarland.de/agnk/DE/home/home_node.html",
"www.ag-otw.saarland.de": "https://www.saarland.de/agotw/DE/home/home_node.html",
"www.ag-sb.saarland.de": "https://www.saarland.de/agsb/DE/home/home_node.html",
"www.saarland.de/amtsgericht_saarlouis.htm": "https://www.saarland.de/amtsgericht_saarlouis.htm",
"www.saarland.de/amtsgericht_saarlouis.htm": "https://www.saarland.de/agsls/DE/home/home_node.html",
"www.ag-igb.saarland.de": "https://www.saarland.de/agigb/DE/home/home_node.html",
"www.ag-wnd.saarland.de": "https://www.saarland.de/agwnd/DE/home/home_node.html",
"www.ag-vk.saarland.de": "https://www.saarland.de/agvk/DE/home/home_node.html",
Expand Down

0 comments on commit 4860f74

Please sign in to comment.