Files
2024-03-24 18:17:49 +01:00

79 lines
2.3 KiB
Perl

package YTMusicAPI::Parsers::Parser;
use strict;
use warnings;
use YTMusicAPI::Navigation;
sub new {
my ( $class, $language ) = @_;
my $self = { lang => $language };
bless $self, $class;
return $self;
}
sub _ {
my ($input) = @_;
return $input;
}
sub get_search_result_types {
my ($self) = @_;
return [
_("artist"), _("playlist"), _("song"), _("video"),
_("station"), _("profile"), _("podcast"), _("episode"),
];
}
sub parse_channel_contents {
my ( $self, $results ) = @_;
my @categories = (
[ "albums", _("albums"), \&parse_album, $MTRIR ],
[ "singles", _("singles"), \&parse_single, $MTRIR ],
[ "shows", _("shows"), \&parse_album, $MTRIR ],
[ "videos", _("videos"), \&parse_video, $MTRIR ],
[ "playlists", _("playlists"), \&parse_playlist, $MTRIR ],
[ "related", _("related"), \&parse_related_artist, $MTRIR ],
[ "episodes", _("episodes"), \&parse_episode, $MMRIR ],
[ "podcasts", _("podcasts"), \&parse_podcast, $MTRIR ],
);
my %artist = {};
foreach my $category_tuple (@categories) {
my ( $category, $category_local, $category_parser, $category_key ) =
@$category_tuple;
my @data = map { $_->{"musicCarouselShelfRenderer"} }
grep {
exists $_->{"musicCarouselShelfRenderer"}
&& nav( $_, $CAROUSEL . $CAROUSEL_TITLE )->{"text"} =~
/^$category_local$/i
} $results;
if ( scalar @data > 0 ) {
$artist{$category} = { "browseId" => undef, "results" => [] };
if (
exists nav( $data[0], $CAROUSEL_TITLE )->{"navigationEndpoint"}
)
{
$artist{$category}->{"browseId"} =
nav( $data[0], $CAROUSEL_TITLE . $NAVIGATION_BROWSE_ID );
$artist{$category}->{"params"} = nav( $data[0],
$CAROUSEL_TITLE . $NAVIGATION_BROWSE . ["params"], 1 );
}
$artist{$category}->{"results"} =
parse_content_list( $data[0]->{"contents"},
$category_parser, "key" => $category_key );
}
}
return %artist;
}
1;