#!/bin/python3 import os import sys import json import psycopg2 import requests lat = str(os.environ['el_yr_lat']) lon = str(os.environ['el_yr_lon']) pg_db = os.environ['el_pg_db'] pg_host = os.environ['el_pg_host'] pg_table = "yr" apiUrl = "https://api.met.no/weatherapi/locationforecast/2.0/compact?lat=" + lat + "&lon=" + lon ### Get the data try: url = apiUrl # Request headers hdr = { 'User-Agent': 'gratis.morell@litepost.no', 'Cache-Control': 'no-cache', } response = requests.get(url, headers=hdr) if response.status_code != 200: print(response.status_code) print("Oh shit") response.raise_for_status() except Exception as e: print("oh lol") sys.exit(e) data = response.json() ### insert data into database values = [] for item in data["properties"]["timeseries"]: details = item["data"]["instant"]["details"] values.append((item["time"],details["air_temperature"],details["air_pressure_at_sea_level"],details["cloud_area_fraction"],details["relative_humidity"],details["wind_from_direction"],details["wind_speed"])) # connect to database conn = psycopg2.connect(database=pg_db, host=pg_host) cur = conn.cursor() # count rows before we start cur.execute("SELECT COUNT(*) FROM " + pg_table) before = cur.fetchone() # insert data try: cur.executemany("INSERT INTO " + pg_table + """ VALUES(%s,%s,%s,%s,%s,%s,%s) ON CONFLICT (time) DO UPDATE SET air_temperature=EXCLUDED.air_temperature, air_pressure_at_sea_level=EXCLUDED.air_pressure_at_sea_level, cloud_area_fraction=EXCLUDED.cloud_area_fraction, relative_humidity=EXCLUDED.relative_humidity, wind_from_direction=EXCLUDED.wind_from_direction, wind_speed=EXCLUDED.wind_speed, updated=now() """, values) conn.commit() except Exception as e: conn.rollback() raise e # count rows after we finnish cur.execute("SELECT COUNT(*) FROM " + pg_table) after = cur.fetchone() # count *new* rows newRows = after[0] - before[0] # close connection conn.close() print("Successfully inserted " + str(newRows) + " records into the database. Might have updated a bunch more.")