import requests
import math
import sys
import iconSelector as iconSelect
import os
currentDirectory = os.getcwd()
CDHardcode = "/home/nclanceman/tools/weather"
try:
stationName = sys.argv[1]
except IndexError:
# if no argument given, default to Hartsfield Jackson International Airport (KATL)
stationName = "KATL"
# Rounds decimals up or down
def rounding(num):
test = num % 1
result = 0
if (test >= 0.5):
result = math.ceil(num)
else:
result = math.floor(num)
return result
def convertToF(num):
return (((num * 9) / 5) + 32)
def convertToMPH(num):
return num * 0.621371
def convertCompass(num):
if num in range(338, 360, 1) or num in range(0, 23, 1):
return "N"
elif num in range(23, 68, 1):
return "NE"
elif num in range(68, 113, 1):
return "E"
elif num in range(113, 158, 1):
return "SE"
elif num in range(158, 203, 1):
return "S"
elif num in range(203, 248, 1):
return "SW"
elif num in range(248, 293, 1):
return "W"
elif num in range(293, 338, 1):
return "NW"
else:
return "error"
def tooltipPrinter(r_dict):
info = r_dict['properties']
# Print station name, temp, humidity, wind speed, wind direction
stationName = f"Station Name: {info['stationName']}"
condition = f"Current Condition: {info['textDescription']}"
temp = f"Temp: {rounding(convertToF(info['temperature']['value']))} F"
humidity = f"Humidity: {rounding(info['relativeHumidity']['value'])}%"
# If no windSpeed, NWS returns "None".
if (not info['windSpeed']['value']):
windSpeed = 0
windDirection = 0
else:
windSpeed = rounding(convertToMPH(info['windSpeed']['value']))
windDirection = info['windDirection']['value']
windData = f"Wind: {windSpeed} MPH, {convertCompass(windDirection)}, {windDirection} degrees"
precipitation = f"Precipitation (3 Hrs.): {info['precipitationLast3Hours']['value']}"
result = f"{stationName}\n{condition} \n{temp} \n{windData} \n{humidity} \n{precipitation}"
return result
# Results at Hector Field - Fargo Int'l Airport
# request_addr = "https://api.weather.gov/stations/KFAR/observations/latest"
# Results at Dothan Regional Airport
# request_addr = "https://api.weather.gov/stations/KDHN/observations/latest"
request_addr = f"https://api.weather.gov/stations/{stationName}/observations/latest"
try:
r = requests.get(request_addr)
except Exception as err:
print("No Connection")
print(f"Error Detected: /n {err}")
else:
if r.status_code != 200:
print("No Connection to NWS")
else:
request_json = r.json()
temp = convertToF(request_json["properties"]["temperature"]["value"])
roundedTemp = rounding(temp)
condition = request_json["properties"]["textDescription"]
timeOfDay = request_json['properties']['icon'].split("/")[5]
weatherIcon = iconSelect.parseDescription(condition)
weatherIconImage = currentDirectory +\
iconSelect.imageSelector(weatherIcon, timeOfDay)
# print(f" \u2601 {condition}, {roundedTemp} F")
print(
f"
{weatherIconImage} {roundedTemp}F")
print(tooltipPrinter(request_json))