X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;ds=inline;f=videosite.pl;h=26ca48099274155a1f83158e8829d740d399a978;hb=1d7fcfba086f022ec85c2bbca513811c4c3eca27;hp=00af09f8bdba07b919f96e9211020530c13bfde5;hpb=d77fac5eb707418ca991cdd1c1e9ab18eeff3097;p=videosite.git diff --git a/videosite.pl b/videosite.pl index 00af09f..26ca480 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,66 @@ sub write_debug { } } +sub expand_url_shortener { + my $s = shift; + my $os = ''; + my @urlshortener = ( + 'is\.gd/[[:alnum:]]+', + 'otf\.me/[[:alnum:]]+', + 'hel\.me/[[:alnum:]]+', + '7ax\.de/[[:alnum:]]+', + 'ow\.ly/[[:alnum:]]+', + 'j\.mp/[[:alnum:]]+', + 'bit\.ly/[[:alnum:]]+', + 'tinyurl\.com/[[:alnum:]]+', + 'pop\.is/[[:alnum:]]+', + 'post\.ly/[[:alnum:]]+', + '1\.ly/[[:alnum:]]+', + '2\.ly/[[:alnum:]]+', + 't\.co/[[:alnum:]]+', + 'shar\.es/[[:alnum:]]+', + ); + my $ua = LWP::UserAgent->new(agent => 'Mozilla', max_redirect => 0); + my $i = 10; + + OUTER: while (($os ne $s) and ($i > 0)) { + study($s); + $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,6 +224,7 @@ sub check_for_link { } push_output($event->ewpf); + $message = expand_url_shortener($message); study($message);