diff options
Diffstat (limited to 'reader/rdf/rdf.go')
-rw-r--r-- | reader/rdf/rdf.go | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/reader/rdf/rdf.go b/reader/rdf/rdf.go new file mode 100644 index 0000000..05281ca --- /dev/null +++ b/reader/rdf/rdf.go @@ -0,0 +1,71 @@ +// Copyright 2017 Frédéric Guillot. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +package rdf + +import ( + "encoding/xml" + + "github.com/miniflux/miniflux2/helper" + "github.com/miniflux/miniflux2/reader/processor" + "github.com/miniflux/miniflux2/reader/sanitizer" + + "github.com/miniflux/miniflux2/model" +) + +type rdfFeed struct { + XMLName xml.Name `xml:"RDF"` + Title string `xml:"channel>title"` + Link string `xml:"channel>link"` + Creator string `xml:"channel>creator"` + Items []rdfItem `xml:"item"` +} + +func (r *rdfFeed) Transform() *model.Feed { + feed := new(model.Feed) + feed.Title = sanitizer.StripTags(r.Title) + feed.SiteURL = r.Link + + for _, item := range r.Items { + entry := item.Transform() + + if entry.Author == "" && r.Creator != "" { + entry.Author = sanitizer.StripTags(r.Creator) + } + + if entry.URL == "" { + entry.URL = feed.SiteURL + } + + feed.Entries = append(feed.Entries, entry) + } + + return feed +} + +type rdfItem struct { + Title string `xml:"title"` + Link string `xml:"link"` + Description string `xml:"description"` + Creator string `xml:"creator"` +} + +func (r *rdfItem) Transform() *model.Entry { + entry := new(model.Entry) + entry.Title = sanitizer.StripTags(r.Title) + entry.Author = sanitizer.StripTags(r.Creator) + entry.URL = r.Link + entry.Content = processor.ItemContentProcessor(entry.URL, r.Description) + entry.Hash = getHash(r) + return entry +} + +func getHash(r *rdfItem) string { + value := r.Link + if value == "" { + value = r.Title + r.Description + } + + return helper.Hash(value) +} |