diff --git a/YTMusicAPI/Mixins/BrowsingMixin.pm b/YTMusicAPI/Mixins/BrowsingMixin.pm new file mode 100644 index 0000000..9eccb1f --- /dev/null +++ b/YTMusicAPI/Mixins/BrowsingMixin.pm @@ -0,0 +1,45 @@ +package YTMusicAPI::Mixins::BrowsingMixin; + +use strict; +use warnings; + +use Moose::Role; + +use YTMusicAPI::Helpers; +use YTMusicAPI::Navigation; +use YTMusicAPI::Parsers::Browsing; +use YTMusicAPI::Continuations; + +sub get_song { + my ( $self, $video_id, $signature_timestamp ) = @_; + + my $endpoint = "player"; + if ( !$signature_timestamp ) { + $signature_timestamp = time() - 1; + } + + my $params = { + "playbackContext" => { + "contentPlaybackContext" => + { "signatureTimestamp" => $signature_timestamp } + }, + "video_id" => $video_id, + }; + + my $response = $self->_send_request( $endpoint, $params ); + my @keys = ( + "videoDetails", "playabilityStatus", + "streamingData", "microformat", + "playbackTracking" + ); + + foreach my $k ( keys %$response ) { + unless ( grep { $_ eq $k } @keys ) { + delete $response->{$k}; + } + } + + return $response; +} + +1; diff --git a/YTMusicAPI/YTMusic.pm b/YTMusicAPI/YTMusic.pm index 3e7a4ec..c969760 100644 --- a/YTMusicAPI/YTMusic.pm +++ b/YTMusicAPI/YTMusic.pm @@ -6,6 +6,7 @@ use warnings; use Moose; with + 'YTMusicAPI::Mixins::BrowsingMixin', 'YTMusicAPI::Mixins::SearchMixin', 'YTMusicAPI::Mixins::PlaylistMixin';