aboutsummaryrefslogtreecommitdiffstats
path: root/lib/WWW/FairViewer.pm
diff options
context:
space:
mode:
authortrizen <trizen@protonmail.com>2020-11-04 14:25:02 +0200
committerJesús <heckyel@hyperbola.info>2020-11-09 17:43:06 -0500
commitf141f51a9613c9d74680b1c9eb923ca7f20f901b (patch)
tree574b4b8efbb008e3643d7fdd51c2f788d5c5393a /lib/WWW/FairViewer.pm
parentc624698bdb859e1ac1f86659b92e0fd802be0f51 (diff)
downloadfair-viewer-f141f51a9613c9d74680b1c9eb923ca7f20f901b.tar.lz
fair-viewer-f141f51a9613c9d74680b1c9eb923ca7f20f901b.tar.xz
fair-viewer-f141f51a9613c9d74680b1c9eb923ca7f20f901b.zip
- Stricter selection of a random invidious instance (with api_host => "auto").
Ensure that a randomly selected invidious actually works, by making a search request with keyword "test". Additionally, in the selection of instances, only include instances with "weeklyRatio = success" and "dailyRatios[0] = "success" (in addition to "statusClass = sucess"). Signed-off-by: Jesús <heckyel@hyperbola.info>
Diffstat (limited to 'lib/WWW/FairViewer.pm')
-rw-r--r--lib/WWW/FairViewer.pm35
1 files changed, 32 insertions, 3 deletions
diff --git a/lib/WWW/FairViewer.pm b/lib/WWW/FairViewer.pm
index 75f8fb0..bc01669 100644
--- a/lib/WWW/FairViewer.pm
+++ b/lib/WWW/FairViewer.pm
@@ -556,6 +556,7 @@ sub select_good_invidious_instances {
my %ignored = (
'yewtu.be' => 1,
+ 'invidious.tube' => 1,
'invidiou.site' => 1,
'invidious.xyz' => 1,
'vid.mint.lgbt' => 1,
@@ -567,7 +568,15 @@ sub select_good_invidious_instances {
my @candidates =
grep { not $ignored{$_->[0]} }
- grep { ref($_->[1]{monitor}) eq 'HASH' ? ($_->[1]{monitor}{statusClass} eq 'success') : $args{lax} }
+ grep {
+ $args{lax} ? 1 : eval { $_->[1]{monitor}{dailyRatios}[0]{label} eq 'success' }
+ }
+ grep {
+ $args{lax} ? 1 : eval { $_->[1]{monitor}{weeklyRatio}{label} eq 'success' }
+ }
+ grep {
+ $args{lax} ? 1 : eval { $_->[1]{monitor}{statusClass} eq 'success' }
+ }
grep { lc($_->[1]{type} // '') eq 'https' } @$instances;
if ($self->get_debug) {
@@ -581,7 +590,7 @@ sub select_good_invidious_instances {
return @candidates;
}
-sub pick_random_instance {
+sub pick_good_random_instance {
my ($self) = @_;
my @candidates = $self->select_good_invidious_instances();
@@ -589,13 +598,33 @@ sub pick_random_instance {
@candidates = $self->select_good_invidious_instances(lax => 1);
}
+ require List::Util;
+ require WWW::FairViewer::Utils;
+
+ state $yv_utils = WWW::FairViewer::Utils->new();
+
+ foreach my $instance (List::Util::shuffle(@candidates)) {
+
+ ref($instance) eq 'ARRAY' or next;
+
+ my $uri = $instance->[1]{uri} // next;
+ $uri =~ s{/+\z}{}; # remove trailing '/'
+
+ local $self->{api_host} = $uri;
+ my $results = $self->search_videos('test');
+
+ if ($yv_utils->has_entries($results)) {
+ return $instance;
+ }
+ }
+
$candidates[rand @candidates];
}
sub pick_and_set_random_instance {
my ($self) = @_;
- my $instance = $self->pick_random_instance() // return;
+ my $instance = $self->pick_good_random_instance() // return;
ref($instance) eq 'ARRAY' or return;