danielhjerresen's picture
Upload 18 files
a6d7bb2 verified
Raw
History Blame Contribute Delete
2.06 kB
"""
cvr_api.py
----------
Module for fetching basic company information from the public CVR API (cvrapi.dk).
"""
import json
import contextlib
import urllib.request as request
# --- Helper: Determine company status from CVR API fields ---
def _derive_status(data: dict) -> str:
"""
Computes a clean human-readable company status based on CVR API fields.
Logic:
- If creditbankrupt == true -> "Konkurs"
- Else if enddate exists -> "Ophørt"
- Else -> "Aktiv"
"""
if data.get("creditbankrupt"):
return "Konkurs"
if data.get("enddate"):
return "Ophørt"
return "Aktiv"
# --- Main function ---
def hent_cvr_data(cvr: int, country: str = "dk") -> dict:
"""
Henter virksomhedsdata fra CVR API'et (cvrapi.dk).
Args:
cvr (int): CVR-nummer for virksomheden.
country (str): Landekode (default = 'dk').
Returns:
dict: Dictionary med originale CVR-data + tilføjet felt 'status'.
"""
try:
req = request.Request(
url=f"https://cvrapi.dk/api?search={cvr}&country={country}",
headers={
"User-Agent": (
"Hjerresen Multiservice - MVP CVR lookup "
"- Kontakt: danielhjerresen@hotmail.dk"
)
},
)
with contextlib.closing(request.urlopen(req)) as response:
data = json.loads(response.read())
# --- Add derived status field ---
data["status"] = _derive_status(data)
# --- Make sure missing fields return None instead of crashing UI ---
safe_fields = {
"name": None,
"address": None,
"zipcode": None,
"city": None,
"industrydesc": None,
"startdate": None,
}
for key in safe_fields:
data.setdefault(key, safe_fields[key])
return data
except Exception as e:
print(f"[Fejl] Kunne ikke hente CVR-data: {e}")
return None