From 4ef861140305233837d1fca07aaddb6748f556b6 Mon Sep 17 00:00:00 2001 From: trizen Date: Mon, 5 Oct 2020 13:14:38 +0300 Subject: [PATCH] Implemented support for popular videos. --- lib/WWW/StrawViewer.pm | 4 ++++ lib/WWW/StrawViewer/Channels.pm | 23 ++++++++++++++++------- lib/WWW/StrawViewer/Videos.pm | 18 ------------------ 3 files changed, 20 insertions(+), 25 deletions(-) diff --git a/lib/WWW/StrawViewer.pm b/lib/WWW/StrawViewer.pm index 4aea842..4ad80c8 100644 --- a/lib/WWW/StrawViewer.pm +++ b/lib/WWW/StrawViewer.pm @@ -469,6 +469,9 @@ sub lwp_get { return $self->lwp_get($url, %opt, depth => $opt{depth} + 1); } + # Too many errors. Pick another invidious instance. + $self->pick_and_set_random_instance(); + _warn_reponse_error($response, $url); return; } @@ -681,6 +684,7 @@ sub default_arguments { sub _make_feed_url { my ($self, $path, %args) = @_; + my $extra_args = $self->default_arguments(%args); my $url = $self->get_api_url . $path; diff --git a/lib/WWW/StrawViewer/Channels.pm b/lib/WWW/StrawViewer/Channels.pm index b2c2c99..b6a40ce 100644 --- a/lib/WWW/StrawViewer/Channels.pm +++ b/lib/WWW/StrawViewer/Channels.pm @@ -33,6 +33,17 @@ sub videos_from_username { return $self->_get_results($self->_make_feed_url("channels/$channel_id/videos")); } +=head2 popular_videos($channel_id) + +Get the most popular videos for a given channel ID. + +=cut + +sub popular_videos { + my ($self, $channel_id) = @_; + return $self->_get_results($self->_make_feed_url("channels/$channel_id/videos", sort_by => 'popular')); +} + =head2 channels_from_categoryID($category_id) Return the YouTube channels associated with the specified category. @@ -131,15 +142,13 @@ Return the channel ID for an username. sub channel_id_from_username { my ($self, $username) = @_; - state $username_lookup = {}; - - if (exists $username_lookup->{$username}) { - return $username_lookup->{$username}; + # A channel's username (if it doesn't include spaces) is also valid in place of ucid. + if ($username =~ /\w/ and not $username =~ /\s/) { + return $username; } - $username_lookup->{$username} = undef; - my $channel = $self->channels_from_username($username) // return; - $username_lookup->{$username} = $channel->{results}{items}[0]{id} // return; + # TODO: resolve channel name to channel ID + return $username; } =head2 channel_title_from_id($channel_id) diff --git a/lib/WWW/StrawViewer/Videos.pm b/lib/WWW/StrawViewer/Videos.pm index beda17f..13b6d6b 100644 --- a/lib/WWW/StrawViewer/Videos.pm +++ b/lib/WWW/StrawViewer/Videos.pm @@ -81,24 +81,6 @@ sub trending_videos_from_category { return $results; } -=head2 popular_videos($channel_id) - -Get the most popular videos for a given channel ID. - -=cut - -sub popular_videos { - my ($self, $id) = @_; - - my $results = do { - local $self->{channelId} = $id; - local $self->{order} = 'viewCount'; - $self->search_videos(""); - }; - - return $results; -} - =head2 my_likes() Get the videos liked by the authenticated user.