From 4eb2fdbb7fd9c7ad23df393b1d7ab2d4fe50f630 Mon Sep 17 00:00:00 2001 From: superryanguo Date: Sat, 1 Apr 2017 15:38:44 +0800 Subject: [PATCH 1/2] fix the resp close issue --- mybot.go | 1 + slack.go | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/mybot.go b/mybot.go index d59be84..e8f8f58 100644 --- a/mybot.go +++ b/mybot.go @@ -80,6 +80,7 @@ func getQuote(sym string) string { if err != nil { return fmt.Sprintf("error: %v", err) } + defer resp.Body.Close() rows, err := csv.NewReader(resp.Body).ReadAll() if err != nil { return fmt.Sprintf("error: %v", err) diff --git a/slack.go b/slack.go index 3ef645c..6fb15d7 100644 --- a/slack.go +++ b/slack.go @@ -63,7 +63,7 @@ func slackStart(token string) (wsurl, id string, err error) { return } body, err := ioutil.ReadAll(resp.Body) - resp.Body.Close() + defer resp.Body.Close() if err != nil { return } From 14c0be1c907480ccebd05412e062349b72e76775 Mon Sep 17 00:00:00 2001 From: superryanguo Date: Sat, 1 Apr 2017 16:18:21 +0800 Subject: [PATCH 2/2] add some weather info in bot --- mybot.go | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/mybot.go b/mybot.go index e8f8f58..16e6d44 100644 --- a/mybot.go +++ b/mybot.go @@ -27,13 +27,39 @@ package main import ( "encoding/csv" + "encoding/json" "fmt" + "io/ioutil" "log" "net/http" "os" "strings" ) +const ( + sTeamInfo = `teamInfo:TBD` + sBridge = ` call 400-800-400` + sHr = ` call 400-800-401` +) + +type WeatherInfoJson struct { + Weatherinfo WeatherinfoObject +} + +type WeatherinfoObject struct { + City string + CityId string + Temp string + WD string + WS string + SD string + WSE string + Time string + IsRadar string + Radar string + Rain string +} + func main() { if len(os.Args) != 2 { fmt.Fprintf(os.Stderr, "usage: mybot slack-bot-token\n") @@ -61,7 +87,55 @@ func main() { m.Text = getQuote(parts[2]) postMessage(ws, m) }(m) - // NOTE: the Message object is copied, this is intentional + } else if (len(parts) == 3 && parts[1] == "weather" && parts[2] == "Guangzhou") || (len(parts) == 2 && parts[1] == "weather") { + go func(m Message) { + resp, err := http.Get("http://www.weather.com.cn/data/sk/101280101.html") + if err != nil { + log.Fatal(err) + } + + defer resp.Body.Close() + input, err := ioutil.ReadAll(resp.Body) + + var jsonWeather WeatherInfoJson + json.Unmarshal(input, &jsonWeather) + + m.Text = fmt.Sprintf("weatherInfo: \n City:%s \n Wind:%s-%s\n Rain:%s\n Temp:%s\n Time:%s", jsonWeather.Weatherinfo.City, jsonWeather.Weatherinfo.WD, jsonWeather.Weatherinfo.WS, jsonWeather.Weatherinfo.Rain, jsonWeather.Weatherinfo.Temp, jsonWeather.Weatherinfo.Time) + + postMessage(ws, m) + }(m) + } else if len(parts) == 3 && parts[1] == "weather" && parts[2] == "Beijing" { + go func(m Message) { + resp, err := http.Get("http://www.weather.com.cn/data/sk/101010100.html") + if err != nil { + log.Fatal(err) + } + + defer resp.Body.Close() + input, err := ioutil.ReadAll(resp.Body) + + var jsonWeather WeatherInfoJson + json.Unmarshal(input, &jsonWeather) + + m.Text = fmt.Sprintf("weatherInfo: \n City:%s \n Wind:%s-%s\n Rain:%s\n Temp:%s\n Time:%s", jsonWeather.Weatherinfo.City, jsonWeather.Weatherinfo.WD, jsonWeather.Weatherinfo.WS, jsonWeather.Weatherinfo.Rain, jsonWeather.Weatherinfo.Temp, jsonWeather.Weatherinfo.Time) + + postMessage(ws, m) + }(m) + } else if len(parts) == 2 && parts[1] == "team" { + go func(m Message) { + m.Text = sTeamInfo + postMessage(ws, m) + }(m) + } else if len(parts) == 2 && parts[1] == "bridge" { + go func(m Message) { + m.Text = sBridge + postMessage(ws, m) + }(m) + } else if len(parts) == 2 && parts[1] == "hr" { + go func(m Message) { + m.Text = sHr + postMessage(ws, m) + }(m) } else { // huh? m.Text = fmt.Sprintf("sorry, that does not compute\n")