猿问

如何使用 Golang 解码 Reddit 的 RSS?

我一直在玩 Go 的 XML 包,但看不出以下代码有什么问题。


package main


import (

    "encoding/xml"

    "fmt"

    "net/http"


type Channel struct {

    Items Item

}


type Item struct {

    Title       string `xml:"title"`

    Link        string `xml:"link"`

    Description string `xml:"description"`

}


func main() {


    var items = new(Channel)

    res, err := http.Get("http://www.reddit.com/r/google.xml")


    if err != nil {

        fmt.Printf("Error: %v\n", err)

    } else {

        decoded := xml.NewDecoder(res.Body)


        err = decoded.Decode(items)


        if err != nil {

            fmt.Printf("Error: %v\n", err)

        }


        fmt.Printf("Title: %s\n", items.Items.Title)

    }

}

上面的代码运行没有任何错误并打印到终端:


Title:

该结构似乎是空的,但我不明白为什么它没有被 XML 数据填充。


慕森卡
浏览 222回答 3
3回答

鸿蒙传说

如今,Reddit RSS 提要似乎已更改为该atom类型。这意味着常规解析将不再起作用。go-rss的 atom 功能可以解析这样的提要://Feed struct for RSStype Feed struct {  Entry []Entry `xml:"entry"`}//Entry struct for each Entry in the Feedtype Entry struct {  ID      string `xml:"id"`  Title   string `xml:"title"`  Updated string `xml:"updated"`}//Atom parses atom feedsfunc Atom(resp *http.Response) (*Feed, error) {  defer resp.Body.Close()  xmlDecoder := xml.NewDecoder(resp.Body)  xmlDecoder.CharsetReader = charset.NewReader  feed := Feed{}  if err := xmlDecoder.Decode(&feed); err != nil {      return nil, err  }  return &feed, nil}
随时随地看视频慕课网APP

相关分类

Go
我要回答