Slå en virksomhed op på CVR-nummer
Kald /api/v1/{cvr} og læs JSON-svaret. Eksemplet bruger kun urllib fra standardbiblioteket.
import json
import urllib.request
def get_company(cvr):
url = f"https://apicvr.dk/api/v1/{cvr}"
with urllib.request.urlopen(url, timeout=15) as res:
return json.load(res)
company = get_company(24256790)
print(company["name"], company["zipcode"], company["city"])
print(company["industrydesc"], "-", company["companydesc"])Søg på virksomhedsnavn
Fuzzy-søgningen finder virksomheder, selv om navnet er stavet lidt forkert. Hvert hit har name, cvr_number, industrycode og industrytext.
import json
import urllib.parse
import urllib.request
def search(name):
url = f"https://apicvr.dk/api/v1/search/fuzzy/" + urllib.parse.quote(name)
with urllib.request.urlopen(url, timeout=15) as res:
return json.load(res)
for hit in search("novo nordisk")[:5]:
print(hit["cvr_number"], hit["name"], "-", hit["industrytext"])Håndter fejl
API'et bruger almindelige HTTP-statuskoder, så du kan reagere på dem direkte:
| Status | Betydning |
|---|---|
200 | Virksomheden blev fundet. Svaret er JSON. |
404 | Der findes ingen virksomhed med det CVR-nummer. Body: {"detail": {"error": "NOT_FOUND"}} |
422 | CVR-nummeret er ikke et tal. |
502 | CVR-registret svarede ikke. Prøv igen om lidt. |
import json
import urllib.error
import urllib.request
def get_company(cvr):
try:
with urllib.request.urlopen(f"https://apicvr.dk/api/v1/{cvr}", timeout=15) as res:
return json.load(res)
except urllib.error.HTTPError as err:
if err.code == 404:
return None # no company with that CVR number
raise # 422 = not a number, 502 = the CVR register did not answer
print(get_company(99999999)) # NoneEjere, direktion og reklamebeskyttelse
Det fulde opslag indeholder legale ejere med ejerandel i intervaller og den nuværende direktion.
company = get_company(24256790)
for owner in company["ejere"]:
print(owner["name"], owner["ownership_range"])
for person in company["direktion"]:
print(person["role"], person["name"])
if company["protected"]:
print("Reklamebeskyttet - må ikke bruges til direkte markedsføring")protected, før du bruger data til markedsføring. Er feltet true, har virksomheden frabedt sig reklamehenvendelser.Foretrækker du requests?
import requests
res = requests.get("https://apicvr.dk/api/v1/24256790", timeout=15)
res.raise_for_status()
print(res.json()["name"])Ofte stillede spørgsmål
Skal jeg bruge en API-nøgle i Python?
Nej. CVR-API kræver hverken nøgle eller konto. Et almindeligt GET-kald er nok.
Hvilken Python-version kræves?
Eksemplerne virker med Python 3.6 og nyere, fordi de kun bruger standardbiblioteket og f-strings.
Kan jeg slå mange virksomheder op på én gang?
Lav ét kald pr. CVR-nummer, og hold tempoet nede. Har du brug for vedvarende høj trafik, så skriv til [email protected].