#!/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.")