Atnaujinta terminalo lango spalvota orų programėlė
Atnaujinta 2024.05.19. Šiame variante sukuriamas asociatyvinis masyvasweather_translations
, kurio raktai yra orų sąlygų pavadinimai, o reikšmės – jų vertimai. Funkcijaget_weather_translation
tiesiog ieško nurodytos orų sąlygos vertimo masyve. Jei vertimas nerastas, išvedamas pranešimas “Neatpažinta orų sąlyga“. Pridėtos ikonėlės ir spalvos.
Pridėta informacija apie šios dienos vandens temperatūrą Baltijos jūroje.
Sveiki! Šiandien papasakosiu apie atnaujintą savo orų programėlę,
kuri veikia terminale. Pritaikiau ją rodyti išsamesnę informaciją ir
patobulinau pateikimą.
Naujasis orų programėlės kodas pasižymi ne tik
išplėstomis funkcijomis, bet ir žymiai patobulintu profesionalumu bei
aiškumu. Palyginus su ankstesne versija, kurią būtų galima vadinti
mėgėjiška, šis variantas atspindi profesionalų požiūrį į programavimą.
- Kodo struktūra tapo aiškesnė ir lengviau suprantama, naudojant prasmingus pavadinimus ir komentarus.
- Efektyviai naudojami duomenų struktūros ir algoritmai.
- Patobulinta klaidų valdymo logika.
- Kodas atitinka gerosios programavimo praktikos principus.
Programos veikimo principai (How the App Works)
Programėlė iš Lietuvos hidrometeorologijos tarnybos (LHMT) API gauna Klaipėdos ilgalaikės orų prognozės duomenis. Taip pat ji iš Pollenwarnungstdienst svetainės paima informaciją apie oro kokybę ir alergijos riziką.
Atnaujinimai (Updates)
- Išsamesnė prognozė: Dabar programėlė rodo ne tik šios dienos ir rytojaus orų prognozę kas valandą, bet ir kitų kelių dienų orų prognozę kas tris valandas.
- Dienos pavadinimas: Prie kiekvienos dienos prognozės nurodoma ir tos dienos pavadinimas (pvz., pirmadienis, antradienis).
- Vėjo gūsiai: Be vėjo greičio, dabar rodoma ir vėjo gūsių informacija.
- Slėgio pokyčiai: Programėlė neberodo slėgio pokyčių, tačiau vis tiek pateikiama aktuali oro slėgio reikšmė.
- Oro reiškiniai: Vietoje bendro oro sąlygų aprašymo, dabar kiekvienam laiko intervalui pateikiamas konkretus reiškinys lietuviškai (pvz., giedra, lietus, sniegas).
Spalvų pridėjimas ir jų reikšmės:
Norint pagerinti informacijos aiškumą ir greitą suvokimą, programėlėje buvo pridėtos spalvos. Šios spalvos padeda greitai atskirti skirtingas orų sąlygas:
- Temperatūra:
- Normali spalva (be pakeitimų) reiškia, kad temperatūra yra žemesnė nei 15 °C.
- Geltona spalva naudojama, kai temperatūra yra nuo 15 °C iki 20 °C.
- Tamsiai geltona spalva reiškia temperatūrą nuo 20 °C iki 25 °C.
- Oranžinė spalva žymi temperatūrą virš 25 °C.
- Krituliai:
- Šviesiai mėlyna spalva naudojama, kai kritulių kiekis yra mažesnis nei 5 mm.
- Mėlyna spalva žymi kritulius nuo 5 mm iki 10 mm.
- Žalia mėlyna spalva reiškia kritulius daugiau nei 10 mm.
- Debesuotumas:
- Normali spalva (be pakeitimų) naudojama, kai debesuotumas yra mažesnis nei 25 %.
- Šviesiai pilka spalva žymi debesuotumą nuo 25 % iki 50 %.
- Pilka spalva reiškia debesuotumą nuo 50 % iki 75 %.
- Tamsiai pilka spalva naudojama, kai debesuotumas viršija 75 %.
Spalvų naudojimas ne tik padidina programėlės aiškumą, bet ir suteikia profesionalumo įspūdį, leidžiant vartotojams greitai ir efektyviai suvokti svarbiausią informaciją.
#!/bin/bash
weather_data=$(curl -s "https://api.meteo.lt/v1/places/klaipeda/forecasts/long-term")
pollen_data=$(curl -s "https://www.pollenwarndienst.at/index.php?eID=appinterface&action=getAdditionalForecastData&type=city&value=801&country=LT&lang_code=en&lang_id=1&pure_json=1&cordova=1&pasyfo=1")
water_data=$(curl -s "https://api.meteo.lt/v1/hydro-stations/klaipedos-juru-uosto-vms/observations/measured/latest")
clear
declare -A weather_translations=(
[clear]="Giedra ☀️"
[partly-cloudy]="Mažai debesuota 🌤"
[cloudy-with-sunny-intervals]="Debesuota su pragiedruliais ⛅"
[cloudy]="Debesuota ☁️"
[thunder]="Perkūnija ⛈"
[isolated-thunderstorms]="Trumpas lietus su perkūnija 🌦"
[thunderstorms]="Lietus su perkūnija 🌩"
[heavy-rain-with-thunderstorms]="Smarkus lietus su perkūnija 🌧"
[light-rain]="Nedidelis lietus 🌦"
[rain]="Lietus 🌧"
[heavy-rain]="Smarkus lietus 🌧"
[light-sleet]="Nedidelė šlapdriba 🌨"
[sleet]="Šlapdriba 🌨"
[freezing-rain]="Lijundra 🌧"
[hail]="Kruša 🌨"
[light-snow]="Nedidelis sniegas 🌨"
[snow]="Sniegas 🌨"
[heavy-snow]="Smarkus sniegas 🌨"
[fog]="Rūkas 🌫"
[null]="Oro sąlygos nenustatytos"
)
get_weather_translation() {
local translation="${weather_translations[$1]}"
if [ -n "$translation" ]; then
echo "$translation"
else
echo "Neatpažinta orų sąlyga"
fi
}
get_wind_direction() {
local degrees=$1
if (( degrees >= 0 && degrees <= 22 )) || (( degrees >= 338 && degrees <= 360 )); then
echo "Šiaurės"
elif (( degrees >= 23 && degrees <= 67 )); then
echo "Šiaurės rytų"
elif (( degrees >= 68 && degrees <= 112 )); then
echo "Rytų"
elif (( degrees >= 113 && degrees <= 157 )); then
echo "Pietų rytų"
elif (( degrees >= 158 && degrees <= 202 )); then
echo "Pietų"
elif (( degrees >= 203 && degrees <= 247 )); then
echo "Pietų vakarų"
elif (( degrees >= 248 && degrees <= 292 )); then
echo "Vakarų"
elif (( degrees >= 293 && degrees <= 337 )); then
echo "Šiaurės vakarų"
else
echo "Neatpažinta vėjo kryptis"
fi
}
get_day_of_week() {
date -d "$1" "+%A"
}
get_precipitation_color() {
local precipitation=$1
local intensity=$(printf "%.0f" "$precipitation")
if (( $(printf "%.1f" "$precipitation") > 0 )); then
if (( "$intensity" < 5 )); then
echo -e "\033[0;34m" # Šviesiai mėlyna
elif (( "$intensity" < 10 )); then
echo -e "\033[0;34;1m" # Mėlyna
else
echo -e "\033[0;34;3m" # Žalia mėlyna (be mirksėjimo)
fi
else
echo -e "\033[0m" # Įprasta spalva
fi
}
get_temperature_color() {
local temperature=$1
if (( $(printf "%.0f" "$temperature") < 10 )); then
echo -e "\x1b[38;5;230m" # Įprasta spalva
elif (( $(printf "%.0f" "$temperature") < 20 )); then
echo -e "\033[38;5;229m" # Geltona
elif (( $(printf "%.0f" "$temperature") < 25 )); then
echo -e "\x1b[38;5;215m" # Tamsiai geltona
else
echo -e "\x1b[38;5;209m" # Oranžinė (be mirksėjimo)
fi
}
get_cloud_cover_color() {
local cloud_cover=$1
if (( $(printf "%.0f" "$cloud_cover") < 25 )); then
echo -e "\033[0m" # Įprasta spalva
elif (( $(printf "%.0f" "$cloud_cover") < 50 )); then
echo -e "\033[0;37;1m" # Šviesiai pilka
elif (( $(printf "%.0f" "$cloud_cover") < 75 )); then
echo -e "\033[0;37;3m" # Pilka (be mirksėjimo)
else
echo -e "\033[0;37;7m" # Tamsiai pilka
fi
}
reset_color="\033[0m"
printf "%-10s %-6s %-6s %-10s %-10s %-9s %-12s %-10s\n" "Klaipėda" "Oro" "Junt." "Debesuo-" "Krituliai" "Vėjas" "Slėgis" "Reiškiniai"
printf "%-10s %-6s %-6s %-10s %-10s %-9s %-12s %-10s\n" "Data" "temp." "temp." "tumas" "" "(gūsis)" "" ""
printf "%-10s %-6s %-6s %-10s %-10s %-9s %-12s %-10s\n" "------" "------" "------" "----------" "----------" "---------" "------------" "----------"
previous_date=""
for ((i=0; i<72 -d="" -p="" air_quality="" air_temp="" airtemperature="" andens="" b="" baltijos="" clear="" cloud_cover="" cloud_cover_color="" cloudcover="" code="" condition_code="" conditioncode="" d="" day_of_week="" dayrisk="" do="" done="" echo="" enter="" f="" feels_like_temp="" feelsliketemperature="" fi="" forecast_date="" forecast_hour="" forecast_time="" forecasttimestamps="" forecasttimeutc="" g="" get_weather_translation="" hpa="" i="" if="" input="" j="" jq="" kad="" kokyb="" lang="" lergijos="" m-="" m="" mm="" n="" observations="" pauskite="" pollen_data="" precipitation_color="" previous_date="$forecast_date" printf="" ra="" read="" reset_color="" result="" rizika:="" ro="" roje:="" s="" sea_level_pressure="" sealevelpressure="" sed="" te="" temperat="" temperature_color="" terminalo="" then="" today_air_quality="" today_dayrisk="" tomorrow_air_quality="$(echo" tomorrow_dayrisk="$(echo" total_precipitation="" totalprecipitation="" tr="" valytum="" water_data="" water_temperature="" watertemperature="" weather_data="" wind_gust="" wind_gust_formatted="" wind_speed="" wind_speed_formatted="" windgust="" windspeed="" xargs="">72>
Papildoma informacija (Additional Information)
Programėlės pabaigoje pateikiama aktuali informacija apie oro kokybę ir alergijos riziką Klaipėdoje.
Išvada (Conclusion)
Tikiuosi, kad šis atnaujinimas padarė mano orų programėlę naudingesnę ir informatyvesnę. Jei turite pasiūlymų dėl tolesnių patobulinimų, mielai juos išgirsiu!
Komentarai
Rašyti komentarą