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).
#!/bin/bashweather_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")clearget_weather_translation() { case $1 in clear ) echo "Giedra" ;; partly-cloudy ) echo "Mažai debesuota" ;; cloudy-with-sunny-intervals ) echo "Debesuota su pragiedruliais" ;; cloudy ) echo "Debesuota" ;; thunder ) echo "Perkūnija" ;; isolated-thunderstorms ) echo "Trumpas lietus su perkūnija" ;; thunderstorms ) echo "Lietus su perkūnija" ;; heavy-rain-with-thunderstorms ) echo "Smarkus lietus su perkūnija" ;; light-rain ) echo "Nedidelis lietus" ;; rain ) echo "Lietus" ;; heavy-rain ) echo "Smarkus lietus" ;; light-sleet ) echo "Nedidelė šlapdriba" ;; sleet ) echo "Šlapdriba" ;; freezing-rain ) echo "Lijundra" ;; hail ) echo "Kruša" ;; light-snow ) echo "Nedidelis sniegas" ;; snow ) echo "Sniegas" ;; heavy-snow ) echo "Smarkus sniegas" ;; fog ) echo "Rūkas" ;; null ) echo "Oro sąlygos nenustatytos" ;; * ) echo "Neatpažinta orų sąlyga" ;; esac}get_wind_direction() { local degrees=$1 if [ "$degrees" -lt 22 ] || [ "$degrees" -ge 338 ]; then echo "Šiaurės" elif [ "$degrees" -lt 68 ]; then echo "Šiaurės rytų" elif [ "$degrees" -lt 112 ]; then echo "Rytų" elif [ "$degrees" -lt 158 ]; then echo "Pietų rytų" elif [ "$degrees" -lt 202 ]; then echo "Pietų" elif [ "$degrees" -lt 248 ]; then echo "Pietų vakarų" elif [ "$degrees" -lt 292 ]; then echo "Vakarų" else echo "Šiaurės vakarų" fi}get_day_of_week() { date -d "$1" "+%A"}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; i+=1)); do forecast_time=$(echo "$weather_data" | jq ".forecastTimestamps[$i].forecastTimeUtc" | sed 's/"//g') forecast_date=$(date -d "$forecast_time" "+%Y-%m-%d") forecast_hour=$(date -d "$forecast_time" "+%H:%M") air_temp=$(echo "$weather_data" | jq ".forecastTimestamps[$i].airTemperature" | xargs printf "%.1f") feels_like_temp=$(echo "$weather_data" | jq ".forecastTimestamps[$i].feelsLikeTemperature" | xargs printf "%.1f") cloud_cover=$(echo "$weather_data" | jq ".forecastTimestamps[$i].cloudCover" | xargs printf "%.1f") condition_code=$(echo "$weather_data" | jq ".forecastTimestamps[$i].conditionCode" | sed 's/"//g') wind_speed=$(echo "$weather_data" | jq ".forecastTimestamps[$i].windSpeed" | xargs printf "%.1f") wind_gust=$(echo "$weather_data" | jq ".forecastTimestamps[$i].windGust" | xargs printf "%.1f") sea_level_pressure=$(echo "$weather_data" | jq ".forecastTimestamps[$i].seaLevelPressure" | xargs printf "%.1f") total_precipitation=$(echo "$weather_data" | jq ".forecastTimestamps[$i].totalPrecipitation" | xargs printf "%.1f") if [[ "$forecast_date" != "$previous_date" ]]; then day_of_week=$(get_day_of_week "$forecast_date") echo "$forecast_date ($day_of_week)" previous_date="$forecast_date" fi wind_speed_formatted=$(printf "%.1f" "$wind_speed" | tr ',' '.') wind_gust_formatted=$(printf "%.1f" "$wind_gust" | tr ',' '.') printf "%-10s %-6s %-6s %-10s %-10s %-9s %-12s %-10s\n" "$forecast_hour" "$(printf "%.1f" "$air_temp" | tr ',' '.') °C" "$(printf "%.1f" "$feels_like_temp" | tr ',' '.') °C" "$(printf "%.1f" "$cloud_cover" | tr ',' '.') %" "$(printf "%.1f" "$total_precipitation" | tr ',' '.') mm" "$wind_speed_formatted ($wind_gust_formatted) m/s" "$(printf "%.1f" "$sea_level_pressure" | tr ',' '.') hPa" "$(get_weather_translation "$condition_code")"doneechotoday_air_quality=$(echo "$pollen_data" | jq '.result[0].air_quality')today_dayrisk=$(echo "$pollen_data" | jq '.result[0].dayrisk')tomorrow_air_quality=$(echo "$pollen_data" | jq '.result[1].air_quality')tomorrow_dayrisk=$(echo "$pollen_data" | jq '.result[1].dayrisk')echo "Oro kokybė: $today_air_quality"echo "Alergijos rizika: $today_dayrisk"read -p "Spauskite Enter, kad išvalytumėte terminalo langą..." inputclear
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!
https://funkcijos.wordpress.com/2024/05/17/atnaujinta-terminalo-lango-oru-programele/
#bash #meteo #orai #Programavimas