Go言語で RSS Feed を取得する

Go言語を最近やっているがまだまだわからないことが多い。とりあえず簡単そうなとこでRSSを取得して表示するものを書いてみた。
RSSlivedoorの 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℃でしょう。 

ramtiga/go-weather-xml · GitHub