Tolletaten API - En Enkel Guide
Introduksjon
Tolletaten tilbyr åpne data via deres API, noe som gjør det mulig for forskere, næringsliv og andre interesserte å få tilgang til viktige datasett som valutakurser, tollsatser og varenummer.
Tolletaten har i dag 26 tilgjengelige datasett, og de planlegger å legge til flere i fremtiden, som oppdateres fortløpende på nettsiden.
Dette dekker guiden:
- Hvordan bruke Tolletaten API for å hente data.
- En oversikt over Tolletatens forskjellige datasett.
- Hvordan forstå og håndtere ulike nivåer av datastrukturer.
- Hvordan behandle data i Python og lagre det som CSV.
Steg 1: Kom i gang med API-en
Hva er API-en?
En API (Application Programming Interface) gir deg direkte tilgang til data fra Tolletaten. Du trenger ikke lenger laste ned filer manuelt. Dataene leveres vanligvis i følgende formater:
- JSON: Foretrukket format for programmering. Lett å jobbe med i moderne språk som Python og JavaScript.
- XML/XSD: Strukturert dataformat som passer eldre systemer eller validering av komplekse datastrukturer.
- CSV: Enkel tabellstruktur som egner seg for Excel eller dataanalyseverktøy.
Tilgjengelige formater
Alle datasett er tilgjengelige i JSON og XML/XSD. Kun noen få datasett tilbys som CSV, siden CSV ikke støtter komplekse datastrukturer. API-en er derfor ideell for å jobbe med oppdaterte data i mer avanserte formater.
Fordeler med API-en
- Automatisering: Data kan hentes automatisk uten manuelle nedlastinger.
- Analyse: JSON og XML gir mer fleksibilitet for komplekse datasett.
- Skreddersydd bruk: Integrer data direkte i egne applikasjoner eller systemer.
Nivåer av datastrukturer
Datasettene fra Tolletaten varierer i kompleksitet. Nivået av nesting (hierarkiske lag) avgjør hvor lett eller vanskelig det er å hente og analysere dataene.
Oversikt over Tolletaten datasett
Offisielt navn | Datasett | # Nesting-nivå | Struktur |
---|---|---|---|
Avgifter ved innførsel | innfoerselsavgift | 7 | Vis struktur |
Avgifter ved utførsel | utfoerselsavgift | 7 | Vis struktur |
Bound tariff concessions | boundtariffconcessions | 4 | Vis struktur |
Customs tariff structure | customstariffstructure | 10 | Vis struktur |
Datogyldighet på varenummer | datogyldighetforvare | 2 | Vis struktur |
Ekspedisjonsenheter | ekspedisjonsenhet | 2 | Vis struktur |
Feilmeldinger | feilmelding | 2 | Vis struktur |
Free trade agreements | ratetradeagreements | 5 | Vis struktur |
Henvisninger | henvisning | 2 | Vis struktur |
Historisk valutakurs | valutakurs_historisk | 2 | Vis struktur |
Landgrupper | landgruppe | 2 | Vis struktur |
Lettelser for tollavgift | lettelse | 2 | Vis struktur |
Medlemsland | medlemsland | 4 | Vis struktur |
Nåværende og fremtidige satser for råvaretollavgift | raavaretollavgiftssats | 6 | Vis struktur |
Nåværende og fremtidige tollavgiftsatser | tollavgiftssats | 6 | Vis struktur |
Referansekoder ved innførsel | innfoerselsreferanse | 2 | Vis struktur |
Restriksjoner ved innførsel | innfoerselsrestriksjon | 4 | Vis struktur |
Restriksjoner ved utførsel | utfoerselsrestriksjon | 4 | Vis struktur |
Tollkvoter | tollkvote | 3 | Vis struktur |
Tolltariff struktur | tolltariffstruktur | 19 | Vis struktur |
Typetilfeller ved omberegning | typetilfelle | 2 | Vis struktur |
Valutakurs | valutakurs | 2 | Vis struktur |
Varenummer | varenummer | 2 | Vis struktur |
Tabellen sist oppdatert: 2024-12-16
Forstå nivåer av nesting
Jo høyere nivået av nesting, desto mer komplekst er datasettet å behandle.
Eksempel: Høy nesting (nivå 4)
{
"nivå1": {
"nivå2": {
"nivå3": [
{
"nivå4": {
"verdi": "eksempel"
}
}
]
}
}
}
Eksempel: Lav nesting (nivå 1)
{
"valutakode": "USD",
"valutakurs": 9.84,
"gyldig_fra": "2024-01-01"
}
Steg 2: Hente data med Python
I denne delen lærer du hvordan du henter valutakurser fra Tolletatens API. Vi viser hvordan du kan forstå datastrukturene, hente metadata, og til slutt laste ned selve dataene.
2.1: Forstå datastruktur
Før du laster ned dataene, er det nyttig å forstå hvordan datastrukturen ser ut. Dette hjelper deg med å planlegge hvordan du skal behandle dataene.
Kodeeksempel for å hente datastruktur
import requests
import json
def extract_structure(data):
"""Extract the structure of a JSON object."""
if isinstance(data, dict):
return {k: extract_structure(v) for k, v in data.items()}
elif isinstance(data, list):
return [extract_structure(data[0])] if data else []
return type(data).__name__
def process_valutakurs():
# URL til dataset metadata
DATASET_METADATA_URL = "https://data.toll.no/api/3/action/package_show?id=valutakurs"
# Hent metadata
metadata_response = requests.get(DATASET_METADATA_URL).json()
resources = metadata_response["result"]["resources"]
# Finn JSON-ressursens URL
resource_url = next((res["url"] for res in resources if res["format"].upper() == "JSON"), None)
if not resource_url:
print("Fant ingen JSON-ressurs.")
return
# Hent JSON-data
data = requests.get(resource_url).json()
# Ekstraher og skriv ut datastruktur
structure = extract_structure(data)
print("Datastruktur for 'valutakurs':")
print(json.dumps(structure, indent=4))
if __name__ == "__main__":
process_valutakurs()
Eksempel på datastruktur
Utdata fra koden vil vise datastrukturen som dette:
{
"versjon": "str",
"omregningskurser": [
{
"valutakode": "str",
"valutabeskrivelse": "str",
"valutakurs": "str",
"omregningsenhet": "int",
"fomdato": "str",
"tomdato": "str"
}
]
}
2.2: Hente metadata
Metadata gir oversikt over datasettet, inkludert tilgjengelige ressurser og deres formater.
Kodeeksempel for å hente metadata
import requests
# URL til metadata for datasettet
DATASET_URL = "https://data.toll.no/api/3/action/package_show?id=valutakurs"
# Hent metadata
response = requests.get(DATASET_URL)
if response.status_code == 200:
metadata = response.json()
if metadata.get("success"):
print("Metadata hentet:")
print(metadata["result"]) # Skriv ut metadata
else:
print("Feil: Metadata kunne ikke hentes.")
else:
print(f"HTTP-feil: {response.status_code}")
Viktige data fra metadata
- Navn og beskrivelse: Datasettets navn og hva det inneholder.
- Lisens: Vilkår for bruk, f.eks. "Creative Commons Attribution 4.0".
- Ressurser: Liste over tilgjengelige filformater (JSON, XML, CSV) og lenker.
- Opprettelse og oppdatering: Tidsstempel for datasettet.
- Organisasjon: Hvem som publiserer datasettet (Tolletaten).
2.3: Hente selve dataene
Når du har metadataene, kan du hente og lagre selve dataene. Her er et eksempel på hvordan du laster ned valutakurser og lagrer dem som en CSV-fil.
Kodeeksempel for å hente og lagre data
import requests
import pandas as pd
# URL til dataset og filnavn
DATASET_URL = "https://data.toll.no/api/3/action/package_show?id=valutakurs"
CSV_FILE_NAME = "valutakurser.csv"
# Hent metadata for dataset
response = requests.get(DATASET_URL)
# Finn JSON-ressursens URL
resource_url = next(
(res["url"] for res in response.json()["result"]["resources"] if res["format"].upper() == "JSON"),
None
)
# Hent data og lagre som CSV
if resource_url:
print("Henter data...")
data = requests.get(resource_url).json()
df = pd.DataFrame(data["omregningskurser"])
df.to_csv(CSV_FILE_NAME, index=False, encoding="utf-8-sig")
print(f"Data lagret i '{CSV_FILE_NAME}'")
else:
print("Fant ikke JSON-ressurs.")
Hva gjør koden?
- Henter metadata fra API-en for å finne riktig ressurs.
- Henter selve dataene som JSON.
- Konverterer JSON-data til en tabell med
pandas.DataFrame
. - Lagrer dataene som en CSV-fil for videre bruk.
Eksempel på CSV-fil
CSV-filen vil inneholde data som dette:
valutakode,valutabeskrivelse,valutakurs,omregningsenhet,fomdato,tomdato
AUD,AUSTRALSKE DOLLAR,"7,130",1,2024-12-16,2024-12-22
CAD,KANADISKE DOLLAR,"7,870",1,2024-12-16,2024-12-22
CHF,SVEITSISKE FRANC,"1265,940",100,2024-12-16,2024-12-22
CNY,KINESISKE YUAN,"1,540",1,2024-12-16,2024-12-22
CZK,TSJEKKISKE KORUNA,"46,740",100,2024-12-16,2024-12-22
DKK,DANSKE KRONER,"157,310",100,2024-12-16,2024-12-22
EUR,EURO,"11,730",1,2024-12-16,2024-12-22
Denne filen kan åpnes i Excel eller brukes direkte i dataanalyseverktøy.
2.4: Hente og lagre data med filterparametere
I noen tilfeller vil du bare hente data som oppfyller spesifikke kriterier, for eksempel for en bestemt valuta eller innenfor et gitt datointervall. Her er et eksempel på hvordan du laster ned valutakurser med filterparametere og lagrer dem som en CSV-fil.
Kodeeksempel for å hente og lagre filtrerte data
import requests
import pandas as pd
# URL til dataset og filnavn
DATASET_URL = "https://data.toll.no/api/3/action/package_show?id=valutakurs_historisk"
CSV_FILE_NAME = "filtered_valutakurser.csv"
# Hardkodede filterparametere
start_date = "2024-06-01"
end_date = "2024-12-15"
currency_filter = "USD"
# Hent metadata for dataset
response = requests.get(DATASET_URL)
# Finn JSON-ressursens URL
resource_url = next(
(res["url"] for res in response.json()["result"]["resources"] if res["format"].upper() == "JSON"),
None
)
# Hent data, filtrer og lagre som CSV
if resource_url:
print("Henter data...")
data = requests.get(resource_url).json()
kurs_data = data.get("omregningskurser", [])
# Filtrering av data
filtered_data = [
item for item in kurs_data
if start_date <= item.get("fomdato", "") <= end_date and item.get("valutakode") == currency_filter
]
# Lagre som CSV
df = pd.DataFrame(filtered_data)
df.to_csv(CSV_FILE_NAME, index=False, encoding="utf-8-sig")
print(f"Filtrerte data lagret i '{CSV_FILE_NAME}'")
else:
print("Fant ikke JSON-ressurs.")
Hva gjør koden?
- Henter metadata fra API-en for å finne riktig ressurs.
- Henter selve dataene som JSON.
- Filtrerer dataene basert på et datointervall og en spesifikk valutakode.
- Konverterer de filtrerte dataene til en tabell med
pandas.DataFrame
. - Lagrer de filtrerte dataene som en CSV-fil for videre bruk.
Eksempel på CSV-fil med filter
CSV-filen vil inneholde filtrerte data som dette:
valutakode,valutabeskrivelse,valutakurs,omregningsenhet,fomdato,tomdato
USD,AMERIKANSKE DOLLAR,"10,480",1,2024-06-03,2024-06-09
USD,AMERIKANSKE DOLLAR,"10,570",1,2024-06-10,2024-06-16
USD,AMERIKANSKE DOLLAR,"10,710",1,2024-06-17,2024-06-23
USD,AMERIKANSKE DOLLAR,"10,680",1,2024-06-24,2024-06-30
Med dette eksempelet kan du hente dataene som er relevante for dine behov, for eksempel bare USD i en bestemt tidsperiode. Dette er spesielt nyttig for analyser eller rapportering.
Konklusjon
Med Tolletatens API kan du enkelt hente og analysere åpne data for ulike formål. Denne guiden har vist deg hvordan du kan komme i gang, forstå datastrukturer og bruke Python for å hente og lagre data.
Ta gjerne kontakt på info@felixwebutvikling.no dersom du har spørsmål om oppsettet av API-et eller ønsker ytterligere hjelp.