diff --git a/internal/feed/youtube.go b/internal/feed/youtube.go index e478259..65a5376 100644 --- a/internal/feed/youtube.go +++ b/internal/feed/youtube.go @@ -10,7 +10,7 @@ import ( ) type youtubeFeedResponseXml struct { - Channel string `xml:"title"` + Channel string `xml:"author>name"` ChannelLink struct { Href string `xml:"href,attr"` } `xml:"link"` @@ -39,11 +39,19 @@ func parseYoutubeFeedTime(t string) time.Time { return parsedTime } -func FetchYoutubeChannelUploads(channelIds []string, videoUrlTemplate string) (Videos, error) { +func FetchYoutubeChannelUploads(channelIds []string, videoUrlTemplate string, includeShorts bool) (Videos, error) { requests := make([]*http.Request, 0, len(channelIds)) for i := range channelIds { - request, _ := http.NewRequest("GET", "https://www.youtube.com/feeds/videos.xml?channel_id="+channelIds[i], nil) + var feedUrl string + if !includeShorts && strings.HasPrefix(channelIds[i], "UC") { + playlistId := strings.Replace(channelIds[i], "UC", "UULF", 1) + feedUrl = "https://www.youtube.com/feeds/videos.xml?playlist_id=" + playlistId + } else { + feedUrl = "https://www.youtube.com/feeds/videos.xml?channel_id=" + channelIds[i] + } + + request, _ := http.NewRequest("GET", feedUrl, nil) requests = append(requests, request) } @@ -70,12 +78,6 @@ func FetchYoutubeChannelUploads(channelIds []string, videoUrlTemplate string) (V for j := range response.Videos { video := &response.Videos[j] - - // TODO: figure out a better way of skipping shorts - if strings.Contains(video.Title, "#shorts") { - continue - } - var videoUrl string if videoUrlTemplate == "" { diff --git a/internal/widget/videos.go b/internal/widget/videos.go index 717f302..8943603 100644 --- a/internal/widget/videos.go +++ b/internal/widget/videos.go @@ -17,6 +17,7 @@ type Videos struct { CollapseAfterRows int `yaml:"collapse-after-rows"` Channels []string `yaml:"channels"` Limit int `yaml:"limit"` + IncludeShorts bool `yaml:"include-shorts"` } func (widget *Videos) Initialize() error { @@ -34,7 +35,7 @@ func (widget *Videos) Initialize() error { } func (widget *Videos) Update(ctx context.Context) { - videos, err := feed.FetchYoutubeChannelUploads(widget.Channels, widget.VideoUrlTemplate) + videos, err := feed.FetchYoutubeChannelUploads(widget.Channels, widget.VideoUrlTemplate, widget.IncludeShorts) if !widget.canContinueUpdateAfterHandlingErr(err) { return