#!/bin/bash # # Retrieves and formats current weather # # Copyright (C) 2013 Mike Gerwitz # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # In order to prevent the screen session from hanging due to network latency # or a slow weather server, it is highly recommended that a cron job or some # other task be used to populate /tmp/.weather with the output of the # weather command. Should a file be empty or non-existant, the script will # fall back to querying realtime. ## export -n HTTP_PROXY http_proxy # fall back to realtime weather data if no cache is available wdata=/tmp/.weather data="$( cat /tmp/.weather 2>/dev/null \ | sed 's/^ \+//g' )" weather_temp="$( echo "$data" \ | grep ^Temp \ )" weather_f="$( echo "$weather_temp" \ | grep -oP '[0-9\.-]+ F' \ | cut -d' ' -f1 \ )" weather_c="$( echo "$weather_temp" \ | grep -oP '[0-9\.-]+ C' \ | cut -d' ' -f1 \ )" # filters out e.g. "N inches of snow on ground" weather_type="$( echo "$data" \ | grep '^Weather: ' \ | grep -v ' on ground' \ | cut -d' ' -f2- \ )" wind="$( grep -o '[0-9]\+ MPH' <<< "$data" \ | tr '\n' '-' \ | sed 's/-$//;s/ \?MPH-/-/' \ )" # remove decimal chk="$( echo "$weather_f" | cut -d. -f1 )" # determine color based on temperature color='.' if [ $chk -gt 89 ]; then color=r elif [ $chk -gt 69 ]; then color=y elif [ $chk -gt 39 ]; then color=d elif [ $chk -gt 9 ]; then color=b else color=m # purple with my color scheme fi bgcolor='.' if [[ "$weather_type" =~ snow ]]; then bgcolor=w fi # if it's sunny, make the status brighter echo "$data" | grep -qP 'sunny|(mostly )?clear|partly cloudy' && { color=$( echo $color | tr '[:lower:]' '[:upper:]' ) } echo -e "\005{+ $bgcolor$color}${weather_f}F/${weather_c}C $wind\005{-}"