X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=videosite.pl;h=5e790f761a97218817f568f8fd31f11a09e59114;hb=4ec35ec1db936d2950d9ef41cd8c0db533ec579d;hp=372e62bc92c83168806e07e226c699c73bbe439a;hpb=bae36eef39615e016394e293de90e2825a3489bd;p=videosite.git diff --git a/videosite.pl b/videosite.pl index 372e62b..5e790f7 100644 --- a/videosite.pl +++ b/videosite.pl @@ -23,6 +23,7 @@ use XML::Simple; use Data::Dumper; use File::Spec; use BettIrssi 101 qw(_bcb _bcs); +use LWP::UserAgent; my @grabbers; my @getters; @@ -148,6 +149,58 @@ sub write_debug { } } +sub expand_url_shortener { + my $s = shift; + my $os = ''; + my @urlshortener = ( + 'otf\.me/[[:alnum:]]+', + 'hel\.me/[[:alnum:]]+', + '7ax\.de/[[:alnum:]]+', + 'ow\.ly/[[:alnum:]]+', + 'j\.mp/[[:alnum:]]+', + 'bit\.ly/[[:alnum:]]+', + 'tinyurl\.com/[[:alnum:]]+', + ); + my $ua = LWP::UserAgent->new(agent => 'Mozilla', max_redirect => 0); + my $i = 100; + + OUTER: while (($os ne $s) and ($i > 0)) { + $os = $s; + $i--; + + foreach my $pattern (@urlshortener) { + my $p = "https?:\/\/" . $pattern; + + write_debug("Matching %s against %s", $p, $s); + if ($s =~ m|($p)|) { + my $matched = $1; + my $res; + + write_debug("Found %s", $matched); + $res = $ua->head($matched); + if ($res->is_redirect()) { + my $new = $res->headers()->header("Location"); + + write_debug("Replacing %s with %s", $matched, $new); + $s =~ s/$matched/$new/; + next OUTER; + } else { + write_debug("Error resolving %s", $matched); + } + } + } + } + + if ($i == 0) { + write_debug("Loop terminated by counter"); + } + + write_debug("Final string: %s", $s); + + return $s; +} + + sub check_for_link { my $event = shift; my $message = $event->message(); @@ -163,11 +216,12 @@ sub check_for_link { } push_output($event->ewpf); + $message = expand_url_shortener($message); study($message); # Offer the message to all Grabbers in turn - foreach $g (@grabbers) { + GRABBER: foreach $g (@grabbers) { ($m, $p) = $g->get($message); while (defined($m)) { write_debug('Metadata: %s', Dumper($m)); @@ -186,6 +240,7 @@ sub check_for_link { # more!) $message =~ s/$p//; study($message); + last GRABBER if ($message =~ /^\s*$/); ($m, $p) = $g->get($message); }