Files
ytmusicapi-perl/YTMusicAPI/Parsers/Albums.pm
2024-03-24 18:17:49 +01:00

57 lines
1.7 KiB
Perl

package YTMusicAPI::Parsers::Albums;
use strict;
use warnings;
use YTMusicAPI::Navigation;
sub parse_album_header {
my ($response) = @_;
my $header = nav( $response, $HEADER_DETAIL );
my $album = {
title => nav( $header, $TITLE_TEXT ),
type => nav( $header, $SUBTITLE ),
thumbnails => nav( $header, $THUMBNAIL_CROPPED ),
isExplicit => defined( nav( $header, $SUBTITLE_BADGE_LABEL, 1 ) )
? 1
: 0,
};
if ( exists $header->{description} ) {
$album->{description} = $header->{description}->{runs}->[0]->{text};
}
my $album_info = parse_song_runs(
$header->{subtitle}->{runs}->[ 2 .. $#{ $header->{subtitle}->{runs} } ]
);
@$album{ keys %$album_info } = values %$album_info;
if ( scalar @{ $header->{secondSubtitle}->{runs} } > 1 ) {
$album->{trackCount} =
to_int( $header->{secondSubtitle}->{runs}->[0]->{text} );
$album->{duration} = $header->{secondSubtitle}->{runs}->[2]->{text};
}
else {
$album->{duration} = $header->{secondSubtitle}->{runs}->[0]->{text};
}
my $menu = nav( $header, $MENU );
my $toplevel = $menu->{topLevelButtons};
$album->{audioPlaylistId} =
nav( $toplevel, [ 0, 'buttonRenderer', $NAVIGATION_WATCH_PLAYLIST_ID ],
1 );
unless ( $album->{audioPlaylistId} ) {
$album->{audioPlaylistId} =
nav( $toplevel, [ 0, 'buttonRenderer', $NAVIGATION_PLAYLIST_ID ], 1 );
}
my $service =
nav( $toplevel, [ 1, 'buttonRenderer', 'defaultServiceEndpoint' ], 1 );
if ($service) {
$album->{likeStatus} = parse_like_status($service);
}
return $album;
}
1;