rendered paste body;TITLE IMDB
;AUTHOR entropy
;COMMANDS imdb(0)
;VERSION: 1.1
;HELP imdb [movie]|Defines movies found for [movie] on channel.|none
;============================== ALIASES
alias imdb {
sockclose imdb
sockopen imdb imdb.com 80
sockmark imdb $1-
}
alias -l destroyimdb {
hdel $1 imdbvalue
hdel $1 imdbword
hdel $1 imdbchannel
hdel $1 imdbnick
hdel $1 imdbword
hdel $1 imdbfinish
hdel $1 imdbcontinue
unset %found
unset %caught
unset %answer
unset %cont
}
alias -l striphtml {
var %p = 1, %b = $replace($mid($1-,1,420),$chr(38),$+($chr(32),$chr(38)),;,$+(;,$chr(32)),>,$+(>,$chr(32)),<,$+($chr(32),<,)), %c
while ($gettok(%b,%p,32)) {
%c = $ifmatch
if (*<* iswm %c || *&*; iswm %c || *</* iswm %c || *solid* iswm %c || *px* iswm %c || *:* iswm %c && $remove(%c,:) !isnum || */* iswm %c || *'* iswm %c || *;* iswm %c || *&* iswm %c || *<*>* iswm %c || *=* iswm %c || *"* iswm %c || *>* iswm %c || $+(*,$chr(40),*) iswm %c || $+(*,$chr(41),*) iswm %c || $+(*,$chr(123),*) iswm %c || $+(*,$chr(125),*) iswm %c) { %b = $remove(%b,%c) | %p = 0 }
inc %p
}
return %b
}
alias -l cgsbsock { return $hget(cgsb,socket) | halt }
;============================== EVENTS
on *:signal:imdb:{
var %i = $hget(cgsb,buffer), %p = $hget(cgsb,$+($cgsbsock,.prefix))
var %t = $gettok($hget(cgsb,$+($cgsbsock,.colors)),1,32), %u = $gettok($hget(cgsb,$+($cgsbsock,.colors)),2,32)
var %a = $hget($cgsbsock,access)
tokenize 32 %i
if ($+(:,%p,imdb) == $4) {
if (%a < $getcom(imdb)) { sockwrite -n $cgsbsock notice $gettok($mid($1,2,$len($1)),1,33) $+(:,$iif(%u || %t,$+($chr(3),%t,$chr(44),%u,$chr(32)))) $+ You do not posses enough access for this command. $chr(3) | return }
elseif (!$5) { sockwrite -n $cgsbsock notice $gettok($mid($1,2,$len($1)),1,33) $+(:,$iif(%u || %t,$+($chr(3),%t,$chr(44),%u,$chr(32)))) $+ No movie specified. $chr(3) }
else {
hadd $cgsbsock imdbnick $gettok($mid($1,2,$len($1)),1,33)
hadd $cgsbsock imdbchannel $3
hadd $cgsbsock imdbword $5-
imdb $cgsbsock $5-
}
sockwrite -n $cgsbsock silence $+(+,$gettok($mid($1,2,$len($1)),1,33))
.timer -o 1 2 sockwrite -n $cgsbsock silence $+(-,$gettok($mid($1,2,$len($1)),1,33))
}
}
on *:sockopen:imdb:{
var %t = $gettok($hget(cgsb,$+($sockname,.colors)),1,32), %u = $gettok($hget(cgsb,$+($sockname,.colors)),2,32)
if ($sockerr > 0) { sockwrite -n $gettok($sock($sockname).mark,1,32) notice $hget($gettok($sock($sockname).mark,1,32),imdbnick) $+(:,$iif(%u || %t,$+($chr(3),%t,$chr(44),%u,$chr(32)))) $+ Socket error(s). Try again later. $chr(3) | return }
sockwrite -n $sockname GET $+(http://www.imdb.com/find?s=all&q=,$replace($gettok($sock($sockname).mark,2-,32),$chr(32),+)) HTTP/1.1
sockwrite -n $sockname Host: $+(www.imdb.com,$str($crlf, 2))
}
on *:sockread:imdb:{
var %t = $gettok($hget(cgsb,$+($sockname,.colors)),1,32), %u = $gettok($hget(cgsb,$+($sockname,.colors)),2,32)
if ($sockerr > 0) { sockwrite -n $gettok($sock($sockname).mark,1,32) notice $hget($gettok($sock($sockname).mark,1,32),imdbnick) $+(:,$iif(%u || %t,$+($chr(3),%t,$chr(44),%u,$chr(32)))) $+ Socket error(s). Try again later. $chr(3) | return }
var %a, %b
sockread -f %a
%a = $mid(%a,1,420)
%b = %a
%a = $iif($findtok(%a,$wildtok(%a,$+(*,/title/,*),1,32),1,32),$gettok(%a,$ifmatch,32),%a)
%a = $replace(%a,=,$chr(32),>,$chr(32),",$chr(32),/,$chr(32))
%a = $wildtok(%a,*tt*,1,32) $iif(</html* iswm %a,</html>)
tokenize 32 %a
if (*tt* iswm $1- && $remove($1-,tt) isnum && %found != Y) { %found = Y | %caught = $1- | imdb2 $gettok($sock($sockname).mark,1,32) $1- | sockclose $sockname | return }
if (*</html>* iswm %b && !%caught) { sockwrite -n $gettok($sock($sockname).mark,1,32) notice $hget($gettok($sock($sockname).mark,1,32),imdbnick) $+(:,$iif(%u || %t,$+($chr(3),%t,$chr(44),%u,$chr(32)))) $+ Nothing found. $chr(3) }
}
alias imdb2 {
sockclose imdb2
sockopen imdb2 www.imdb.com 80
sockmark imdb2 $1-
}
on *:sockopen:imdb2:{
var %t = $gettok($hget(cgsb,$+($sockname,.colors)),1,32), %u = $gettok($hget(cgsb,$+($sockname,.colors)),2,32)
if ($sockerr > 0) { sockwrite -n $gettok($sock($sockname).mark,1,32) notice $hget($gettok($sock($sockname).mark,1,32),imdbnick) $+(:,$iif(%u || %t,$+($chr(3),%t,$chr(44),%u,$chr(32)))) $+ Socket error(s). Try again later. $chr(3) | return }
sockwrite -n $sockname GET $+(http://www.imdb.com/title/,$replace($gettok($sock($sockname).mark,2-,32),$chr(32),+),/) HTTP/1.1
sockwrite -n $sockname Host: $+(www.imdb.com,$str($crlf, 2))
}
on *:sockread:imdb2:{
var %t = $gettok($hget(cgsb,$+($sockname,.colors)),1,32), %u = $gettok($hget(cgsb,$+($sockname,.colors)),2,32)
if ($sockerr > 0) { sockwrite -n $gettok($sock($sockname).mark,1,32) notice $hget($gettok($sock($sockname).mark,1,32),imdbnick) $+(:,$iif(%u || %t,$+($chr(3),%t,$chr(44),%u,$chr(32)))) $+ Socket error(s). Try again later. $chr(3) | return }
var %a, %b
sockread -f %a
%a = $mid(%a,1,420)
tokenize 32 %a
if (*<title>* iswm $1-) { %answer = %answer Title: $remove($1-,<title>,</title>) }
if (*<b>*/10</b>* iswm $1-) { %answer = %answer Rating: $remove($1-,<b>,</b>) }
if (*href="/chart/top?*">Top *: #*</a>* iswm $1-) { %answer = %answer $striphtml($1-) }
if (*<h5>*</h5>* iswm $1-) { %cont = Y | %answer = %answer $+($chr(2),$remove($iif(< !isin $2,$1-2,$1),:,<h5>,</h5>,<a),:,$chr(2)) }
elseif (%cont == Y) { %cont = N | %answer = $mid(%answer $remove($striphtml($1-),more),1,420) }
elseif (*</html>* iswm $1- && %answer) { sockwrite -n $gettok($sock($sockname).mark,1,32) privmsg $hget($gettok($sock($sockname).mark,1,32),imdbchannel) $+(:,$iif(%u || %t,$+($chr(3),%t,$chr(44),%u,$chr(32)))) $+ $iif($len(%answer) == 420,$+(%answer,...),%answer) $chr(3) | destroyimdb $gettok($sock($sockname).mark,1,32) }
}