diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9c20535 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.env.key diff --git a/archived/location.sh b/archived/location.sh deleted file mode 100755 index b2dd400..0000000 --- a/archived/location.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# creates a hidden file of your location details based on your address, will expand to support addition via zip codes - -usage() { echo "Usage: $0 [-z zipcode]" 1>&2; exit 1; } - -if [[ $# -eq 0 ]] ; then - # called without args - CURRENT_LOCATION=$(curl --silent http://ip-api.com/csv) - - CITY=$(echo "$CURRENT_LOCATION" | cut -d , -f 6) - LAT=$(echo "$CURRENT_LOCATION" | cut -d , -f 8) - LON=$(echo "$CURRENT_LOCATION" | cut -d , -f 9) - printf "CITY=%s\nLAT=%s\nLON=%s\n" "$CITY" $LAT $LON > "$HOME/.dotfiles/bin/weather/.env.location" -fi - -while getopts "z:" arg; do - case ${arg} in - z) - ZIPCODE=${OPTARG} - source "$HOME/.dotfiles/.priv/key" - URL="http://api.openweathermap.org/geo/1.0/zip?zip=$ZIPCODE&appid=$API_KEY" - LOCATION=$(curl --silent "$URL") - CITY=$(echo $LOCATION | jq -r '.name') - LAT=$(echo $LOCATION | jq -r '.lat') - LON=$(echo $LOCATION | jq -r '.lon') - printf "CITY=%s\nLAT=%s\nLON=%s\n" "$CITY" $LAT $LON > "$HOME/.dotfiles/bin/weather/.env.location" - # emptying weather buffer - >"$HOME/.dotfiles/bin/weather/.env.weather" - ;; - ?) - usage - ;; - esac -done - diff --git a/archived/weather b/archived/weather index bdf73a6..614acb7 100755 Binary files a/archived/weather and b/archived/weather differ diff --git a/archived/weather.sh b/archived/weather.sh deleted file mode 100755 index 9cd4025..0000000 --- a/archived/weather.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -source "$HOME/.dotfiles/.priv/key" -source "$HOME/.dotfiles/bin/weather/.env.location" -source "$HOME/.dotfiles/bin/weather/.env.weather" -# API_KEY=$(cat "$HOME/.dotfiles/bin/weather/.priv/key") -# getting weather -CUR_TIMESTAMP=$(date +%s) -# only update weather every 30 seconds - -if [[ $CUR_TIMESTAMP -gt $EXPIRATION || -z $EXPIRATION ]] ; then - WEATHER=$(curl --silent http://api.openweathermap.org/data/2.5/weather\?lat="$LAT"\&lon="$LON"\&appid="$API_KEY"\&units=imperial) - - echo $WEATHER - TEMP=$(echo $WEATHER | gojq -r '.main.temp') - HUMIDITY=$(echo $WEATHER | gojq -r '.main.humidity') - ICON=$(echo $WEATHER | gojq -r '.weather[0].icon') - EXPIRATION=$(($CUR_TIMESTAMP+30)) - - printf 'TEMP=%s\nHUMIDITY=%s\nICON=%s\nEXPIRATION=%s\n' "$TEMP" "$HUMIDITY" "$ICON" "$EXPIRATION" >"$HOME/.dotfiles/bin/weather/.env.weather" -fi diff --git a/client_weather.sh b/client_weather.sh new file mode 100755 index 0000000..b11f510 --- /dev/null +++ b/client_weather.sh @@ -0,0 +1,64 @@ +#!/bin/bash + +# server version, calls server for actual API info +usage() { + cat <"$HOME/.dotfiles/bin/weather/.env.weather" +fi + +# shifting longform +for arg in "$@"; do + shift + case "$arg" in + '--zipcode') set -- "$@" "-z" ;; + '--coords') set -- "$@" "-c" ;; + '--search') set -- "$@" "-s" ;; + *) set -- "$@" "$arg" ;; + esac +done + +while getopts "o:a:" arg; do + case ${arg} in + esac +done + diff --git a/server_weather.sh b/server_weather.sh new file mode 100755 index 0000000..28bad80 --- /dev/null +++ b/server_weather.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +# server version, calls server for actual API info +WORKING_DIR="$HOME/.local/share/weather" + +# sets $API_KEY +source "$WORKING_DIR/.env.key" + +lookup_location() { + # search for a location + url="http://api.openweathermap.org/geo/1.0/direct?q=$SEARCH&appid=$API_KEY" + RES=$(curl --silent "$url") + echo "$RES" | gojq '.' +} + +lookup_zipcode() { + # lookup based on zipcode + url="http://api.openweathermap.org/geo/1.0/zip?zip=$ZIPCODE&appid=$API_KEY" + RES=$(curl --silent "$url") + echo "$RES" | gojq '.' +} + +get_weather() { + # calls server for weather based on $LAT, $LONG + + url="https://api.openweathermap.org/data/2.5/weather\?lat=$LAT\&lon=$LON\&appid=$API_KEY\&units=imperial" + RES=$(curl --silent "$url") + echo "$RES" | gojq '.' +} + +while getopts "c:s:z:" arg; do + case "$opt" in + 'c' ) + COORDS="$OPTARG" + ;; + 's' ) + SEARCH="$OPTARG" + ;; + 'z' ) + ZIPCODE="$OPTARG" + ;; + '?' ) + echo "ERROR: UNRECOGNZIED ARGUMENT" + exit 1 + ;; + esac +done + +if [[ -n "$COORDS" ]] ; then + get_weather +elif [[ -n "$SEARCH" ]] ; then + lookup_location +elif [[ -n "$ZIPCODE" ]] ; then + lookup_zipcode +fi + +exit 0 diff --git a/weather b/weather deleted file mode 100755 index 9b533ef..0000000 --- a/weather +++ /dev/null @@ -1,168 +0,0 @@ -#!/usr/bin/env bash - -WEATHER_DIR="${HOME}/.dotfiles/bin/weather" - -usage() { - cat < change location used for wttr.in query - will use IP if left blank - -d, --disploc= show location used in query - -f, --force force refresh weather data - -h, --help Show this help message -EOF -} - -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 - - WEATHER=$(curl --silent -fL "$ZONE/observations" | gojq '.features[0].properties') - query="{\ - temp: .temperature.value,\ - humidity: .relativeHumidity.value,\ - icon: .icon}" - - 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, 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 - printf 'Searching %s, (%s, %s)\n' "$LOCATION" "$CITY" "$STATE" - -} - -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 - - # check for expiration - if [[ $(date +%s) -ge $EXPIRATION ]] ; then - get_wttr - fi - -} - -print_wttr() { - # 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" - set_location - ;; - -d | --disploc) - shift - display_location - ;; - -f | --force) - get_wttr - ;; - *) - echo "Error: wttr $@" - usage - ;; - esac - shift -done