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:


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:

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

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?

  1. Henter metadata fra API-en for å finne riktig ressurs.
  2. Henter selve dataene som JSON.
  3. Konverterer JSON-data til en tabell med pandas.DataFrame.
  4. 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?

  1. Henter metadata fra API-en for å finne riktig ressurs.
  2. Henter selve dataene som JSON.
  3. Filtrerer dataene basert på et datointervall og en spesifikk valutakode.
  4. Konverterer de filtrerte dataene til en tabell med pandas.DataFrame.
  5. 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.