import requests import gzip import uuid import os import shutil import xml.dom.minidom import logging, coloredlogs import aiohttp, aiofiles, asyncio import util.bit as bit import util.machineProductCfg as MPC import util.lfRecord as LFR l = logging.getLogger(__name__) coloredlogs.install() pollenIds = [] geocodes = [] # Auto-grab the tecci and zip codes for i in MPC.getPrimaryLocations(): pollenIds.append(LFR.getPollenInfo(i)) geocodes.append(LFR.getLatLong(i).replace('/', ',')) l.debug(pollenIds, geocodes) # Open the config file and make it accessible via "cfg" import json with open("config.json", "r") as file: cfg = json.load(file) apiKey = cfg["twcApiKey"] async def getData(pollenId, geocode): fetchUrl = f"https://api.weather.com/v2/indices/pollen/daypart/7day?geocode={geocode}&language=en-US&format=xml&apiKey={apiKey}" data = "" #Fetch data async with aiohttp.ClientSession() as s: async with s.get(fetchUrl) as r: data = await r.text() newData = data[63:-26] l.debug('Gathering data for location id ' + pollenId) #Write to .i2m file i2Doc = '' + '' + newData + '' + str(pollenId) + '' async with aiofiles.open("./.temp/PollenForecast.i2m", "a") as f: await f.write(i2Doc) await f.close() async def makeDataFile(): loop = asyncio.get_running_loop() l.info("Writing a PollenForecast record.") header = '' footer = '' async with aiofiles.open("./.temp/PollenForecast.i2m", 'w') as doc: await doc.write(header) for x, y in zip(pollenIds, geocodes): await getData(x, y) async with aiofiles.open("./.temp/PollenForecast.i2m", 'a') as end: await end.write(footer) dom = xml.dom.minidom.parse("./.temp/PollenForecast.i2m") pretty_xml_as_string = dom.toprettyxml(indent = " ") async with aiofiles.open("./.temp/PollenForecast.i2m", "w") as g: await g.write(pretty_xml_as_string[23:]) await g.close() files = [] commands = [] with open("./.temp/PollenForecast.i2m", 'rb') as f_in: with gzip.open("./.temp/PollenForecast.gz", 'wb') as f_out: shutil.copyfileobj(f_in, f_out) gZipFile = "./.temp/PollenForecast.gz" files.append(gZipFile) command = commands.append('') numFiles = len(files) bit.sendFile(files, commands, numFiles, 0) os.remove("./.temp/PollenForecast.i2m") os.remove("./.temp/PollenForecast.gz")