summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--feed/feed.go40
1 files changed, 23 insertions, 17 deletions
diff --git a/feed/feed.go b/feed/feed.go
index 3872af4..e97921c 100644
--- a/feed/feed.go
+++ b/feed/feed.go
@@ -21,7 +21,7 @@ type Feed struct {
Schema string `json:"schema"`
YDLPath string
DumpDir string
- Object interface{}
+ Entries []schema.Entry
}
func (feed *Feed) Validate(ydlPath, baseDumpDir string) error {
@@ -102,13 +102,13 @@ func (feed *Feed) unmarshal(bs []byte) error {
// Unmarshal based on feed's schema type.
switch {
case feed.Schema == "npr":
- feed.Object, err = nprUnmarshal(bs)
+ feed.Entries, err = nprUnmarshal(bs)
if err != nil {
return err
}
return nil
case feed.Schema == "youtube":
- feed.Object, err = youtubeUnmarshal(bs)
+ feed.Entries, err = youtubeUnmarshal(bs)
if err != nil {
return err
}
@@ -118,37 +118,43 @@ func (feed *Feed) unmarshal(bs []byte) error {
}
// Unmarshal a NPR feed.
-func nprUnmarshal(bs []byte) (schema.NPRFeed, error) {
+func nprUnmarshal(bs []byte) ([]schema.Entry, error) {
nprFeed := new(schema.NPRFeed)
err := xml.Unmarshal(bs, nprFeed)
if err != nil {
- return *nprFeed, err
+ return nil, err
}
- // Parse time for all entries.
- for i, entry := range nprFeed.Entries {
- nprFeed.Entries[i].PubTime, err = time.Parse(time.RFC1123Z, entry.Pub)
+ // Get all entries.
+ entries := make([]schema.Entry, 0)
+ for _, e := range nprFeed.Entries {
+ t, err := time.Parse(time.RFC1123Z, e.Pub)
if err != nil {
- return *nprFeed, err
+ return nil, err
}
+ entry := schema.Entry{e.Id, e.Title, t, e.Link.Url}
+ entries = append(entries, entry)
}
- return *nprFeed, nil
+ return entries, nil
}
// Unmarshal a YouTube feed.
-func youtubeUnmarshal(bs []byte) (schema.YouTubeFeed, error) {
+func youtubeUnmarshal(bs []byte) ([]schema.Entry, error) {
ytFeed := new(schema.YouTubeFeed)
err := xml.Unmarshal(bs, ytFeed)
if err != nil {
- return *ytFeed, err
+ return nil, err
}
- // Parse time for all entries.
- for i, entry := range ytFeed.Entries {
- ytFeed.Entries[i].PubTime, err = time.Parse(time.RFC3339, entry.Pub)
+ // Get all entries.
+ entries := make([]schema.Entry, 0)
+ for _, e := range ytFeed.Entries {
+ t, err := time.Parse(time.RFC3339, e.Pub)
if err != nil {
- return *ytFeed, err
+ return nil, err
}
+ entry := schema.Entry{e.Id, e.Title, t, e.Link.Url}
+ entries = append(entries, entry)
}
- return *ytFeed, nil
+ return entries, nil
}