initial
This commit is contained in:
90
metararchive.py
Normal file
90
metararchive.py
Normal file
@@ -0,0 +1,90 @@
|
||||
import requests
|
||||
import json
|
||||
from datetime import datetime, timezone
|
||||
import re
|
||||
import psycopg2
|
||||
import psycopg2.extensions
|
||||
import time
|
||||
|
||||
|
||||
metarlist = ['KCRW','KHTS','KBKW','KEKN','KPKB','KCKB','KBLF','K6L4','K48I','KHLG','KI16','KLWB','KMGW','KMRB','KW22','KW99','KUNI','KJRO','KPMH','KDWU','KZZV','KLNP','KJKL','KPBX','KSYM','KFGX','KJKL','KLHQ','KRZT','KCMH']
|
||||
|
||||
|
||||
S = requests.Session()
|
||||
conn = psycopg2.connect(host='localhost', database='nws', user='nws', password='nws')
|
||||
cursor = conn.cursor()
|
||||
|
||||
|
||||
|
||||
|
||||
#https://aviationweather.gov/api/data/metar?ids=KCRW%2CKHTS%2CKPKB&format=json&taf=false&hours=5
|
||||
|
||||
fetcharray = []
|
||||
|
||||
|
||||
def createurl(metarslist):
|
||||
baseurl = 'https://aviationweather.gov/api/data/metar?ids='
|
||||
for i, metar in enumerate(metarlist):
|
||||
if i == len(metarlist) - 1:
|
||||
baseurl = baseurl + metar
|
||||
else:
|
||||
baseurl = baseurl + metar + "%2C"
|
||||
baseurl = baseurl + "&format=json&taf=false&hours=2"
|
||||
fetcharray.append(baseurl)
|
||||
|
||||
|
||||
def backfillmetars(metarlist):
|
||||
for i in metarlist:
|
||||
baseurl = 'https://aviationweather.gov/api/data/metar?ids='
|
||||
baseurl = baseurl + i + "&format=json&taf=false&hours=120"
|
||||
fetcharray.append(baseurl)
|
||||
#print(baseurl)
|
||||
|
||||
#backfillmetars(['KCRW'])
|
||||
createurl(metarlist)
|
||||
|
||||
|
||||
for k in fetcharray:
|
||||
|
||||
|
||||
content = S.get(k)
|
||||
|
||||
|
||||
metardict = content.json()
|
||||
print(metardict)
|
||||
|
||||
|
||||
for i in metardict:
|
||||
obid = i.get('metar_id')
|
||||
# Generate a unique obid if it's None
|
||||
if obid is None:
|
||||
# Use a combination of icaoId and reportTime to generate a unique identifier
|
||||
icao = i.get('icaoId')
|
||||
obtime = i.get('reportTime')
|
||||
if icao is not None and obtime is not None:
|
||||
obid = f"{icao}_{obtime}"
|
||||
else:
|
||||
# If both are None, we can't generate a reliable ID, so skip this record
|
||||
print(f"Skipping record due to missing icaoId or reportTime: {i}")
|
||||
continue
|
||||
else:
|
||||
icao = i.get('icaoId')
|
||||
obtime = i.get('reportTime')
|
||||
|
||||
temp = i.get('temp')
|
||||
dewp = i.get('dewp')
|
||||
visib = i.get('visib')
|
||||
wx = i.get('wxString')
|
||||
precip1 = i.get('precip')
|
||||
precip3 = i.get('precip3hr')
|
||||
precip6 = i.get('precip6hr')
|
||||
lat = i.get('lat')
|
||||
lon = i.get('lon')
|
||||
raw = i.get('rawOb')
|
||||
stationname = i.get('name')
|
||||
|
||||
params = (obid, icao, obtime, temp, dewp, visib, wx, precip1, precip3, precip6, lat, lon, raw, stationname)
|
||||
sql = "INSERT INTO metars (obid, icao, obtime, temp, dewp, visib, wx, precip1, precip3, precip6, lat, lon, raw, stationname) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) on conflict do nothing"
|
||||
cursor.execute(sql,params)
|
||||
conn.commit()
|
||||
conn.close()
|
||||
Reference in New Issue
Block a user