aboutsummaryrefslogtreecommitdiffstats
path: root/yr2pgsql.py
diff options
context:
space:
mode:
Diffstat (limited to 'yr2pgsql.py')
-rwxr-xr-xyr2pgsql.py86
1 files changed, 86 insertions, 0 deletions
diff --git a/yr2pgsql.py b/yr2pgsql.py
new file mode 100755
index 0000000..f37f0be
--- /dev/null
+++ b/yr2pgsql.py
@@ -0,0 +1,86 @@
+#!/bin/python3
+
+import os
+import sys
+import json
+import psycopg2
+import requests
+
+lat = str(os.environ['yr_lat'])
+lon = str(os.environ['yr_lon'])
+
+pg_db = os.environ['pg_db']
+pg_host = os.environ['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.")