X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=videosite.pl;h=5e790f761a97218817f568f8fd31f11a09e59114;hb=4ec35ec1db936d2950d9ef41cd8c0db533ec579d;hp=cf47cc6f1a4c3e8c30a0dfc280ad00fea102fe71;hpb=ceaa51ce71b9531ca0f088d106f4c62b99638bda;p=videosite.git diff --git a/videosite.pl b/videosite.pl index cf47cc6..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); } @@ -318,6 +373,7 @@ sub cmd_getter { if ($p->{'NAME'} eq $target) { $getter = $p; $conf->{'videosite'}->{'getter'} = $target; + write_irssi("Getter changed to %s", $target); return; } } @@ -334,6 +390,7 @@ sub cmd_mode { $mode = lc($mode); if (('download' eq $mode) or ('display' eq $mode)) { $conf->{'videosite'}->{'mode'} = $mode; + write_irssi('Now using %s mode', $mode); } else { write_irssi('Invalid mode: %s', $mode); }