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')