#!/usr/bin/env python3 """ Get exchange rates from nb """ import csv import sys import tempfile from datetime import datetime, timedelta import common import requests from tzlocal import get_localzone # I'm not sure I understand Norges Banks json-model. It seems a lot easier to just get the CSV, and convert it to JSON. apiUrl = "https://data.norges-bank.no/api/data/EXR/B.EUR.NOK.SP?format=csv&locale=en" pg_db = common.env("el_pg_db") pg_host = common.env("el_pg_host") pg_table = "nbex" startTime = datetime.now(get_localzone()) - timedelta(days=10) startTime = startTime.strftime("%Y-%m-%d") # startTime = '2023-05-23' # <- edit for manual starttime. Like when filling in missing info. endTime = datetime.now(get_localzone()).strftime("%Y-%m-%d") temp = tempfile.NamedTemporaryFile() ### Get the data try: url = apiUrl + "&startPeriod=" + startTime + "&endPeriod=" + endTime response = requests.get(url, timeout=10) if response.status_code != 200: print(response.status_code) print("Oh shit") response.raise_for_status() with open(temp.name, "w", encoding="utf-8") as fd: fd.write(response.text) except requests.exceptions.RequestException as e: print("oh lol") sys.exit(e) ### insert data into database values = [] with open(temp.name, encoding="utf-8") as csvfile: csvReader = csv.DictReader(csvfile, delimiter=";") for item in csvReader: values.append( ( item["TIME_PERIOD"], item["BASE_CUR"], item["QUOTE_CUR"], item["OBS_VALUE"], ) ) temp.close() # SQL sql = """INSERT INTO nbex VALUES(%s, %s, %s, %s) ON CONFLICT (startdate,base_cur,quote_cur) DO NOTHING""" common.dbi(sql, values, verbose=True)