为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Golang 解码 Reddit 的 RSS?

如何使用 Golang 解码 Reddit 的 RSS?

Go
慕森卡 2021-06-17 03:12:21
我一直在玩 Go 的 XML 包,但看不出以下代码有什么问题。package mainimport (    "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 数据填充。
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

如今,Reddit RSS 提要似乎已更改为该atom类型。这意味着常规解析将不再起作用。go-rss的 atom 功能可以解析这样的提要:


//Feed struct for RSS

type Feed struct {

  Entry []Entry `xml:"entry"`

}


//Entry struct for each Entry in the Feed

type Entry struct {

  ID      string `xml:"id"`

  Title   string `xml:"title"`

  Updated string `xml:"updated"`

}


//Atom parses atom feeds

func 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

}


查看完整回答
反对 回复 2021-06-28
  • 3 回答
  • 0 关注
  • 221 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信