diff --git a/cmd/genfeed/genfeed.go b/cmd/genfeed/genfeed.go index 98e8d8a..9475d1f 100644 --- a/cmd/genfeed/genfeed.go +++ b/cmd/genfeed/genfeed.go @@ -27,8 +27,10 @@ func main() { } fmt.Fprintf(os.Stderr, "id: %s\nbouncer: %s\n", *chan_id, *bounc_url) - err := feed.ConvertYtToRss(os.Stdout, *chan_id, *bounc_url, - feed.RSSMetadata{Languge: "en", Copyright: "N/A", Summary: "YouTube Channel as podcast"}) + err := feed.ConvertYtToRss(os.Stdout, *chan_id, + feed.RSSMetadata{ + Languge: "en", Copyright: "N/A", Summary: "YouTube Channel as podcast", BounceURL: *bounc_url}) + if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) diff --git a/feed/feed.go b/feed/feed.go index b745d14..3e3c4fe 100644 --- a/feed/feed.go +++ b/feed/feed.go @@ -29,97 +29,29 @@ type RSSMetadata struct { } /* bounce_url in the format of http://domain/?id=%s */ -func ConvertYtToRss(w io.Writer, channel_id string, bounce_url string, meta RSSMetadata) error { +func ConvertYtToRss(w io.Writer, channel_id string, meta RSSMetadata) error { - var podFeed templates.FeedData channelUrl := fmt.Sprintf(YT_FEED_URL, channel_id) feed, err := getFeed(channelUrl) if err != nil { return feedErr(err) } - - t_now := time.Now().UTC() - podFeed.Title = feed.Title - podFeed.Summary = meta.Summary - podFeed.BuildDateRfcEmail = t_now.Format(time.RFC1123Z) - podFeed.CopyRight = meta.Copyright - podFeed.PublishDateRfcEmail = t_now.Format(time.RFC1123Z) - podFeed.PodcastPage = feed.Link - podFeed.Lang = meta.Languge - podFeed.GeneratorName = __GENERATOR_NAME - - for i, item := range feed.Items { - - subStrings := strings.Split(item.GUID, ":") - id := subStrings[2] - - bounceURL, err := url.Parse( - fmt.Sprintf(bounce_url, id), - ) - if err != nil { - return err - } - - // Check this out - g := item.Extensions["media"]["group"] - gg := g[len(g)-1] - thumb := gg.Children["thumbnail"][0] - - coverArtUrl, err := url.Parse(thumb.Attrs["url"]) - if err != nil { - return errors.Join(err, errors.New( - fmt.Sprintf( - "could not parse item cover art for %s GUID: %s\n", - item.Title, - item.GUID, - ))) - } - - if i == 0 { - podFeed.PodcastImageURL = coverArtUrl.String() - } - - podFeed.Items = append(podFeed.Items, - templates.FeedItem{ - Title: item.Title, - CoverImageURL: coverArtUrl.String(), - Id: id, - Duration: "0", - PublishDateRfcEmail: item.PublishedParsed.Format(time.RFC1123Z), - Description: "TBI", - Length: 0, - EnclosureURL: bounceURL.String(), - }) - } - - rssTemplate, err := template.New("rss").Parse(templates.RSSTemplate) - if err != nil { - return err - } - - err = rssTemplate.Execute(w, podFeed) - if err != nil { - return err - } - - rssResult := bytes.Buffer{} - rssTemplate.Execute(&rssResult, podFeed) - _, err = gofeed.NewParser().ParseString(rssResult.String()) - if err != nil { - return feedErr(err) - } - - return nil + return convertFeedToRSS(w, *feed, meta) } // Convert to Yt Atom to RSS given a Reader that provides xml -func convertAtomToRSS(w io.Writer, r io.Reader, meta RSSMetadata) error { - var podFeed templates.FeedData +func ConvertAtomToRSS(w io.Writer, r io.Reader, meta RSSMetadata) error { feed, err := gofeed.NewParser().Parse(r) if err != nil { return feedErr(err) } + return convertFeedToRSS(w, *feed, meta) +} + +func convertFeedToRSS(w io.Writer, feed gofeed.Feed, meta RSSMetadata) error { + + var podFeed templates.FeedData t_now := time.Now().UTC() podFeed.Title = feed.Title diff --git a/feed/feed_test.go b/feed/feed_test.go index edf2ba6..c417bca 100644 --- a/feed/feed_test.go +++ b/feed/feed_test.go @@ -84,7 +84,7 @@ func TestAtomToRSS(t *testing.T) { buf := bytes.Buffer{} - err = convertAtomToRSS(&buf, f, RSSMetadata{BounceURL: "http://localhost:8081/q=%s"}) + err = ConvertAtomToRSS(&buf, f, RSSMetadata{BounceURL: "http://localhost:8081/q=%s"}) if err != nil { t.Error(err.Error()) t.FailNow()