half working script with no API key

nvim
KeeganForelight 2 years ago
parent 8489a5920c
commit 00355aea1c

@ -0,0 +1,9 @@
TEMP=35.06000000000000000000
HUMIDITY=63.929305394195
ICON=skc
LOCATION=
ZONE=https://api.weather.gov/zones/forecast/MAZ014
CITY="Cambridge"
STATE="MA"
TOD=night
EXPIRATION=1673315272

@ -1,40 +0,0 @@
# day
Unkown '\ue374'
Cloudy '\ue302'
Fog '\ue303'
HeavyRain '\ue318'
HeavyShowers '\ue318'
HeavySnow '\ue31a'
HeavySnowShowers '\ue31a'
LightRain '\ue308'
LightShowers '\ue308'
LightSleet '\ue3aa'
LightSleetShowers '\ue3aa'
LightSnow '\ue30a'
LightSnowShowers '\ue30a'
PartlyCloudy '\ue37b'
Sunny '\ue30d'
ThunderyHeavyRain '\ue31d'
ThunderyShowers '\ue31d'
ThunderySnowShowers '\ue365'
VeryCloudy '\ue312'
# night
Unkown '\ue374'
Cloudy '\ue37e'
Fog '\ue346'
HeavyRain '\ue318'
HeavyShowers '\ue318'
HeavySnow '\ue31a'
HeavySnowShowers '\ue31a'
LightRain '\ue325'
LightShowers '\ue325'
LightSleet '\ue3ac'
LightSleetShowers '\ue3ac'
LightSnow '\ue361'
LightSnowShowers '\ue361'
PartlyCloudy '\ue379'
Sunny '\ue32b'
ThunderyHeavyRain '\ue31d'
ThunderyShowers '\ue31d'
ThunderySnowShowers '\ue366'
VeryCloudy '\ue312'

@ -0,0 +1,60 @@
{
"day": {
"Unknown": "",
"bkn": "",
"wind_bkn": "",
"fog": "",
"rain": "",
"rain_showers": "",
"rain_showers_hi": "",
"rain_snow": "",
"rain": "",
"sleet": "",
"rain_sleet": "",
"fzra": "",
"rain_fzra": "",
"snow_sleet": "",
"snow_frza": "",
"snow": "",
"sct": "",
"few": "",
"wind_sct": "",
"wind_few": "",
"skc": "",
"wind_skc": "",
"trsa": "",
"trsa_sct": "",
"trsa_hi": "",
"ovc": "",
"wind_ovc": ""
},
"night": {
"Unknown": "",
"bkn": "",
"wind_bkn": "",
"fog": "",
"rain": "",
"rain_showers": "",
"rain_showers_hi": "",
"rain_snow": "",
"rain": "",
"rain_showers": "",
"rain_showers_hi": "",
"sleet": "",
"snow_sleet": "",
"snow_frza": "",
"snow": "",
"sct": "",
"few": "",
"wind_sct": "",
"wind_few": "",
"skc": "",
"wind_skc": "",
"trsa": "",
"trsa_sct": "",
"trsa_hi": "",
"ovc": "",
"wind_ovc": ""
}
}

