dotfiles/.local/bin/wttr
2023-12-10 17:27:02 +01:00

235 lines
7.7 KiB
Bash
Executable file

#!/bin/bash
#
#Author : Amirreza Firoozi
#Author : Carsten Brueggenolte
#name : wttr
#Update 1.30: change config dir to $HOME/.config/wttr to go in line with other configuration files
#Update 1.30: changed default city filename to 'default-city.txt'
#Update 1.40: add v2.wttr.in feature and did some clean up
#Update 1.41: add spaces in between city and url
#Update 1.42: reverse changes with the space between url and city
#Update 1.50: add v3.wttr.in - thanks to dok-ock for the inspiration and the fixes
#Update 1.51: update about section and add it to the help screen
#Update 1.52: move help and about into their own variables for better maintanance
#Update 1.53: add a parameters '-t' current forecast and '-n' current weather
#Update 1.54: spell check and added some optional parameters for -help, -today, -now
wttr_ver="1.54_2021-09-03" #define script version
GITHUB_REPO_URL="https://github.com/cblte/bash-script-wttr"
URL="https://wttr.in/"
URLv2="https://v2.wttr.in/"
URLv3="https://v3.wttr.in/"
About()
{
echo -e ="
About the
██╗ ██╗████████╗████████╗██████╗ ██╗███╗ ██╗
██║ ██║╚══██╔══╝╚══██╔══╝██╔══██╗ ██║████╗ ██║
██║ █╗ ██║ ██║ ██║ ██████╔╝ ██║██╔██╗ ██║
██║███╗██║ ██║ ██║ ██╔══██╗ ██║██║╚██╗██║
╚███╔███╔╝ ██║ ██║ ██║ ██║██╗██║██║ ╚████║
╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝╚═╝ ╚═══╝
script by Carsten Brueggenolte
This is a simple bash script to check weather condition
with the help of wttr.in. The script 'wttr' is under GPL3 License.
Source is available on Github: $GITHUB_REPO_URL
Big THANK YOU goes to
- 'Amirreza Firoozi' (https://github.com/AmirrezaFiroozi/wttr)
for creating the initial script
- 'doc-ock' (https://github.com/doc-ock/) for the idea to add
version 3 of wttr.in and some other useful parameters.
"
}
Help()
{
echo -e "
Write 'wttr {your+city+name}' to check the weather condition of your city.
Surround city name with single- or double-quotes if city name contains more than one word.
You can also put a '+' (plus-sign) in beetween words when you do not want to surround with quotes.
Examples:
wttr cologne
wttr \"Den Haag, Netherland\"
wttr Den+Haag
wttr \"Den Haag Street, South Africa\"
wttr New+York
You can type 'wttr' only if you have defined a standard city.
Parameters:
-a show some information about this script
-h for some help (this page)
-hh for the official wttr.in/:help page
-i to install curl which is necessary for script to run correctly
-m for photo of moon
-n show current weather only
-rm to remove the script :(
-sdef to define a city as your default city
-t show today's forecast
-v show script version
-v2 to fetch different weather report view for the standard city
-v2 {your city name} to fetch different weather report view for city mentioned
-v3 {your city name} to fetch an in-terminal graphic for the given region.
Hint:
When using '-v3' you do not need to add the '.sxl' to the
end of the region/city name. The script will add it automatically.
Any bugs? Any suggestions? Contact information at https://cbrueggenolte.de/impressum
"
}
# ------------------------
# ----- Script starts here
# ------------------------
# Check if a standard city has been set
if [ -f "$HOME/.config/wttr/default-city.txt" ];then #check if user set default city or not . if user did load it to variable def
cd $HOME/.config/wttr
def=$(cat default-city.txt)
elif [ ! -d $HOME/.config/wttr ];then #if he/she didn`t make a blank file
mkdir "$HOME/.config/wttr" 2>/dev/null
cd $HOME/.config/wttr
echo "" > default-city.txt
def=""
fi
# Print out some help if no arguments provided and no standard city been set
if [ "$#" == "0" ] && [ "$def" == "" ];then
echo -e "You have not entered any parameters and no standard city set yet.\nNeed help? try 'wttr -h'"
elif [ "$#" -gt "2" ];then
echo -e "too many parameters. \nNeed help? try 'wttr -h'"
else
case $1 in
# currently doesn't work: upgrade. There is some permissions problem
# "-u" | "-upgrade")
# echo -e "Checking for upgrades..."
# git clone $GITHUB_REPO_URL /tmp/wttr
# bash /tmp/wttr/installer.sh
# ;;
"-a") # about
About
;;
"-h" | "-help") #showing help
Help
;;
"-hh")
curl https://wttr.in/:help
;;
"-i")
sudo apt install curl
;;
"-m")
curl http://wttr.in/moon
;;
"-n" | "-now")
echo -e "Fetching current weather"
if [ "$#" == "2" ];then
city="$2"
city=${city// /+}
city=${city//[^a-zA-Z0-9+]}
curl $URL"$city?0n"
else
curl $URL"$def?0n"
fi
cd $HOME
;;
"-rm")
read -p "Do you really want to remove wttr? (y/n)" response
if [ "$response" == "y" ];then
cd /usr/bin
sudo rm -R "wttr" 2>/dev/null
if [ -d "$HOME/.config/wttr" ];then
sudo rm -d "$HOME/.config/wttr" 2>/dev/null
fi
echo -e "Script has deleted :("
else
echo -e "Opration canceled"
fi
;;
"-sdef") # set the default city
if [ ! -d $HOME/.config/wttr ];then
cd $HOME
mkdir -p ".config/wttr" 2>/dev/null
fi
if [ "$#" == "2" ];then
cd $HOME/.config/wttr
echo "$2" > default-city.txt
echo -e ""
echo -e "Done. Set '$2' as your default city. You can check its weather condition by typing only 'wttr' now :)"
else
read -p "Enter your city name to set as the default city (example : cologne) : " def
# replacing spaces with + signes and removing non wanted chars
def=${def// /+}
def=${def//[^a-zA-Z0-9+]}
if [ "$def" == "" ] && [ "$#" -ne "2" ];then
echo "you did NOT enter anything ..."
else
cd $HOME/.config/wttr
echo $def > default-city.txt
echo -e ""
echo -e "Done. Set '$def' as your default city. You can check its weather condition by typing only 'wttr' now :)"
fi
fi #end of the second if
;;
"-t" | "-today")
echo -e "Fetching today's forecast"
if [ "$#" == "2" ];then
city="$2"
city=${city// /+}
city=${city//[^a-zA-Z0-9+]}
curl $URL"$city?1n"
else
curl $URL"$def?1n"
fi
cd $HOME
;;
"-v")
echo -e "wttr_VERSION is: "$wttr_ver" "
;;
"-v2")
echo -e "Fetching v2 of wttr.in"
if [ "$#" == "2" ];then
city="$2"
city=${city// /+}
city=${city//[^a-zA-Z0-9+]}
curl $URLv2"$city"
else
curl $URLv2"$def"
fi
cd $HOME
;;
"-v3")
echo -e "Fetching v3 of wttr.in"
if [ "$#" == "2" ];then
city="$2"
city=${city// /+}
city=${city//[^a-zA-Z0-9+]}
curl $URLv3"$city".sxl
else
curl $URLv3"$def".sxl
fi
cd $HOME
;;
"")
cd $HOME
curl $URL"$def"
;;
*)
city=$1
city=${city// /+}
city=${city//[^a-zA-Z0-9+]}
curl $URL"$city"
;;
esac
fi