if err != nil {
log.Fatalln(err)
}
+
+ guids := make(map[string]struct{}, len(feed.Items))
+ useGUID := true
+ for _, item := range feed.Items {
+ if _, exists := guids[item.GUID]; exists {
+ useGUID = false
+ break
+ } else {
+ guids[item.GUID] = struct{}{}
+ }
+ }
+
+ h := sha512.New()
news := 0
var when *time.Time
now := time.Now()
- max := int(*maxEntries) - 1
for n, item := range feed.Items {
- if n == max {
+ if n == int(*maxEntries) {
break
}
when = nil
}
what = strings.TrimPrefix(what, "<![CDATA[")
what = strings.TrimSuffix(what, "]]>")
- h := sha512.New()
- h.Write([]byte(item.Title))
- h.Write([]byte{0})
- h.Write([]byte(what))
+ h.Reset()
+ if useGUID {
+ h.Write([]byte(item.GUID))
+ } else {
+ h.Write([]byte(item.Title))
+ h.Write([]byte{0})
+ h.Write([]byte(what))
+ }
fn := hex.EncodeToString(h.Sum(nil)[:sha512.Size/2])
exists := false
for _, d := range []string{"cur", "new"} {