From fa70bda122b8dfe987691f3cac3dcb6426c5dfb0 Mon Sep 17 00:00:00 2001 From: JP Date: Tue, 9 Jun 2020 22:23:15 +0200 Subject: [PATCH] Weather fixes. - BBQ grade is less pessimistic. - Fix for unknown weather icons. --- Shitpost.py | 50 ++++++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/Shitpost.py b/Shitpost.py index 2824ace..a42ac41 100644 --- a/Shitpost.py +++ b/Shitpost.py @@ -485,21 +485,6 @@ class Shitpost(object): Omdat je te lui bent om naar buiten te kijken. Oant Moarn! """ - weatherIconTranslation = { - "zonnig" : ":sun_with_face:", - "bliksem" : ":cloud_lightning:", - "regen" : ":cloud_rain:", - "buien" : ":umbrella:", - "hagel" : ":cloud_snow:", - "mist" : ":white_large_square:", - "sneeuw" : ":cloud_snow:", - "bewolkt" : ":white_sun_cloud:", - "halfbewolkt" : ":partly_sunny:", - "zwaarbewolkt" : ":cloud:", - "nachtmist" : ":ghost:", - "helderenacht" : ":first_quarter_moon_with_face:", - "wolkennacht" : ":cloud:" - } if(location == ""): location = "Leiden" if(str(verbose).lower() == "false"): @@ -526,14 +511,14 @@ class Shitpost(object): message += ":warning: Er is een weeralarm van kracht. Code " + alertCode + ".\n\n" # Today: - message += weatherIconTranslation[ wData["liveweer"][0]["image"] ] + message += self.getWeatherIconTranslation( wData["liveweer"][0]["image"] ) message += " Het is " + wData["liveweer"][0]["temp"] + " graden " message += "en het weer is: " + wData["liveweer"][0]["samenv"] + ". " message += "De verwachting: " + wData["liveweer"][0]["verw"] if (v): # Only print tomorrow, the day after and the BBQ grade if verbose is on: - message += "\n\nMorgen: " + weatherIconTranslation[ wData["liveweer"][0]["d1weer"] ] + message += "\n\nMorgen: " + self.getWeatherIconTranslation( wData["liveweer"][0]["d1weer"] ) message += " " + wData["liveweer"][0]["d1tmin"] + " tot " message += wData["liveweer"][0]["d1tmax"] + " graden. " if (wData["liveweer"][0]["d1neerslag"] == "0"): @@ -543,7 +528,7 @@ class Shitpost(object): if (int(wData["liveweer"][0]["d1windk"]) > 5): message += "Windkracht " + wData["liveweer"][0]["d1windk"] + ". Blow it." - message += "\n\nOvermorgen: "+ weatherIconTranslation[ wData["liveweer"][0]["d2weer"] ] + message += "\n\nOvermorgen: "+ self.getWeatherIconTranslation( wData["liveweer"][0]["d2weer"] ) message += " " + wData["liveweer"][0]["d2tmin"] + " tot " message += wData["liveweer"][0]["d2tmax"] + " graden. " if (wData["liveweer"][0]["d2neerslag"] == "0"): @@ -561,7 +546,30 @@ class Shitpost(object): yield from ctx.channel.send(message) else: print("API ERROR. :robot:") - + + #returns a nice weather icon. Sometimes the API uses non-documented icons, so we return something else + def getWeatherIconTranslation(self, iconKey): + WEATHER_ICONS = { + "zonnig" : ":sun_with_face:", + "bliksem" : ":cloud_lightning:", + "regen" : ":cloud_rain:", + "buien" : ":umbrella:", + "hagel" : ":cloud_snow:", + "mist" : ":white_large_square:", + "sneeuw" : ":cloud_snow:", + "bewolkt" : ":white_sun_cloud:", + "halfbewolkt" : ":partly_sunny:", + "zwaarbewolkt" : ":cloud:", + "nachtmist" : ":ghost:", + "helderenacht" : ":first_quarter_moon_with_face:", + "wolkennacht" : ":cloud:" + } + try: + return WEATHER_ICONS[iconKey] + except KeyError: + print("WARN Unknown iconKey:", str(iconKey)) + return ":park:" + #returns which the current weatheralert code and returns a message def getWeerAlarm(self, weatherObj): if (weatherObj["alarm"] != "1"): @@ -576,12 +584,10 @@ class Shitpost(object): def getBbqGrade(self, weatherObj): grade = 1.0 try: - averageTemp = (float(weatherObj["d0tmin"]) + float(weatherObj["d0tmax"])) / 2 - #add up to 4.0 points for sun: grade += float(weatherObj["d0zon"]) / 25 #add up to 5.0 points for temperature: - grade += min(5.0, averageTemp*averageTemp/125) + grade += min(5.0, float(weatherObj["d0tmax"])*float(weatherObj["d0tmax"])/130) #remove up to 5.0 points for rain/snow: grade -= float(weatherObj["d0neerslag"]) / 20