use strict; use Irssi; use LWP::UserAgent; use HTML::Entities; use vars qw($VERSION %IRSSI $cache); $VERSION = '1.05'; %IRSSI = ( authors => 'Eric Jansen', contact => 'chaos@sorcery.net', name => 'imdb', description => 'Automatically lookup IMDB-numbers in nicknames', license => 'GPL', modules => 'LWP::UserAgent HTML::Entities', url => 'http://xyrion.org/irssi/', changed => '2022-12-09', selfcheckcmd=> 'imdb check', ); my $ua = new LWP::UserAgent; $ua->agent("Irssi/imdb/$VERSION"); # Set the timeout to five second, so it won't freeze the client too long on laggy connections $ua->timeout(5); my $last_result; sub event_nickchange { my ($channel, $nick, $old_nick) = @_; # Lookup any 7-digit number in someone elses nick if($nick->{'nick'} ne $channel->{'ownnick'}->{'nick'} && $nick->{'nick'} =~ /\D(\d{7})(?:\D|$)/) { my $id = $1; # See if we know the title already if(defined $cache->{$id}) { # Print it $channel->printformat(MSGLEVEL_CRAP, 'imdb_lookup', $old_nick, $cache->{$id}->{'title'}, $cache->{$id}->{'year'}); } # Otherwise, contact IMDB else { # Fetch the movie detail page my $req = new HTTP::Request(GET => "http://www.imdb.com/title/tt$id/"); my $res = $ua->request($req); # Get the title and year from the fetched page if($res->is_success && $res->content =~ /(.+?) \((.+)\).*<\/title>/i) { # https://www.imdb.com/title/tt1234567/ # <title>"So You Think You Can Dance" The Top 14 Perform (TV Episode 2008) - IMDb # https://www.imdb.com/title/tt0234567/ # The Ranchman's Nerve (1911) - IMDb my ($title, $year) = ($1, $2); # Decode special characters in the title $title= decode_entities($title); $last_result= { title=> $title, year=> $year }; # Print it if ($channel->{type} eq "CHANNEL" ) { $channel->printformat(MSGLEVEL_CRAP, 'imdb_lookup', $old_nick, $title, $year); } else { Irssi::printformat(MSGLEVEL_CRAP, 'imdb_lookup', $old_nick, $title, $year); } # And cache it $cache->{$id} = { 'title' => $title, 'year' => $year }; } } } } # /imdb sub cmd { my ($args, $server, $witem)=@_; if ($args =~ m/check/) { my $s='ok'; $last_result= {}; $witem->{'ownnick'}->{'nick'}="sepp"; my $nick={ nick=>"susi_1234567" }; event_nickchange( $witem, $nick , "imdb"); unless ( $last_result->{title} =~ m/You Can Dance/ ) { $s="Error: title ($last_result->{title})"; } unless ($last_result->{year} =~ m/2008/ ) { $s="Error: year ($last_result->{year})"; } Irssi::print("imdb: self check: $s"); my $schs = exists $Irssi::Script::{'selfcheckhelperscript::'}; Irssi::command("selfcheckhelperscript $s") if ( $schs ); } elsif ( $args =~ m/\d{7}/ ) { $args =~ s/\s//g; $witem->{'ownnick'}->{'nick'}="sepp"; my $nick={ nick=>"susi_$args" }; event_nickchange( $witem, $nick , "imdb"); } } Irssi::theme_register([ 'imdb_lookup', '{nick $0} is watching {hilight $1} ($2)' ]); Irssi::signal_add('nicklist changed', 'event_nickchange'); Irssi::command_bind($IRSSI{name},\&cmd); # vim:set ts=8 sw=4: