#!/bin/bash # # #################################################################################### # script meteo che usa oopenweathermap per i dati e li riporta a terminale # # v:1.5 # # dipendenze: curl,jq,cat,bc # # #################################################################################### # set api-key key_meteo="1487dd8a93bfd85d278d9ac8dcfee94c" # set global variable surc_city=$1 api1="http://api.openweathermap.org/data/2.5/find?q=" api_par="&units=metric&appid=" api_lang="&lang=en" api2="http://api.openweathermap.org/data/2.5/forecast/daily?id=" api3="http://api.openweathermap.org/data/2.5/forecast?id=" get_Mdata(){ # get jason weather data now and extract city id rm meteonow.json curl -s $api1$surc_city$api_par$key_meteo$api_lang > meteonow.json city_id=`cat meteonow.json | jq '.list[0]|.id'` # get jason weather data forecast general 5 day rm meteo5.json curl -s $api2$city_id$api_par$key_meteo > meteo5.json } # exstract meteo data now to jason file Meteo_now(){ city_name=`cat meteonow.json | jq -r '.list[0]|.name'` L=`cat meteonow.json | jq -r '.list[0]|.sys[]'` Lat=`cat meteonow.json | jq -r '.list[0]|.coord.lat'` Lon=`cat meteonow.json | jq -r '.list[0]|.coord.lon'` data_X=`cat meteonow.json | jq -r '.list[0]|.dt'` data_U=`date -d @$data_X` Wcond_n=`cat meteonow.json | jq -r '.list[0]|.weather[].main'` Wcond_nd=`cat meteonow.json | jq -r '.list[0]|.weather[].description'` T=`cat meteonow.json | jq -r '.list[0]|.main.temp'` Tmax=`cat meteonow.json | jq -r '.list[0]|.main.temp_max'` Tmin=`cat meteonow.json | jq -r '.list[0]|.main.temp_min'` Hm=`cat meteonow.json | jq -r '.list[0]|.main.humidity'` PrS=`cat meteonow.json | jq -r '.list[0]|.main.pressure'` ClD=`cat meteonow.json | jq -r '.list[0]|.clouds[]'` R=`cat meteonow.json | jq -r '.list[0]|.rain'` S=`cat meteonow.json | jq -r '.list[0]|.snow'` Ws=`cat meteonow.json | jq -r '.list[0]|.wind.speed'` Wsd=`cat meteonow.json | jq -r '.list[0]|.wind.deg'` # convert m/s to Km/s WsKM=$(echo "3.6"*$Ws | bc) # convert degreese to cardinal name if (($(echo "$Wsd>= 0" | bc))); then W_nc="N"; fi; if (($(echo "$Wsd>= 11.25" | bc))); then W_nc="N-NE"; fi; if (($(echo "$Wsd>= 33.25" | bc))); then W_nc="NE"; fi; if (($(echo "$Wsd>= 56.25" | bc))); then W_nc="E-NE"; fi; if (($(echo "$Wsd>= 78.75" | bc))); then W_nc="E"; fi; if (($(echo "$Wsd>= 101.25" | bc))); then W_nc="E-SE"; fi; if (($(echo "$Wsd>= 123.75" | bc))); then W_nc="SE"; fi; if (($(echo "$Wsd>= 146.25" | bc))); then W_nc="S-SE"; fi; if (($(echo "$Wsd>= 168.75" | bc))); then W_nc="S"; fi; if (($(echo "$Wsd>= 191.25" | bc))); then W_nc="S-SW"; fi; if (($(echo "$Wsd>= 213.75" | bc))); then W_nc="SW"; fi; if (($(echo "$Wsd>= 236.25" | bc))); then W_nc="W-SW"; fi; if (($(echo "$Wsd>= 258.75" | bc))); then W_nc="W"; fi; if (($(echo "$Wsd>= 281.25" | bc))); then W_nc="W-NW"; fi; if (($(echo "$Wsd>= 303.75" | bc))); then W_nc="NW"; fi; if (($(echo "$Wsd>= 326.25" | bc))); then W_nc="N-NW"; fi; if (($(echo "$Wsd>= 348.75" | bc))); then W_nc="N"; fi; if (($(echo "$Wsd> 360" | bc))); then W_nc="-?-"; fi; if (($(echo "$Wsd< 0" | bc))); then W_nc="-?-"; fi if [ "$Wsd" = "null" ]; then W_nc="-?-"; fi; # print to video all data.. echo " " echo " " $city_name","$L " " "Lat: "$Lat " " "Lon: "$Lon " " "id:" $city_id echo " " $data_U echo " " echo " " "Weather: "$Wcond_n"," $Wcond_nd echo " " echo " " "Temp (C°): "$T " " "Tmax (C°): "$Tmax" " "Tmin (C°): "$Tmin " " "Humidity (%): "$Hm echo " " echo " " "Pressure (hPa): "$PrS " " "Clouds (%): "$ClD " " "Rain (mm): "$R " " "Snow (mm): "$S echo " " echo " " "Wind speed (km/h): "$WsKM " " "Wind deg (°): "$Wsd " " "Wind dir: "$W_nc echo " " echo " " } # exstract forecast 5 data to jason file forecast5() { echo " " echo "┌---------------------------------------------------------------┐" echo "┊ FORECAST WEATHER 5 DAY ┊" echo "└---------------------------------------------------------------┘" for ((i=0; i<6; i++)); do city_name=`cat meteonow.json | jq -r '.list[0]|.name'` L=`cat meteonow.json | jq -r '.list[0]|.sys[]'` Lat=`cat meteonow.json | jq -r '.list[0]|.coord.lat'` Lon=`cat meteonow.json | jq -r '.list[0]|.coord.lon'` data_X=`cat meteo5.json | jq -r '.list['$i']|.dt'` data_U=`date -d @$data_X` Wcond_n=`cat meteo5.json | jq -r '.list['$i']|.weather[].main'` Wcond_nd=`cat meteo5.json | jq -r '.list['$i']|.weather[].description'` Tmax=`cat meteo5.json | jq -r '.list['$i']|.temp.max'` Tmin=`cat meteo5.json | jq -r '.list['$i']|.temp.min'` TM=`cat meteo5.json | jq -r '.list['$i']|.temp.morn'` TE=`cat meteo5.json | jq -r '.list['$i']|.temp.eve'` TN=`cat meteo5.json | jq -r '.list['$i']|.temp.night'` TD=`cat meteo5.json | jq -r '.list['$i']|.temp.day'` Hm=`cat meteo5.json | jq -r '.list['$i']|.humidity'` PrS=`cat meteo5.json | jq -r '.list['$i']|.pressure'` #ClD=`cat meteo5.json | jq -r '.list['$i']|.clouds'` R=`cat meteo5.json | jq -r '.list['$i']|.rain'` S=`cat meteo5.json | jq -r '.list['$i']|.snow'` Ws=`cat meteo5.json | jq -r '.list['$i']|.speed'` Wsd=`cat meteo5.json | jq -r '.list['$i']|.deg'` # convert m/s to Km/s WsKM=$(echo "3.6"*$Ws | bc) # convert degreese to cardinal name if (($(echo "$Wsd>= 0" | bc))); then W_nc="N"; fi; if (($(echo "$Wsd>= 11.25" | bc))); then W_nc="N-NE"; fi; if (($(echo "$Wsd>= 33.25" | bc))); then W_nc="NE"; fi; if (($(echo "$Wsd>= 56.25" | bc))); then W_nc="E-NE"; fi; if (($(echo "$Wsd>= 78.75" | bc))); then W_nc="E"; fi; if (($(echo "$Wsd>= 101.25" | bc))); then W_nc="E-SE"; fi; if (($(echo "$Wsd>= 123.75" | bc))); then W_nc="SE"; fi; if (($(echo "$Wsd>= 146.25" | bc))); then W_nc="S-SE"; fi; if (($(echo "$Wsd>= 168.75" | bc))); then W_nc="S"; fi; if (($(echo "$Wsd>= 191.25" | bc))); then W_nc="S-SW"; fi; if (($(echo "$Wsd>= 213.75" | bc))); then W_nc="SW"; fi; if (($(echo "$Wsd>= 236.25" | bc))); then W_nc="W-SW"; fi; if (($(echo "$Wsd>= 258.75" | bc))); then W_nc="W"; fi; if (($(echo "$Wsd>= 281.25" | bc))); then W_nc="W-NW"; fi; if (($(echo "$Wsd>= 303.75" | bc))); then W_nc="NW"; fi; if (($(echo "$Wsd>= 326.25" | bc))); then W_nc="N-NW"; fi; if (($(echo "$Wsd>= 348.75" | bc))); then W_nc="N"; fi; if (($(echo "$Wsd> 360" | bc))); then W_nc="-?-"; fi; if (($(echo "$Wsd< 0" | bc))); then W_nc="-?-"; fi if [ "$Wsd" = "null" ]; then W_nc="-?-"; fi; # print to video all data.. echo " " echo " " echo " " $city_name","$L " " "Lat: "$Lat " " "Lon: "$Lon " " echo " " "Forecast: "$data_U echo " " echo " " "Weather: "$Wcond_n"," $Wcond_nd echo " " echo " " "T.morn. (C°): "$TM " " "T.day (C°): "$TD " " "T.even. (C°): "$TE " " "T.night (C°): "$TN echo " " echo " " "Tmax (C°): "$Tmax" " "Tmin (C°): "$Tmin " " "Humidity (%): "$Hm echo " " echo " " "Pressure (hPa): "$PrS " " "Rain (mm): "$R " " "Snow (mm): "$S echo " " echo " " "Wind speed (km/h): "$WsKM " " "Wind deg (°): "$Wsd " " "Wind dir: "$W_nc echo " " done } if [ -z "$2" ]; then get_Mdata; Meteo_now ; fi if [ "$2" = "-f" ]; then get_Mdata; forecast5 ; fi if [ "$2" = "-a" ]; then get_Mdata; Meteo_now ; forecast5 ; fi if [ "$2" = "-j" ]; then echo "get weather data.."; get_Mdata; fi