#!/usr/bin/env python
#coding: utf-8
# Ligger som Jupyter notebook på https://github.com/janbrus/ssb-api-python-examples
# # Eksempler på bruk av Klass fra Python
# Klass - Klassifikasjoner og kodelister.
# Se også Klass API dokumentasjon: [Klass API guide](https://data.ssb.no/api/klass/v1/api-guide.html)
# 1. Et enkelt eksempel: Dagens kommuner
# Vi importerer Python Pandas, som kan angis som pd
import pandas as pd
# Eksempelet henter gyldige koder fra Standard for kommuneinndeling.
# Adressen i Klass er https://www.ssb.no/klass/klassifikasjoner/131/
# 131 = ID til klassifikasjonen
# Vi henter gyldige koder som JSON via Klass API med [codesAt](https://data.ssb.no/api/klass/v1/api-guide.html#_codesat):
URL1 = 'http://data.ssb.no/api/klass/v1/classifications/131/codesAt.json?date=2021-01-19'
# Siden dette er json kan vi bruke Pandas read_json(). Den kan ta nettadresser direkte.
dataframe1 = pd.read_json(URL1)
print(dataframe1)
# Alt ligger i en kolonne 'codes'.
# Vi må i tillegg bruke Pandas sin 'json_normalize'.
# Vi gir dataframe1['codes'] som input
kommuner2020 = pd.json_normalize(dataframe1['codes'])
print(kommuner2020)
# 2. Henter Standard for kommuneinndeling med endringer fra og med 1.1.2017 inkl. kommende inndelig gyldig fra 2024
# Url til Klass API. Nå bruker vi [codes](https://data.ssb.no/api/klass/v1/api-guide.html#_codes) med fra-og-med dato.
# Id er fortsatt 131 og vi angir .json slik:
URL2 = 'http://data.ssb.no/api/klass/v1/classifications/131/codes.json?from=2017-01-01&includeFuture=True'
# to= parameteren for tid er ikke nødvendig i Klass API. Den kan med fordel utelukkes om en vil ha med endringer.
# Leser URL2 som json til dataframe2
dataframe2 = pd.read_json(URL2)
dataframe2.head()
# Vi bruker Pandas json_normalize
kommuner_fra2017 = pd.json_normalize(dataframe2['codes'])
print(kommuner_fra2017)
# Vi bruker drop for å fjerne unødvendige kolonner.
kommuner_fra2017 = kommuner_fra2017.drop(columns=['parentCode', 'level', 'shortName', 'presentationName'])
kommuner_fra2017.head()
# Setter code som inneholder kommunenummrene som index
kommuner_fra2017 = kommuner_fra2017.set_index('code')
kommuner_fra2017.tail()
# Finn kommunenummer og gyldighetsperiode for Holmestrand. Se gyldighetsperiodene.
kommuner_fra2017.query('name == "Holmestrand"')
Konakt [statistikkbanken@ssb.no](statistikkbanken@ssb.no)