aboutsummaryrefslogtreecommitdiffhomepage
path: root/reader/rss
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <fred@miniflux.net>2018-04-09 20:30:55 -0700
committerGravatar Frédéric Guillot <fred@miniflux.net>2018-04-09 20:30:55 -0700
commitf76093690c0b3a1364269e0bfc9086ac9f60f184 (patch)
tree29c27a4ab48219162a22588b82de56b7c45514b6 /reader/rss
parent7640a8cbab897b6791e885534ec9650dee669ce2 (diff)
Get the right comments URL when having multiple namespaces
Diffstat (limited to 'reader/rss')
-rw-r--r--reader/rss/parser_test.go7
-rw-r--r--reader/rss/rss.go43
2 files changed, 34 insertions, 16 deletions
diff --git a/reader/rss/parser_test.go b/reader/rss/parser_test.go
index b75a8ff..f3ca697 100644
--- a/reader/rss/parser_test.go
+++ b/reader/rss/parser_test.go
@@ -583,13 +583,16 @@ func TestParseEntryWithRelativeURL(t *testing.T) {
func TestParseEntryWithCommentsURL(t *testing.T) {
data := `<?xml version="1.0" encoding="utf-8"?>
- <rss version="2.0">
+ <rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
<channel>
<link>https://example.org/</link>
<item>
<title>Item 1</title>
<link>https://example.org/item1</link>
- <comments>https://example.org/comments</comments>
+ <comments>
+ https://example.org/comments
+ </comments>
+ <slash:comments>42</slash:comments>
</item>
</channel>
</rss>`
diff --git a/reader/rss/rss.go b/reader/rss/rss.go
index bc901db..92335af 100644
--- a/reader/rss/rss.go
+++ b/reader/rss/rss.go
@@ -38,20 +38,25 @@ type rssLink struct {
Rel string `xml:"rel,attr"`
}
+type rssCommentLink struct {
+ XMLName xml.Name
+ Data string `xml:",chardata"`
+}
+
type rssItem struct {
- GUID string `xml:"guid"`
- Title string `xml:"title"`
- Links []rssLink `xml:"link"`
- OriginalLink string `xml:"http://rssnamespace.org/feedburner/ext/1.0 origLink"`
- Comments string `xml:"comments"`
- Description string `xml:"description"`
- Content string `xml:"http://purl.org/rss/1.0/modules/content/ encoded"`
- PubDate string `xml:"pubDate"`
- Date string `xml:"http://purl.org/dc/elements/1.1/ date"`
- Authors []rssAuthor `xml:"author"`
- Creator string `xml:"http://purl.org/dc/elements/1.1/ creator"`
- Enclosures []rssEnclosure `xml:"enclosure"`
- OrigEnclosureLink string `xml:"http://rssnamespace.org/feedburner/ext/1.0 origEnclosureLink"`
+ GUID string `xml:"guid"`
+ Title string `xml:"title"`
+ Links []rssLink `xml:"link"`
+ OriginalLink string `xml:"http://rssnamespace.org/feedburner/ext/1.0 origLink"`
+ CommentLinks []rssCommentLink `xml:"comments"`
+ Description string `xml:"description"`
+ Content string `xml:"http://purl.org/rss/1.0/modules/content/ encoded"`
+ PubDate string `xml:"pubDate"`
+ Date string `xml:"http://purl.org/dc/elements/1.1/ date"`
+ Authors []rssAuthor `xml:"author"`
+ Creator string `xml:"http://purl.org/dc/elements/1.1/ creator"`
+ Enclosures []rssEnclosure `xml:"enclosure"`
+ OrigEnclosureLink string `xml:"http://rssnamespace.org/feedburner/ext/1.0 origEnclosureLink"`
}
type rssAuthor struct {
@@ -217,10 +222,20 @@ func (r *rssItem) GetEnclosures() model.EnclosureList {
return enclosures
}
+func (r *rssItem) CommentsURL() string {
+ for _, commentLink := range r.CommentLinks {
+ if commentLink.XMLName.Space == "" {
+ return strings.TrimSpace(commentLink.Data)
+ }
+ }
+
+ return ""
+}
+
func (r *rssItem) Transform() *model.Entry {
entry := new(model.Entry)
entry.URL = r.GetURL()
- entry.CommentsURL = r.Comments
+ entry.CommentsURL = r.CommentsURL()
entry.Date = r.GetDate()
entry.Author = r.GetAuthor()
entry.Hash = r.GetHash()