@ -1,5 +1,7 @@
#!/usr/bin/env bash
WEATHER_DIR="${HOME}/.dotfiles/bin/weather"
usage() {
cat <<EOF
Usage: wttr [-s] [-d] [-u] [-i] [-f] [-h]
@ -7,86 +9,144 @@ Usage: wttr [-s] [-d] [-u] [-i] [-f] [-h]
Queries the weather and outputs it in a Nerd Font compaitable way
Options:
-p, --print print the current weather information
-s, --setloc=<LOC> change location used for wttr.in query
clears disploc on set
-d, --disploc=<LOC> set a location name to display instead of the
location used in wttr.in query
-u, --unit={c|f} set the output unit to fahrenheit or celsius
-i, --info shows current values of location, unit and
disploc if it is set
will use IP if left blank
-d, --disploc=<LOC> show location used in query
-f, --force force refresh weather data
-h, --help Show this help message
EOF
exit 1
}
get_tod() {
# sets $TOD
hour=$(date +%H)
if [[ $hour -gt 21 || $hour -lt 5 ]] ; then # between 9 pm and 5 am
TOD="night"
else
TOD="day"
get_wttr() {
if [[ -z "$ZONE" || ! -z "$UPDATE" ]] ; then
# getting grid points
url="https://api.weather.gov/points/$LATITUDE,$LONGITUDE"
GRID=$(curl --silent -fL "$url")
query="{\
zone: .properties.forecastZone,\
city: .properties.relativeLocation.properties.city,\
state: .properties.relativeLocation.properties.state}"
res=$(echo "$GRID" | gojq "$query")
echo "$res"
CITY=$(echo "$res" | gojq '.city')
STATE=$(echo "$res" | gojq '.state')
ZONE=$(echo "$res" | gojq '.zone' | tr -d '"')
fi
}
get_wttr() {
# gets weather for $LOCATION and stores it into file with timestamp
url="https://wttr.in/$LOCATION?format=j2" #json stuff need to fix temp
WEATHER=$(curl --silent -fL "$ZONE/observations" | gojq '.features[0].properties')
query="{\
temp: .current_condition[0].temp_F,\
humidity: .current_condition[0].humidity,\
conditions: .current_condition[0].weatherCode,\
location: .nearest_area[0].areaName[0].value}"
temp: .temperature.value,\
humidity: .relativeHumidity.value,\
icon: .icon}"
WTTR=$(curl --silent -fL "$url" | gojq "$query")
echo "$WTTR"
#TEMP=$(echo "$WTTR" | gojq -r '.temp_F')
#HUMIDITY=$(echo "$WTTR" | gojq -r '.humidity')
#CONDITIONS=$(echo "$WTTR" | gojq -r '.weatherDesc[0].value')
PARSED=$(echo "$WEATHER" | gojq "$query")
TEMP=$(echo "$PARSED" | gojq '.temp')
TEMP=$(echo "$TEMP * (9/5) + 32" | bc -l)
HUMIDITY=$(echo "$PARSED" | gojq '.humidity')
TOD=$(echo "$PARSED" | gojq '.icon' | awk -F / '{print $6}')
ICON=$(echo "$PARSED" | gojq '.icon' | awk -F / '{print $7}' | awk -F ? '{print $1}')
EXPIRATION=$(($(date +%s) + 60))
printf 'TEMP=%s\nHUMIDITY=%s\nICON=%s\nLOCATION=%s\nZONE=%s\nCITY=%s\nSTATE=%s\nTOD=%s\nEXPIRATION=%s\n' "$TEMP" "$HUMIDITY" "$ICON" "$LOCATION" "$ZONE" "$CITY" "$STATE" "$TOD" "$EXPIRATION" > ${WEATHER_DIR}/.weather
####
# below is WTTR impl, using NWS above
####
# gets weather for $LOCATION and stores it into file with timestamp
# url="https://wttr.in/?format=j1&nonce=$RANDOM"
# FULL_WTTR=$(curl --silent -fL "$url")
# # parse relevant info
# query="{\
# temp_F: .current_condition[0].temp_F,\
# temp_C: .current_condition[0].temp_C,\
# humidity: .current_condition[0].humidity,\
# conditions: .current_condition[0].weatherCode,\
# location: .nearest_area[0].areaName[0].value,\
# sunset: .weather[0].astronomy[0].sunset,\
# sunrise: .weather[1].astronomy[0].sunrise}"
# WTTR=$(echo "$FULL_WTTR" | gojq "$query")
# # Parsing info
# TEMP=$(echo "$WTTR" | gojq .temp_"$UNITS")
# HUMIDITY=$(echo "$WTTR" | gojq '.humidity')
# CONDITIONS=$(echo "$WTTR" | gojq '.conditions')
# LOCATION=$(echo "$WTTR" | gojq '.location')
# # TOD info
# SUNSET=$(echo "$WTTR" | gojq '.sunset' | tr -d ' "')
# SUNRISE=$(echo "$WTTR" | gojq '.sunrise' | tr -d ' "')
# # getting TOD
# get_tod
# # setting symbol
# # updating weather info
# printf 'UNITS=%s\nTEMP=%s\nHUMIDITY=%s\nCONDITIONS=%s\nLOCATION=%s\nEXPIRATION=%s\nTOD=%s\n' "$UNITS" "$TEMP" "$HUMIDITY" "$CONDITIONS" "$LOCATION" "$EXPIRATION" "$TOD" > ${WEATHER_DIR}/.weather
}
set_location() {
# updates location of weather query to $new_loc
echo "TODO"
# updates location of weather query to $new_loc, can be empty
LOCATION="$new_loc"
UPDATE="true"
url="https://v2.wttr.in/$LOCATION?format=j1"
query="{\
lat: .nearest_area[0].latitude,\
lon: .nearest_area[0].longitude}"
WTTR=$(curl --silent -fL "$url" | gojq "$query")
# Grabbing env vars
LATITUDE=$(echo "$WTTR" | gojq '.lat' | tr -d ' "')
LONGITUDE=$(echo "$WTTR" | gojq '.lon' | tr -d ' "')
get_wttr
}
display_location() {
# updates location to display to $disp_loc
if [[ "$1" == "" ]] ; then
# no arg given, print current loc
echo
fi
shift
echo "TODO"
}
set_units() {
# updates units used to $unit
echo "TODO"
printf 'Searching %s, (%s, %s)\n' "$LOCATION" "$CITY" "$STATE"
}
display_info() {
# prints current config to stdout
echo "TODO"
}
load_wttr() {
# loads and checks weather
if [[ ! -f ${WEATHER_DIR}/.weather ]] ; then
# file doesnt exist
UNITS="F" # defaults to farenheit
get_wttr
fi
# load env
source ${WEATHER_DIR}/.weather
update_wttr() {
# checks to see if old weather data is out of date
echo "TODO"
# check for expiration
if [[ $(date +%s) -ge $EXPIRATION ]] ; then
get_wttr
fi
}
print_wttr() {
echo "TODO"
# stripping and reformatting quotations
query=$(printf '.%s.%s' $TOD $ICON)
SYMBOL=$(cat ${WEATHER_DIR}/symbols.json | gojq "$query" | tr -d '"')
UNIT=$(echo -e "\ufa04")
HUMID_SYMB=$(echo -e "\ue373")
printf '%s %.1f%s %0.1f %s in %s, %s\n' "$SYMBOL" "$TEMP" "$UNIT" "$HUMIDITY" "$HUMID_SYMB" "$CITY" "$STATE"
}
load_wttr
while [[ "$1" != "" ]]; do
case $1 in
-h | --help)
usage
;;
-p | --print)
print_wttr
;;
-s | --setloc)
shift
new_loc="$1"
@ -96,14 +156,6 @@ while [[ "$1" != "" ]]; do
shift
display_location
;;
-u | --unit)
shift
unit="$1"
set_units
;;
-i | --info)
display_info
;;
-f | --force)
get_wttr
;;

Loading…
Cancel
Save