diff options
Diffstat (limited to 'scripts/imdb.pl')
-rw-r--r-- | scripts/imdb.pl | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/scripts/imdb.pl b/scripts/imdb.pl new file mode 100644 index 0000000..601b480 --- /dev/null +++ b/scripts/imdb.pl @@ -0,0 +1,115 @@ +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>(.+?) \((.+)\).*<\/title>/i) { + + # https://www.imdb.com/title/tt1234567/ + # <title>"So You Think You Can Dance" The Top 14 Perform (TV Episode 2008) - IMDb</title> + # https://www.imdb.com/title/tt0234567/ + # <title>The Ranchman's Nerve (1911) - IMDb</title> + + 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: |