Atnaujinta terminalo lango spalvota orų programėlė

 Atnaujinta 2024.05.19. Šiame variante sukuriamas asociatyvinis masyvas weather_translations, kurio raktai yra orų sąlygų pavadinimai, o reikšmės – jų vertimai. Funkcija get_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.

Github

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="">

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

Populiarūs šio tinklaraščio įrašai

Configuring a NixOS firewall for everyday use

Setting up syncthing as a service on openSUSE and other Linux distributions

Monitoring SFTP server updates with Python