From cb97d4a1a876656b73a5db0cc28e6842e39f61f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Guillot?= Date: Sat, 13 Jul 2024 10:45:39 -0700 Subject: [PATCH] feat: remove YouTube video page subscription finder because `meta[itemprop="channelId"]` no longer exists --- internal/reader/subscription/finder.go | 42 --------------------- internal/reader/subscription/finder_test.go | 22 ----------- 2 files changed, 64 deletions(-) diff --git a/internal/reader/subscription/finder.go b/internal/reader/subscription/finder.go index 6f71859cca9..9c03ef728a8 100644 --- a/internal/reader/subscription/finder.go +++ b/internal/reader/subscription/finder.go @@ -29,7 +29,6 @@ type youtubeKind string const ( youtubeIDKindChannel youtubeKind = "channel" - youtubeIDKindVideo youtubeKind = "video" youtubeIDKindPlaylist youtubeKind = "playlist" ) @@ -102,12 +101,6 @@ func (f *SubscriptionFinder) FindSubscriptions(websiteURL, rssBridgeURL string) if localizedError != nil { return nil, localizedError } - case youtubeIDKindVideo: - slog.Debug("Try to detect feeds from YouTube video page", slog.String("website_url", websiteURL)) - subscriptions, localizedError = f.FindSubscriptionsFromYouTubeVideoPage(websiteURL) - if localizedError != nil { - return nil, localizedError - } case youtubeIDKindPlaylist: slog.Debug("Try to detect feeds from YouTube playlist page", slog.String("website_url", websiteURL)) subscriptions, localizedError = f.FindSubscriptionsFromYouTubePlaylistPage(websiteURL) @@ -319,37 +312,6 @@ func (f *SubscriptionFinder) FindSubscriptionsFromYouTubeChannelPage(websiteURL return nil, nil } -func (f *SubscriptionFinder) FindSubscriptionsFromYouTubeVideoPage(websiteURL string) (Subscriptions, *locale.LocalizedErrorWrapper) { - kind, _, err := youtubeURLIDExtractor(websiteURL) - if err != nil { - slog.Debug("Could not parse url", slog.String("website_url", websiteURL)) - } - - if kind != youtubeIDKindVideo { - slog.Debug("This website is not a YouTube video page, the regex doesn't match", slog.String("website_url", websiteURL)) - return nil, nil - } - - responseHandler := fetcher.NewResponseHandler(f.requestBuilder.ExecuteRequest(websiteURL)) - defer responseHandler.Close() - - if localizedError := responseHandler.LocalizedError(); localizedError != nil { - return nil, localizedError - } - - doc, docErr := goquery.NewDocumentFromReader(responseHandler.Body(config.Opts.HTTPClientMaxBodySize())) - if docErr != nil { - return nil, locale.NewLocalizedErrorWrapper(docErr, "error.unable_to_parse_html_document", docErr) - } - - if channelID, exists := doc.Find(`meta[itemprop="channelId"]`).First().Attr("content"); exists { - feedURL := fmt.Sprintf(`https://www.youtube.com/feeds/videos.xml?channel_id=%s`, channelID) - return Subscriptions{NewSubscription(websiteURL, feedURL, parser.FormatAtom)}, nil - } - - return nil, nil -} - func (f *SubscriptionFinder) FindSubscriptionsFromYouTubePlaylistPage(websiteURL string) (Subscriptions, *locale.LocalizedErrorWrapper) { kind, id, _ := youtubeURLIDExtractor(websiteURL) @@ -385,10 +347,6 @@ func youtubeURLIDExtractor(websiteURL string) (idKind youtubeKind, id string, er idKind = youtubeIDKindPlaylist id = decodedUrl.Query().Get("list") return - case strings.HasPrefix(decodedUrl.Path, "/watch"): - idKind = youtubeIDKindVideo - id = decodedUrl.Query().Get("v") - return case strings.HasPrefix(decodedUrl.Path, "/playlist"): idKind = youtubeIDKindPlaylist id = decodedUrl.Query().Get("list") diff --git a/internal/reader/subscription/finder_test.go b/internal/reader/subscription/finder_test.go index 9e7416a2bc1..a4123ebc52f 100644 --- a/internal/reader/subscription/finder_test.go +++ b/internal/reader/subscription/finder_test.go @@ -32,13 +32,6 @@ func TestFindYoutubePlaylistFeed(t *testing.T) { } } -func TestItDoesNotConsiderPlaylistWatchPageAsVideoWatchPage(t *testing.T) { - _, localizedError := NewSubscriptionFinder(nil).FindSubscriptionsFromYouTubeVideoPage("https://www.youtube.com/watch?v=dQw4w9WgXcQ&list=PLOOwEPgFWm_N42HlCLhqyJ0ZBWr5K1QDM") - if localizedError != nil { - t.Fatalf(`Should not consider a playlist watch page as a video watch page`) - } -} - func TestYoutubeIdExtractor(t *testing.T) { type testResult struct { ID string @@ -46,21 +39,6 @@ func TestYoutubeIdExtractor(t *testing.T) { error error } urls := map[string]testResult{ - "https://www.youtube.com/watch?v=dQw4w9WgXcQ": { - ID: "dQw4w9WgXcQ", - Kind: youtubeIDKindVideo, - error: nil, - }, - "https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=1": { - ID: "dQw4w9WgXcQ", - Kind: youtubeIDKindVideo, - error: nil, - }, - "https://www.youtube.com/watch?t=1&v=dQw4w9WgXcQ": { - ID: "dQw4w9WgXcQ", - Kind: youtubeIDKindVideo, - error: nil, - }, "https://www.youtube.com/watch?v=dQw4w9WgXcQ&list=PLOOwEPgFWm_N42HlCLhqyJ0ZBWr5K1QDM": { ID: "PLOOwEPgFWm_N42HlCLhqyJ0ZBWr5K1QDM", Kind: youtubeIDKindPlaylist,