Merge pull request #1 from marcinwyszynski/master

Make the RSS reader smart about encodings
This commit is contained in:
Erik Unger 2013-03-15 00:50:19 -07:00
commit e1b5632521

17
rss.go
View file

@ -5,9 +5,11 @@ package rss
import ( import (
"encoding/xml" "encoding/xml"
"io/ioutil"
"net/http" "net/http"
"time" "time"
"code.google.com/p/go-charset/charset"
_ "code.google.com/p/go-charset/data"
) )
type Channel struct { type Channel struct {
@ -39,7 +41,8 @@ type Item struct {
type Date string type Date string
func (self Date) Parse() (time.Time, error) { func (self Date) Parse() (time.Time, error) {
t, err := time.Parse("Mon, 02 Jan 2006 15:04:05 -0700", string(self)) // Wordpress format // Wordpress format
t, err := time.Parse("Mon, 02 Jan 2006 15:04:05 -0700", string(self))
if err != nil { if err != nil {
t, err = time.Parse(time.RFC822, string(self)) // RSS 2.0 spec t, err = time.Parse(time.RFC822, string(self)) // RSS 2.0 spec
} }
@ -67,20 +70,16 @@ func Read(url string) (*Channel, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer response.Body.Close() defer response.Body.Close()
text, err := ioutil.ReadAll(response.Body) xmlDecoder := xml.NewDecoder(response.Body)
if err != nil { xmlDecoder.CharsetReader = charset.NewReader
return nil, err
}
var rss struct { var rss struct {
Channel Channel `xml:"channel"` Channel Channel `xml:"channel"`
} }
err = xml.Unmarshal(text, &rss) err = xmlDecoder.Decode(&rss)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &rss.Channel, nil return &rss.Channel, nil
} }