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

Mixcloud is back !

parent 0c1418cb
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
package mixcloud; package mixcloud;
use LWP::UserAgent; use LWP::UserAgent;
use HTML::Parser; use JSON;
use HTML::Entities;
require Exporter; require Exporter;
our @ISA = qw(Exporter); our @ISA = qw(Exporter);
our @EXPORT_OK = qw(mixcloud); our @EXPORT_OK = qw(mixcloud);
my $inTitle = 0;
my $inAuthor = 0;
my %infos;
sub get { sub get {
my ($url) = @_; my ($url) = @_;
$url =~ s/www/api/;
my %infos;
my $ua = LWP::UserAgent->new( my $ua = LWP::UserAgent->new(timeout => 30);
agent => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 GTB7.1",
timeout => 30
);
my $response = $ua->get($url); my $response = $ua->get($url);
die($response->status_line) unless ($response->is_success); die($response->status_line) unless ($response->is_success);
my $content = $response->decoded_content; $content = decode_json($response->decoded_content);
$infos{'title'} = $content->{'name'};
my $parser = HTML::Parser->new(); $infos{'author'} = $content->{'user'}->{'name'};
$parser->handler(text => \&parser_text, 'text'); $infos{'url'} = $content->{'url'};
$parser->handler(start => \&parser_start, 'tagname'); $infos{'duration'} = $content->{'audio_length'};
$parser->handler(end => \&parser_end, 'tagname');
$parser->unbroken_text(1);
$parser->report_tags('title', 'a');
$parser->parse($content);
$parser->eof();
$infos{'url'} = $url;
return %infos; return %infos;
} }
sub parser_text
{
my ($text) = @_;
chomp $text;
$text = decode_entities($text);
if ($inTitle) {
$text =~ s/\n//;
$text =~ s/ \| Mixcloud .*//;
$text =~ s/^ *//;
$text =~ s/[^a-zA-Z0-9\(\)\[\]]*$//;
($infos{'author'}, $infos{'title'}) = split (' - ', $text, 2);
}
}
sub parser_start
{
my ($tag) = @_;
$inTitle = 1 if ($tag eq 'title');
}
sub parser_end
{
my ($tag) = @_;
$inTitle = 0 if ($tag eq 'title');
}
1; 1;
...@@ -37,11 +37,11 @@ sub parse { ...@@ -37,11 +37,11 @@ sub parse {
eval { %content = soundcloud::get($url) }; eval { %content = soundcloud::get($url) };
$content{'site'} = 'soundcloud'; $content{'site'} = 'soundcloud';
} }
# elsif ($msg =~ m#(^|[^!])https?://www.mixcloud.com/([a-zA-Z0-9-_]+/[a-zA-Z0-9-_]+)#) { elsif ($msg =~ m#(^|[^!])https?://www.mixcloud.com/([a-zA-Z0-9-_]+/[a-zA-Z0-9-_]+)#) {
# my $url = 'https://www.mixcloud.com/'.$2; my $url = 'https://www.mixcloud.com/'.$2;
# eval { %content = mixcloud::get($url) }; eval { %content = mixcloud::get($url) };
# $content{'site'} = 'mixcloud'; $content{'site'} = 'mixcloud';
# } }
elsif ($msg =~ m#((^|[^!])http://www[0-9]+.zippyshare.com/v/[0-9]+/file.html)#) { elsif ($msg =~ m#((^|[^!])http://www[0-9]+.zippyshare.com/v/[0-9]+/file.html)#) {
my $url = $1; my $url = $1;
eval { %content = zippy::get($url) }; eval { %content = zippy::get($url) };
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter