diff --git a/PlayBot/sites/soundcloud.pm b/PlayBot/sites/soundcloud.pm index cb2f659895fa4360269ec745d4b5ce1e5a047842..81b59cfa246ee10878bddf4f7bdabd45966e5eae 100644 --- a/PlayBot/sites/soundcloud.pm +++ b/PlayBot/sites/soundcloud.pm @@ -6,6 +6,7 @@ use warnings; use LWP::UserAgent; use JSON; use URI::Find; +use Scalar::Util qw(looks_like_number); my $root = 'http://api.soundcloud.com'; my $clientId = 'f4956716fe1a9dc9c3725af822963365'; @@ -20,24 +21,32 @@ sub regex sub get { shift; my $id = shift; - my $url = 'https://www.soundcloud.com/'.$id; my $ua = LWP::UserAgent->new( timeout => 30, env_proxy => 1, ); - my $response = $ua->get($root.'/resolve.json?url='.$url.'&client_id='.$clientId); + my $response; + if (looks_like_number($id)) + { + $response = $ua->get($root.'/tracks/'.$id.'?client_id='.$clientId); + } + else + { + my $url = 'https://www.soundcloud.com/'.$id; + $response = $ua->get($root.'/resolve.json?url='.$url.'&client_id='.$clientId); + } die($response->status_line) unless ($response->is_success); my $content = decode_json($response->decoded_content); my $infos = { author => $content->{'user'}->{'username'}, external_id => $content->{'id'}, - duration => $content->{'duration'} / 1000, + duration => int(0.5 + $content->{'duration'} / 1000), site => 'soundcloud', title => $content->{'title'}, - url => $url, + url => $content->{permalink_url}, }; if ($content->{'downloadable'}) { @@ -47,22 +56,4 @@ sub get { return %{ $infos }; } - -sub get_url -{ - shift; - my $id = shift; - - my $ua = LWP::UserAgent->new( - timeout => 30, - env_proxy => 1, - ); - - my $response = $ua->get($root.'/tracks/'.$id.'?client_id='.$clientId); - die($response->status_line) unless ($response->is_success); - - my $content = decode_json($response->decoded_content); - return $content->{permalink_url}; -} - 1;