diff --git a/recordGenerators/TideForecast.py b/recordGenerators/TideForecast.py new file mode 100644 index 0000000..72d535a --- /dev/null +++ b/recordGenerators/TideForecast.py @@ -0,0 +1,87 @@ +import shutil +from xmlrpc.client import DateTime +import requests +import logging,coloredlogs +import datetime +from py2Lib import bit +import Util.MachineProductCfg as MPC +import records.LFRecord as LFR +import gzip +from os import remove +import xml.dom.minidom + +l = logging.getLogger(__name__) +coloredlogs.install() + +geocodes = [] +tideStations = [] + +for i in MPC.getTideStations(): + tideStations.append(i) + geocodes.append(LFR.getLatLong(i)) + +apiKey = "21d8a80b3d6b444998a80b3d6b1449d3" + +def getData(tideStation, geocode): + today = datetime.date.today() + startDate = today.strftime('%Y%m%d') + endDate_unformatted = datetime.datetime.strptime(startDate, '%Y%m%d') + datetime.timedelta(days=5) + endDate = endDate_unformatted.strftime('%Y%m%d') + + fetchUrl = f"https://api.weather.com/v1/geocode/{geocode}/forecast/tides.xml?language=en-US&units=e&startDate={startDate}&endDate={endDate}&apiKey={apiKey}" + + res = requests.get(fetchUrl) + + if res.status_code != 200: + l.error("DO NOT REPORT THE ERROR BELOW") + l.error(f"Failed to write TidesForecast record -- Status code {res.status_code}") + return + + data = res.text + newData = data[53:-16] + + i2Doc = f'\n \n {newData}\n {tideStation}\n ' + + f = open('./.temp/TidesForecast.i2m', 'a') + f.write(i2Doc) + f.close() + +def makeRecord(): + if len(tideStations) < 1: + l.debug("Skipping TidesForecast -- No locations.") + return + + l.info("Writing TidesForecast record.") + + header = '' + footer = '' + + with open('./.temp/TidesForecast.i2m', 'a') as doc: + doc.write(header) + + for (x, y) in zip(tideStations, geocodes): + getData(x,y) + + with open('./.temp/TidesForecast.i2m', 'a') as end: + end.write(footer) + + dom = xml.dom.minidom.parse('./.temp/TidesForecast.i2m') + xmlPretty = dom.toprettyxml(indent= " ") + + with open('./.temp/TidesForecast.i2m', 'w') as g: + g.write(xmlPretty[23:]) + g.close() + + + # Compresss i2m to gzip + with open ('./.temp/TidesForecast.i2m', 'rb') as f_in: + with gzip.open('./.temp/TidesForecast.gz', 'wb') as f_out: + shutil.copyfileobj(f_in, f_out) + + file = "./.temp/TidesForecast.gz" + command = '' + + bit.sendFile([file], [command], 1, 0) + + remove('./.temp/TidesForecast.i2m') + remove('./.temp/TidesForecast.gz') \ No newline at end of file