diff --git a/PlayBot/sites/youtube.pm b/PlayBot/sites/youtube.pm index 20e0aae2c84a5cf835546cfb145bce158f535f1b..6393bfe16b74089fdaa26edca7ecf005e8c23a03 100644 --- a/PlayBot/sites/youtube.pm +++ b/PlayBot/sites/youtube.pm @@ -18,13 +18,67 @@ BEGIN { $conf = decode_json($json); } +sub regex_playlist +{ + return qr#(?:^|[^!])https?://www.youtube.com/playlist\?[a-zA-Z0-9_=&-]*list=([a-zA-Z0-9_-]+)#; +} sub regex { return qr#(?:^|[^!])https?://(?:www.youtube.com/watch\?[a-zA-Z0-9_=&-]*v=|youtu.be/)([a-zA-Z0-9_-]+)#; } -sub get { +sub get_playlist +{ + shift; + my $id = shift; + + my $ua = LWP::UserAgent->new( + timeout => 30, + env_proxy => 1, + ); + my $response = $ua->get($endpoint + .'/playlists?id='.$id + .'&key='.$conf->{'youtube_api_key'} + .'&part=snippet,contentDetails'); + die($response->status_line) unless ($response->is_success); + + my $content = decode_json($response->decoded_content); + + die "playlist not found" if (not scalar @{ $content->{items} }); + + my $playlist = $content->{'items'}->[0]; + my %infos; + + $infos{'title'} = $playlist->{'snippet'}->{'title'}; + $infos{'duration'} = $playlist->{'contentDetails'}->{'itemCount'}; + $infos{'author'} = $playlist->{'snippet'}->{'channelTitle'}; + $infos{'site'} = 'youtube'; + $infos{'url'} = 'https://www.youtube.com/playlist?list='.$id; + + $response = $ua->get($endpoint + .'/playlistItems?playlistId='.$id + .'&key='.$conf->{'youtube_api_key'} + .'&part=snippet'); + die($response->status_line) unless ($response->is_success); + + $content = decode_json($response->decoded_content); + + die "empty playlist" if (not scalar @{ $content->{items} }); + + my @urls; + foreach my $subcontent (@{ $content->{items} }) + { + my $subid = $subcontent->{snippet}{resourceId}{videoId}; + push @urls, 'https://www.youtube.com/watch?v='.$subid; + } + + $infos{urls} = \@urls; + return %infos; +} + +sub get +{ shift; my $id = shift;