Pārlūkot izejas kodu

Get the right comments URL when having multiple namespaces

Frédéric Guillot 8 gadi atpakaļ
vecāks
revīzija
f76093690c
2 mainītis faili ar 34 papildinājumiem un 16 dzēšanām
  1. 5 2
      reader/rss/parser_test.go
  2. 29 14
      reader/rss/rss.go

+ 5 - 2
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>`

+ 29 - 14
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()