mirror of
https://github.com/nkanaev/yarr.git
synced 2025-05-24 00:33:14 +00:00
autogenerate feed item guids
This commit is contained in:
parent
223039b2c6
commit
e9cbea500b
@ -2,6 +2,7 @@ package parser
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"crypto/sha256"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -119,6 +120,7 @@ func ParseAndFix(r io.Reader, baseURL, fallbackEncoding string) (*Feed, error) {
|
|||||||
}
|
}
|
||||||
feed.TranslateURLs(baseURL)
|
feed.TranslateURLs(baseURL)
|
||||||
feed.SetMissingDatesTo(time.Now())
|
feed.SetMissingDatesTo(time.Now())
|
||||||
|
feed.SetMissingGUIDs()
|
||||||
return feed, nil
|
return feed, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,3 +170,12 @@ func (feed *Feed) TranslateURLs(base string) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (feed *Feed) SetMissingGUIDs() {
|
||||||
|
for i, item := range feed.Items {
|
||||||
|
if item.GUID == "" {
|
||||||
|
id := strings.Join([]string{item.Title, item.Date.Format(time.RFC3339), item.URL}, ";;")
|
||||||
|
feed.Items[i].GUID = fmt.Sprintf("%x", sha256.Sum256([]byte(id)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -150,3 +150,32 @@ func TestParseCleanIllegalCharsInNonUTF8(t *testing.T) {
|
|||||||
t.Fatalf("invalid feed, got: %v", feed)
|
t.Fatalf("invalid feed, got: %v", feed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestParseMissingGUID(t *testing.T) {
|
||||||
|
data := `
|
||||||
|
<?xml version="1.0" encoding="windows-1251"?>
|
||||||
|
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||||
|
<channel>
|
||||||
|
<item>
|
||||||
|
<title>foo</title>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<title>bar</title>
|
||||||
|
</item>
|
||||||
|
</channel>
|
||||||
|
</rss>
|
||||||
|
`
|
||||||
|
feed, err := ParseAndFix(strings.NewReader(data), "", "")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if len(feed.Items) != 2 {
|
||||||
|
t.Fatalf("expected 2 items, got %d", len(feed.Items))
|
||||||
|
}
|
||||||
|
if feed.Items[0].GUID == "" || feed.Items[1].GUID == "" {
|
||||||
|
t.Fatalf("item GUIDs are missing, got %#v", feed.Items)
|
||||||
|
}
|
||||||
|
if feed.Items[0].GUID == feed.Items[1].GUID {
|
||||||
|
t.Fatalf("item GUIDs are not unique, got %#v", feed.Items)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user