Initial commit
This commit is contained in:
56
YTMusicAPI/Parsers/Albums.pm
Normal file
56
YTMusicAPI/Parsers/Albums.pm
Normal file
@@ -0,0 +1,56 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user