Compare commits

...

2 Commits

Author SHA1 Message Date
mschuepbach
088fdb2b16 Fix wide character error 2024-03-26 21:17:05 +01:00
mschuepbach
2c81a2c3de Add get_song 2024-03-26 21:16:33 +01:00
3 changed files with 50 additions and 1 deletions

View File

@@ -11,6 +11,7 @@ use HTTP::Cookies;
use Digest::SHA qw(sha1_hex);
use Time::HiRes qw(time);
use Unicode::Normalize;
use Encode 'encode_utf8', 'is_utf8';
use locale;
use YTMusicAPI::Constants qw(YTM_DOMAIN USER_AGENT);
@@ -47,7 +48,9 @@ sub get_visitor_id {
my $visitor_id = "";
if (@matches) {
my $ytcfg = decode_json( $matches[0] );
my $encoded_match =
is_utf8( $matches[0] ) ? encode_utf8( $matches[0] ) : $matches[0];
my $ytcfg = decode_json($encoded_match);
$visitor_id = $ytcfg->{"VISITOR_DATA"} // "";
}

View File

@@ -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;

View File

@@ -6,6 +6,7 @@ use warnings;
use Moose;
with
'YTMusicAPI::Mixins::BrowsingMixin',
'YTMusicAPI::Mixins::SearchMixin',
'YTMusicAPI::Mixins::PlaylistMixin';