Go言語で RSS Feed を取得する
Go言語を最近やっているがまだまだわからないことが多い。とりあえず簡単そうなとこでRSSを取得して表示するものを書いてみた。
RSSはlivedoorの Weather Hacks を利用した。
処理の流れ
- net/http の http.get でXMLデータを取得。
- http のレスポンスデータを io/ioutil の ReadAll に渡す。
- 取得するデータを struct 定義して encoding/xml の Unmarshal に渡す。
package main import ( "fmt" "encoding/xml" "net/http" "io/ioutil" "log" ) var FEED_URL string = "http://weather.livedoor.com/forecast/rss/area/130010.xml" type WeatherHack struct { Title string `xml:"channel>title"` Description []string `xml:"channel>item>description"` } func main() { wh, err := getWeather(FEED_URL) if err != nil { log.Fatalf("Log: %v", err) return } fmt.Println(wh.Title) for n, v := range wh.Description { if n > 0 { fmt.Printf("%s \n", v) } } } // Get Weather Hacaks func getWeather(feed string) (p *WeatherHack, err error) { res, err := http.Get(feed) if err != nil { return nil, err } b, err := ioutil.ReadAll(res.Body) if err != nil { return nil, err } wh := new(WeatherHack) err = xml.Unmarshal(b, &wh) return wh, err }
実行結果
$ go run go-weather-xml.go 東京都 - 東京の天気 - livedoor 天気情報 29日(火)の天気は曇時々雨、最高気温は16℃ でしょう。 30日(水)の天気は晴時々雨、最高気温は23℃ 最低気温は14℃でしょう。 31日(木)の天気は晴時々曇、最高気温は21℃ 最低気温は13℃でしょう。 01日(金)の天気は晴時々曇、最高気温は21℃ 最低気温は13℃でしょう。 02日(土)の天気は晴時々曇、最高気温は21℃ 最低気温は13℃でしょう。 03日(日)の天気は曇時々晴、最高気温は23℃ 最低気温は15℃でしょう。 04日(月)の天気は晴時々曇、最高気温は21℃ 最低気温は15℃でしょう。