Skip to content
Extraits de code Groupes Projets
Valider 7278119d rédigé par Alexandre Morignot's avatar Alexandre Morignot
Parcourir les fichiers

Soundcloud sets support

parent 09d9e266
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -89,14 +89,15 @@ sub insert_content ...@@ -89,14 +89,15 @@ sub insert_content
# insertion de la vidéo dans la bdd # insertion de la vidéo dans la bdd
eval { eval {
my $sth = $dbh->prepare(' my $sth = $dbh->prepare('
INSERT INTO playbot (type, url, sender, title, duration, playlist) INSERT INTO playbot (type, url, external_id, sender, title, duration, playlist)
VALUES (?,?,?,?,?,?) VALUES (?,?,?,?,?,?,?)
'); ');
$log->error("Couldn't prepare querie; aborting") unless (defined $sth); $log->error("Couldn't prepare querie; aborting") unless (defined $sth);
$sth->execute( $sth->execute(
$content->{site}, $content->{site},
$content->{url}, $content->{url},
$content->{external_id},
$content->{author}, $content->{author},
$content->{title}, $content->{title},
$content->{duration}, $content->{duration},
......
...@@ -5,16 +5,63 @@ use warnings; ...@@ -5,16 +5,63 @@ use warnings;
use LWP::UserAgent; use LWP::UserAgent;
use JSON; use JSON;
use URI::Find;
use Scalar::Util qw(looks_like_number); use Scalar::Util qw(looks_like_number);
my $root = 'http://api.soundcloud.com'; my $root = 'http://api.soundcloud.com';
my $clientId = 'f4956716fe1a9dc9c3725af822963365'; my $clientId = 'f4956716fe1a9dc9c3725af822963365';
sub regex_playlist
{
return qr#(?:^|[^!])https?://(?:www\.)?soundcloud.com/([a-zA-Z0-9_-]+/sets/[a-zA-Z0-9_-]+)(?:\?.+)?(?: |$)#;
}
sub regex sub regex
{ {
return qr#(?:^|[^!])https?://(?:www\.)?soundcloud.com/([a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+)(?:\?.+)?#; return qr#(?:^|[^!])https?://(?:www\.)?soundcloud.com/([a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+)(?:\?.+)?(?: |$)#;
}
sub get_playlist {
shift;
my $id = shift;
my $ua = LWP::UserAgent->new(
timeout => 30,
env_proxy => 1,
);
my $response;
if (looks_like_number($id))
{
$response = $ua->get($root.'/playlists/'.$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->{'track_count'},
site => 'soundcloud',
title => $content->{'title'},
url => $content->{permalink_url},
};
my @urls;
foreach my $item (@{ $content->{'tracks'} })
{
push @urls, $item->{'permalink_url'};
}
$infos->{'urls'} = \@urls;
return %$infos;
} }
...@@ -53,7 +100,7 @@ sub get { ...@@ -53,7 +100,7 @@ sub get {
$infos->{'ddl'} = $content->{'download_url'}; $infos->{'ddl'} = $content->{'download_url'};
} }
return %{ $infos }; return %$infos;
} }
1; 1;
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter