mirror of
				https://github.com/nkanaev/yarr.git
				synced 2025-10-30 22:43:29 +00:00 
			
		
		
		
	autogenerate feed item guids
This commit is contained in:
		| @@ -2,6 +2,7 @@ package parser | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"crypto/sha256" | ||||
| 	"encoding/xml" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| @@ -119,6 +120,7 @@ func ParseAndFix(r io.Reader, baseURL, fallbackEncoding string) (*Feed, error) { | ||||
| 	} | ||||
| 	feed.TranslateURLs(baseURL) | ||||
| 	feed.SetMissingDatesTo(time.Now()) | ||||
| 	feed.SetMissingGUIDs() | ||||
| 	return feed, nil | ||||
| } | ||||
|  | ||||
| @@ -168,3 +170,12 @@ func (feed *Feed) TranslateURLs(base string) error { | ||||
| 	} | ||||
| 	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) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| 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) | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user