From a0fd6faafc0af0d937ff3c80f07110cc6d0491c1 Mon Sep 17 00:00:00 2001 From: eleksir Date: Sun, 7 May 2023 16:17:07 +0300 Subject: [PATCH] Introduce option country in config to use either country code or coordinates as secondary id for city. Looks like openweathermap.org gives incorrect or mangled coutry codes for some cities for whatever reasons. So we have to introduce this option in order to cool-down irritation of some engaging users. --- data/config_sample.json | 2 + lib/WebApp/Client.pm | 126 ++++++++++++++++++++++++++++------------ 2 files changed, 90 insertions(+), 38 deletions(-) diff --git a/data/config_sample.json b/data/config_sample.json index 2911d88..4568560 100644 --- a/data/config_sample.json +++ b/data/config_sample.json @@ -26,6 +26,8 @@ "forwards_max" : 5, "openweathermap" : { + # (For shitty political reasons) 0 - use coordinates instead of coutry code, 1 - use country codes + "country" : 0, "appid" : "get_it_on_openweathermap.org" }, diff --git a/lib/WebApp/Client.pm b/lib/WebApp/Client.pm index d30b6ec..fbab1b4 100644 --- a/lib/WebApp/Client.pm +++ b/lib/WebApp/Client.pm @@ -585,46 +585,96 @@ sub Weather { if ($w) { if ($w->{temperature_min} == $w->{temperature_max}) { - $reply = sprintf ( - "Погода в городе %s, %s:\n%s, ветер %s %s м/c, температура %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст", - $city, - $w->{country}, - ucfirst $w->{description}, - $w->{wind_direction}, - $w->{wind_speed}, - $w->{temperature_min}, - $w->{temperature_feelslike}, - $w->{humidity}, - $w->{pressure}, - ); + if ($c->{openweathermap}->{country}) { + $reply = sprintf ( + "Погода в городе %s, %s:\n%s, ветер %s %s м/c, температура %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст", + $city, + $w->{country}, + ucfirst $w->{description}, + $w->{wind_direction}, + $w->{wind_speed}, + $w->{temperature_min}, + $w->{temperature_feelslike}, + $w->{humidity}, + $w->{pressure}, + ); + } else { + $reply = sprintf ( + "Погода в городе %s, (ш:%s, д:%s):\n%s, ветер %s %s м/c, температура %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст", + $city, + $g->{lat}, + $g->{lon}, + ucfirst $w->{description}, + $w->{wind_direction}, + $w->{wind_speed}, + $w->{temperature_min}, + $w->{temperature_feelslike}, + $w->{humidity}, + $w->{pressure}, + ); + } } elsif ($w->{temperature_min} < 0 && $w->{temperature_max} <= 0) { - $reply = sprintf ( - "Погода в городе %s, %s:\n%s, ветер %s %s м/c, температура от %s до %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст", - $w->{name}, - $w->{country}, - ucfirst $w->{description}, - $w->{wind_direction}, - $w->{wind_speed}, - $w->{temperature_max}, - $w->{temperature_min}, - $w->{temperature_feelslike}, - $w->{humidity}, - $w->{pressure}, - ); + if ($c->{openweathermap}->{country}) { + $reply = sprintf ( + "Погода в городе %s, %s:\n%s, ветер %s %s м/c, температура от %s до %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст", + $w->{name}, + $w->{country}, + ucfirst $w->{description}, + $w->{wind_direction}, + $w->{wind_speed}, + $w->{temperature_max}, + $w->{temperature_min}, + $w->{temperature_feelslike}, + $w->{humidity}, + $w->{pressure}, + ); + } else { + $reply = sprintf ( + "Погода в городе %s, (ш:%s, д:%s):\n%s, ветер %s %s м/c, температура от %s до %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст", + $w->{name}, + $g->{lat}, + $g->{lon}, + ucfirst $w->{description}, + $w->{wind_direction}, + $w->{wind_speed}, + $w->{temperature_max}, + $w->{temperature_min}, + $w->{temperature_feelslike}, + $w->{humidity}, + $w->{pressure}, + ); + } } else { - $reply = sprintf ( - "Погода в городе %s, %s:\n%s, ветер %s %s м/c, температура от %s до %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст", - $w->{name}, - $w->{country}, - ucfirst $w->{description}, - $w->{wind_direction}, - $w->{wind_speed}, - $w->{temperature_min}, - $w->{temperature_max}, - $w->{temperature_feelslike}, - $w->{humidity}, - $w->{pressure}, - ); + if ($c->{openweathermap}->{country}) { + $reply = sprintf ( + "Погода в городе %s, %s:\n%s, ветер %s %s м/c, температура от %s до %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст", + $w->{name}, + $w->{country}, + ucfirst $w->{description}, + $w->{wind_direction}, + $w->{wind_speed}, + $w->{temperature_min}, + $w->{temperature_max}, + $w->{temperature_feelslike}, + $w->{humidity}, + $w->{pressure}, + ); + } else { + $reply = sprintf ( + "Погода в городе %s, (ш:%s, д:%s):\n%s, ветер %s %s м/c, температура от %s до %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст", + $w->{name}, + $g->{lat}, + $g->{lon}, + ucfirst $w->{description}, + $w->{wind_direction}, + $w->{wind_speed}, + $w->{temperature_min}, + $w->{temperature_max}, + $w->{temperature_feelslike}, + $w->{humidity}, + $w->{pressure}, + ); + } } } else { $reply = "Я не знаю, какая погода в $city";