diff --git a/lib/sites/mixcloud.pm b/lib/sites/mixcloud.pm index fd3c66c43d09b417264ffab057218f69cb0ca66a..82cec79d0b2cbf7c65caacfc04d6c64c9661deb1 100644 --- a/lib/sites/mixcloud.pm +++ b/lib/sites/mixcloud.pm @@ -1,71 +1,29 @@ package mixcloud; use LWP::UserAgent; -use HTML::Parser; -use HTML::Entities; +use JSON; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw(mixcloud); -my $inTitle = 0; -my $inAuthor = 0; -my %infos; - - sub get { my ($url) = @_; + $url =~ s/www/api/; + my %infos; - my $ua = LWP::UserAgent->new( - 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 $ua = LWP::UserAgent->new(timeout => 30); my $response = $ua->get($url); die($response->status_line) unless ($response->is_success); - my $content = $response->decoded_content; + $content = decode_json($response->decoded_content); + $infos{'title'} = $content->{'name'}; + $infos{'author'} = $content->{'user'}->{'name'}; + $infos{'url'} = $content->{'url'}; + $infos{'duration'} = $content->{'audio_length'}; - my $parser = HTML::Parser->new(); - $parser->handler(text => \&parser_text, 'text'); - $parser->handler(start => \&parser_start, 'tagname'); - $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; } -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; diff --git a/lib/sites/parser.pm b/lib/sites/parser.pm index f0f8466f940be5da063e1c681dee02fb7797245f..ff97f414683d0eca49e574980894e229e5e99f6c 100644 --- a/lib/sites/parser.pm +++ b/lib/sites/parser.pm @@ -37,11 +37,11 @@ sub parse { eval { %content = soundcloud::get($url) }; $content{'site'} = 'soundcloud'; } -# elsif ($msg =~ m#(^|[^!])https?://www.mixcloud.com/([a-zA-Z0-9-_]+/[a-zA-Z0-9-_]+)#) { -# my $url = 'https://www.mixcloud.com/'.$2; -# eval { %content = mixcloud::get($url) }; -# $content{'site'} = 'mixcloud'; -# } + elsif ($msg =~ m#(^|[^!])https?://www.mixcloud.com/([a-zA-Z0-9-_]+/[a-zA-Z0-9-_]+)#) { + my $url = 'https://www.mixcloud.com/'.$2; + eval { %content = mixcloud::get($url) }; + $content{'site'} = 'mixcloud'; + } elsif ($msg =~ m#((^|[^!])http://www[0-9]+.zippyshare.com/v/[0-9]+/file.html)#) { my $url = $1; eval { %content = zippy::get($url) };