From 354da79bb2edaa1af7d909d2774e7d67eb4e198c Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 23 Jan 2018 18:17:51 +0100 Subject: Add vendor --- vendor/dim13.org/rss/rss.go | 77 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 vendor/dim13.org/rss/rss.go (limited to 'vendor/dim13.org/rss/rss.go') diff --git a/vendor/dim13.org/rss/rss.go b/vendor/dim13.org/rss/rss.go new file mode 100644 index 0000000..625e062 --- /dev/null +++ b/vendor/dim13.org/rss/rss.go @@ -0,0 +1,77 @@ +// Package rss implements RSS fetcher +package rss + +import ( + "encoding/xml" + "errors" + "net/http" + "strings" + "time" + + "golang.org/x/net/html/charset" +) + +// RSS container +type RSS struct { + Version string `xml:"version,attr"` + Channel Channel `xml:"channel"` +} + +// Time in RFC1123Z or RFC1123 format +type Time struct { + time.Time +} + +// Channel container +type Channel struct { + Link string `xml:"link"` + Language string `xml:"language"` + Title string `xml:"title"` + Description string `xml:"description"` + PubDate Time `xml:"pubDate"` + Items []Item `xml:"item"` +} + +// Item container +type Item struct { + Author string `xml:"author"` + Link string `xml:"link"` + GUID string `xml:"guid"` + Title string `xml:"title"` + PubDate Time `xml:"pubDate"` +} + +var formats = []string{ + `Mon, _2 Jan 2006 15:04:05 -0700`, // like RFC1123Z + `Mon, _2 Jan 2006 15:04:05 MST`, // like RFC1123 +} + +// UnmarshalXML decodes Time format +func (t *Time) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { + var v string + d.DecodeElement(&v, &start) + v = strings.TrimSpace(v) + for _, f := range formats { + if parse, err := time.Parse(f, v); err == nil { + *t = Time{parse} + return nil + } + } + return errors.New(v) +} + +// Fetch and parse RSS from given URL +func Fetch(url string) (rss RSS, err error) { + resp, err := http.Get(url) + if err != nil { + return rss, err + } + defer resp.Body.Close() + decoder := xml.NewDecoder(resp.Body) + decoder.CharsetReader = charset.NewReaderLabel + err = decoder.Decode(&rss) + if err != nil { + return rss, err + } + return rss, nil +} -- cgit v1.2.3