diff --git a/bot/metar.go b/bot/metar.go index cf4efc8..bf09a31 100644 --- a/bot/metar.go +++ b/bot/metar.go @@ -11,6 +11,81 @@ import ( "time" ) +type MetarResponse struct { + Meta struct { + Timestamp time.Time `json:"timestamp"` + StationsUpdated string `json:"stations_updated"` + } `json:"meta"` + Altimeter struct { + Repr string `json:"repr"` + Value float64 `json:"value"` + Spoken string `json:"spoken"` + } `json:"altimeter"` + Clouds []interface{} `json:"clouds"` + FlightRules string `json:"flight_rules"` + Other []interface{} `json:"other"` + Sanitized string `json:"sanitized"` + Visibility struct { + Repr string `json:"repr"` + Value int `json:"value"` + Spoken string `json:"spoken"` + } `json:"visibility"` + WindDirection struct { + Repr string `json:"repr"` + Value int `json:"value"` + Spoken string `json:"spoken"` + } `json:"wind_direction"` + WindGust struct { + Repr string `json:"repr"` + Value int `json:"value"` + Spoken string `json:"spoken"` + } `json:"wind_gust"` + WindSpeed struct { + Repr string `json:"repr"` + Value int `json:"value"` + Spoken string `json:"spoken"` + } `json:"wind_speed"` + WxCodes []interface{} `json:"wx_codes"` + Raw string `json:"raw"` + Station string `json:"station"` + Time struct { + Repr string `json:"repr"` + Dt time.Time `json:"dt"` + } `json:"time"` + Remarks string `json:"remarks"` + Dewpoint struct { + Repr string `json:"repr"` + Value int `json:"value"` + Spoken string `json:"spoken"` + } `json:"dewpoint"` + RemarksInfo struct { + DewpointDecimal struct { + Repr string `json:"repr"` + Value float64 `json:"value"` + Spoken string `json:"spoken"` + } `json:"dewpoint_decimal"` + TemperatureDecimal struct { + Repr string `json:"repr"` + Value float64 `json:"value"` + Spoken string `json:"spoken"` + } `json:"temperature_decimal"` + } `json:"remarks_info"` + RunwayVisibility []interface{} `json:"runway_visibility"` + Temperature struct { + Repr string `json:"repr"` + Value int `json:"value"` + Spoken string `json:"spoken"` + } `json:"temperature"` + WindVariableDirection []interface{} `json:"wind_variable_direction"` + Units struct { + Altimeter string `json:"altimeter"` + Altitude string `json:"altitude"` + Temperature string `json:"temperature"` + Visibility string `json:"visibility"` + WindSpeed string `json:"wind_speed"` + } `json:"units"` +} + func (b *Bot) HandleWeatherRequest(channelid string, postid string, message string) { // we are using a very bare image with no CA cert bundle @@ -52,7 +127,16 @@ func (b *Bot) HandleWeatherRequest(channelid string, postid string, message stri data, _ := ioutil.ReadAll(resp.Body) - log.Info().Msgf("weather %s: %s", loc, data) - b.SendMsgToChannel(fmt.Sprintf("weather %s: %s", loc, data), postid, channelid) + var parsedMetarResponse MetarResponse + log.Info().Msgf("weather %s: %s", loc, data) + + err = nil + err = json.Unmarshal([]byte(data), &parsedMetarResponse) + + if err != nil { + b.SendMsgToChannel("error deserializing metar data", postid, channelid) + return + } + b.SendMsgToChannel(fmt.Sprintf("weather for `%s`: \n```\n%+v\n```\n", loc, parsedMetarResponse), postid, channelid) }