The IMDB (Internet Movie DataBase) Searcher
Platform: mIRC
Published Mar 30, 2009
Updated May 02, 2009
One of my friends coded a similar socket script but in a different coding language (he says it's not MSL and I don't know what it is), so I've decided to take his "layout" and transform it into a usable mIRC-version script.
This was one of my more difficult socket scripts, as I had to sockopen
twice into the same website. One of the many problems was redirection of pages. On the first sockopen, it went to the search page as expected, but in other cases, it directly linked to the movie/tv show page.
I am surprised though, at how
fast the script works (approximately > 4 ~ 5 seconds to message results), despite the two sockopens.
Anyhow I've fixed all known errors, but of course, if you find any errors please post a comment on this snippet page. :)
Syntax: .imdb <movie/tv show>.
I've also added a menu function to turn the script on or off, and yes, there is a 15-second flood protection
If you don't have a bot, you can use this version:
http://www.impulze.net/paste/11597/
If you love expanded form and is a absolute vitality to your existence:
http://www.impulze.net/paste/11599/
Thank you to Blitzjager for lending me a hand with one of the identifiers.
I hope you enjoy the
stars.
Enjoy! :D
Here's a picture:
;BOF
;~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*;
; IMDB Movie/TV Show Searcher ;
; Made by Kirby (Quakenet) ;
;*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~;
;~*~*~*~*~*~*~*~*~*~*~*~*;
;IMDB Aliases/Identifiers;
;~*~*~*~*~*~*~*~*~*~*~*~*;
alias -l addmark { return $+($sock($1).mark,$chr($3),$2) }
alias -l between { noop $regex($1,/\Q $+ $2 $+ \E(.*?)\Q $+ $3 $+ \E/gi) | return $regml($4) }
alias -l char { return $replace($regsubex($1,/&#(x?([a-f\d]*));/gi,$chr($iif($left(\1,1) == x,$base(\2,16,10),\2))),&,&,<,<,>,>,",") }
alias -l div { var %x $calc($0 - 1), %y 1 | while (%y < %x) { if ($ [ $+ [ %y ] ] != $null) { var %z %z $ [ $+ [ %y ] ] $chr($iif($ [ $+ [ $0 ] ] !isnum 1-,$chr(45),$v1)) } | inc %y } | var %z %z $ [ $+ [ $calc($0 - 1) ] ] | return $deltok(%z,$calc($numtok(%z,45)+1),45) }
alias -l htmlfree { var %x, %i = $regsub($1-,/(^[^<]*>|<[^>]*>|<[^>]*$)/g,$null,%x), %x = $remove(%x, ) | return $remove($replace(%x,$cr,$chr(32),$lf,$chr(32)),$chr(9)) }
alias -l lt { var %l $1, %t $2- | tokenize 94 $sock(imdb2).mark | while ($len(%t) > %l) { smsg $1 $left(%t,%l) | var %t $remove(%t,$left(%t,%l)) } | if (%t) smsg $1 %t }
alias -l smsg { msg $iif(c isincs $chan($1).mode,$1 $strip($2-),$1-) }
alias -l star { var %x $iif($abs($round($1,0)) <= 10,$v1,10) | return $+($str(8*,%x),$str(*,$calc(10-%x))) }
menu * {
$iif($group(#IMDB) == On,$style(1)) IMDB Movie/TV Show Search
.$iif($group(#IMDB) == On,$style(2)) On: .enable #IMDB
.$iif($group(#IMDB) == Off,$style(2)) Off: .disable #IMDB
}
;~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*;
;Search a movie/tv show - Syntax: .imdb [movie/tv show];
;~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*;
#IMDB On
on $*:text:/^[.!@]imdb*/Si:#: { if (!$2-) { .notice $nick [1,8Internet Movie Database]: You must supply a movie/tv show to search! | halt } | $iif($istok(%internetmoviedatabase,#,32),halt,set -u1 %internetmoviedatabase $addtok(%internetmoviedatabase,#,32)) | sockopen imdb www.imdb.com 80 | sockmark imdb # $replace($2-,$chr(32),+) }
#IMDB End
;~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*;
;Socket #1 (Finds first "exact match" link);
;~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*;
on *:sockopen:imdb: { tokenize 32 $sock(imdb).mark | sockwrite -n $sockname GET /find?s=all&q= $+ $2 HTTP/1.0 | sockwrite -n $sockname Host: www.imdb.com $+ $crlf $+ $crlf }
on *:sockread:imdb: {
tokenize 32 $sock(imdb).mark | sockread %imdb
if (<p style="margin:0 0 0.5em 0;"> isin %imdb) { if ($gettok($gettok(%imdb,4,34),1,47) != title) { halt } | elseif ($gettok($gettok(%imdb,4,34),1,47) == title) { sockmark imdb $+($1,^,$gettok(%imdb,4,34)) | halt } }
elseif (Location: isin %imdb) { sockmark imdb $+($1,^,$gettok($gettok(%imdb,2,32),3,109)) | halt }
elseif (<b>Titles (Exact Matches)</b> isin %imdb) { sockmark imdb $+($1,^,$noqt($between($between(%imdb,<b>Titles $+($chr(40),Exact Matches,$chr(41),</b>),$+(=",$chr(40),new Image,$chr(40),$chr(41),$chr(41),.src='),1),<a href=,onclick,1))) | halt }
}
on *:sockclose:imdb: { sockopen imdb2 www.imdb.com 80 | sockmark imdb2 $gettok($sock(imdb).mark,1-2,94) }
;~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~;
;Socket #2 (Retrieves information from page);
;~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~;
on *:sockopen:imdb2: { tokenize 94 $sock(imdb2).mark | sockwrite -n $sockname GET $2 HTTP/1.0 | sockwrite -n $sockname Host: www.imdb.com $+ $crlf $+ $crlf }
on *:sockread:imdb2: {
sockread %imdb2 | tokenize 94 $sock(imdb2).mark
if (<title> isin %imdb2) {
if ($htmlfree(%imdb2) == 400 Bad Request) || ($htmlfree(%imdb2) == IMDb:Permission denied) { sockclose imdb2 | msg $gettok($1,1,32) [1,8Internet Movie Database]: Error: Could not retrieve $replace($iif($gettok($1,2,32) == $null,your word,$+(',$v1,')),+,$chr(32)) from the database. Search another movie/tv show? - (15 seconds until next IMDB search) | halt }
sockmark imdb2 $addmark(imdb2,Title: $+(,$char($htmlfree(%imdb2)),),94)
}
elseif (<div class="meta"> isin %imdb2) { sockread %imdb2 | sockmark imdb2 $addmark(imdb2,Rating: $star($gettok($htmlfree(%imdb2),1,47)) $+($chr(40),,$iif($replace($htmlfree(%imdb2),$chr(40),$null,$chr(41),$null),$v1,None),,$chr(41)),94) }
elseif (<h5>MOVIEmeter: isin %imdb2) { sockmark imdb2 $addmark(imdb2,MOVIEmeter: $+(,$iif($gettok($gettok($htmlfree(%imdb2),1,46),2-7,32),$v1,None),),94) }
elseif (<h5>Release Date:</h5> isin %imdb2) { sockread %imdb2 | sockmark imdb2 $addmark(imdb2,Release Date: $+(,$iif(%imdb2,$v1,None),),94) }
elseif (<h5>Genre:</h5> isin %imdb2) { sockread %imdb2 | sockmark imdb2 $addmark(imdb2,Genre: $+(,$remove($replace($htmlfree(%imdb2),|,$chr(183)),$+($chr(32),more)),),94) }
elseif (<h5>Tagline:</h5> isin %imdb2) { sockread %imdb2 | sockmark imdb2 $addmark(imdb2,Tagline: $+($remove($htmlfree(%imdb2),$+($chr(32),more))),94) | halt }
elseif (<h5>Awards:</h5> isin %imdb2) { var %x <a class="tn15more inline" | while (%x !isin %imdb2) { var %imdb3 $addtok(%imdb3,$htmlfree(%imdb2),32) | sockread %imdb2 } | sockmark imdb2 $addmark(imdb2,Awards: $+(,$iif($mid(%imdb3,9,$len(%imdb3)),$v1,None),),94) }
}
on *:sockclose:imdb2: { tokenize 94 $sock(imdb2).mark | lt 440 $remove($gettok($1,1,32),$1) [1,8Internet Movie Database]: $iif($numtok($sock(imdb2).mark,94) >= 1,$div($iif($3,$v1,$null),$iif($4,$v1,$null),$iif($5,$v1,$null),$iif($6,$v1,$null),$iif($7,$v1,$null),$iif($8,$v1,$null),$iif($9,$v1,$null),45),Error: Couldn't find your movie/tv show. Search another?) | lt 425 $remove($gettok($1,1,32),$1) [1,8Internet Movie Database]: URL: $+(,http://,$sock(imdb2).addr,$2,) - (15 seconds until next IMDB search) | unset %imdb* }
;EOF