79 lines
2.3 KiB
Perl
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;
|