I've been using this script for a few weeks and since today, I get this error when searching for a movie:
[15:11] Tcl error [imdb_proc]: can't read "location": no such variable
I did not change anything, did IMDb change something maybe? How to solve?
Code: Select all
############################################################
## This iMDB.tcl requires Eggdrop1.6.0 or higher ##
## (c) 2003 by B0unTy ##
############################################################
## ##
## INSTALL: ##
## ======== ##
## 1- Copy iMDB.tcl in your dir scripts/ ##
## 2- Add iMDB.tcl in your eggdrop.conf: ##
## source scripts/imdb.tcl ##
## ##
## For each channel you want users to use !imdb cmd ##
## Just type in partyline: .chanset #channel +imdb ##
## ##
############################################################
# COOKIES ARE :
# =============
# TITLE = %title | BOLD = %bold
# URL = %url | UNDERLINE = %uline
# DIRECTOR = %name | COLORS = %color#,#
# GENRE = %genre | NEW LINE = \n
# SYNOPSIS = %plot |-----------------------------
# RATING = %rating | !! to reset color code !!
# VOTES = %votes | !! use %color w/o args !!
# RUNTIME = %time |
# BUDGET = %budget |
# SCREENS = %screens |
# TAGLINE = %tagline |
# MPAA = %mpaa |
# COUNTRY = %country |
# LANGUAGE = %language |
# SOUND MIX = %soundmix |
# TOP 250 = %top250 |
#
# RANDOMIZING OUTPUT :
# ====================
# Example:
# set random(IMDBIRC-0) "IMDB info for %bold%title%bold Directed by %name"
# set random(IMDBIRC-1) "IMDB info for %title Directed by %bold%name%bold"
# set random(IMDBIRC-2) "IMDB info for %title Directed by %name"
# TYPE --------^ ^
# ID --------^
#
# set announce(IMDBIRC) "random 3"
# TYPE ---------^ ^ ^
# RANDOM ----------^ ^
# # OF IDS ---------^
#
# example random announces:
# set announce(IMDBIRC) "random 3"
# set random(IMDBIRC-0) "IMDB info for %bold%title%bold Directed by %name -> rated %uline%rating%uline (%votes votes) - genre: %genre - runtime: %time mins >> URL: %uline%url%uline >> Budget: %budget >> Screens: (USA) %screens"
# set random(IMDBIRC-1) "TITLE: %bold%title%bold - DIRECTOR: %name - RATE: %rating by %votes users - GENRE: %genre - RUNTIME: %time mins - URL: %url - BUDGET: %budget - SCREENS: (USA) %screens"
# set random(IMDBIRC-2) "%bold%title%bold - %url\n%boldDirected by:%bold %name\n%boldGenre:%bold %genre\n%boldTagline:%bold %tagline\n%boldSynopsis:%bold %plot\n%boldRating:%bold %rating (%votes votes) top 250:%bold%top250%bold\n%boldMPAA:%bold %mpaa\n%boldRuntime:%bold %time mins.\n%boldCountry:%bold %country\n%boldLanguage:%bold %language\n%boldSound Mix:%bold %soundmix\n%boldBudget:%bold %budget \n%boldOpening Weekend:%bold (USA) %screens"
# example normal announce:
set announce(IMDBIRC) "%bold%title%bold - %url\n%boldGenre:%bold %genre\n%boldTagline:%bold %tagline\n%boldRating:%bold %rating (%votes votes) top 250:%bold%top250%bold\n%boldRuntime:%bold %time mins."
# for a channel !imdb request
# set to 1 = all results will be sent publicly to the channel
# set to 0 = all results will be sent as private notice
set pub_or_not 1
# use or not the imdb debugger (1=enable debug 0=disable debug)
set IMDB_DEBUG 0
# set IMDB_ALTERNATIVE 0 = use the internal tcl http 2.3 package
# set IMDB_ALTERNATIVE 1 = use the external curl 6.0+
set IMDB_ALTERNATIVE 0
# set here the location path where find curl 6.0+
set binary(CURL) ""
#################################################################
# DO NOT MODIFY BELOW HERE UNLESS YOU KNOW WHAT YOU ARE DOING! #
#################################################################
if { $IMDB_ALTERNATIVE == 0 } { package require http 2.3 }
setudef flag imdb
bind pub -|- !imdb imdb_proc
bind join - * imdb:join:message
proc imdb:join:message {nick uhost hand chan} {
global imdb
set permission_result [channel_check $chan]
if { $permission_result == 0 } { return }
if {[isbotnick $nick] || [matchattr $hand bo]} {return}
set joinmsg "Type \002!imdb\002 for an Internet Movie Database (IMDB) Search."
notice $nick $joinmsg
}
proc notice {who what} {
putquick "NOTICE $who :$what"
}
proc htmlcodes {tempfile} {
set mapfile [string map {\" ' & & [ ( \\ / ] ) \{ ( \} ) £ £ ¨ ¨ © © « « ® ®} $tempfile]
set mapfile [string map {´ ´ · · ¹ ¹ » » ¼ ¼ ½ ½ ¾ ¾ À À Á Á Â Â } $mapfile]
set mapfile [string map {Ã Ã Ä Ä Å Å Æ Æ Ç Ç È È É É Ê Ê Ë Ë Ì Ì Í Í Î Î Ï Ï Ð Ð Ñ Ñ Ò Ò Ó Ó Ô Ô Õ Õ Ö Ö } $mapfile]
set mapfile [string map {× × Ø Ø Ù Ù Ú Ú Û Û Ü Ü Ý Ý Þ Þ ß ß à à á á â â ã ã ä ä å å æ æ ç ç è è é é ê ê } $mapfile]
set mapfile [string map {ë ë ì ì í í î î ï ï ð ð ñ ñ ò ò ó ó ô ô õ õ ö ö ÷ ÷ ø ø ù ù ú ú û û ü ü ý ý þ þ } $mapfile]
return $mapfile
}
proc channel_check { chan } {
foreach setting [channel info $chan] {
if {[regexp -- {^[\+-]} $setting]} {
if {![string compare "+imdb" $setting]} {
set permission 1
break
} else {
set permission 0
}
}
}
return $permission
}
proc replacevar {strin what withwhat} {
set output $strin
set replacement $withwhat
set cutpos 0
while { [string first $what $output] != -1 } {
set cutstart [expr [string first $what $output] - 1]
set cutstop [expr $cutstart + [string length $what] + 1]
set output [string range $output 0 $cutstart]$replacement[string range $output $cutstop end]
}
return $output
}
proc imdb_proc { nick uhost handle chan arg } {
global IMDB_DEBUG pub_or_not announce random binary IMDB_ALTERNATIVE
set arg [string map {\\ \\\\ \" \\\" \' \\\' \{ \\\{ \} \\\} \[ \\\[ \] \\\] \( \\\( \) \\\)} $arg]
# channel_check permission
set permission_result [channel_check $chan]
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG permission_result == $permission_result" }
if { $permission_result == 0 } { return }
# public or private
if {$pub_or_not == 1 } { set toput "PRIVMSG $chan" } else { set toput "NOTICE $nick" }
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG toput_result == $toput" }
# if no arg passed, show help
if {$arg == ""} {
if { $IMDB_ALTERNATIVE == 0 } { set using "Http 2.3+" } else { set using "Curl 6.0+" }
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG no arg passed, show help" }
putquick "$toput :IMDb info script \002v2.3.4\002 by B0unTy using \002$using\002"
putquick "$toput :\002Syntax: !imdb <movie title>\002 example: !imdb Beautiful Mind"
return
}
# initial search
set imdburl "http://www.imdb.com"
set imdbsearchurl "http://akas.imdb.com/find?tt=on;nm=on;mx=5;"
set searchString [string map {\ %20 & %26 , %2C . %20} $arg]
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG searchString: \"$searchString\"" }
if { $IMDB_ALTERNATIVE == 0 } {
set page [::http::config -useragent "MSIE 6.0"]
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG ${imdbsearchurl}q=$searchString" }
set page [::http::geturl ${imdbsearchurl}q=$searchString]
set html [::http::data $page]
::http::Finish $page
} else {
catch { exec $binary(CURL) "${imdbsearchurl}q=$searchString" } html
}
#if redirect necessary, find first link and redirect
if { [regexp {<title>IMDb name and title search</title>} $html] == 1 } {
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG redirect 1" }
set ttcode "0000001"
if [regexp {/title/tt[0-9]+} $html ttcode] {
set pos [string last / $ttcode] ; incr pos
set ttcode [string range $ttcode $pos end]
}
# for bogus ttcode
if { $ttcode == "0000001" } {
puthelp "$toput :No no no! I can't find that!"
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG bogus ttcode" }
return
}
set newurl "$imdburl/title/$ttcode/"
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG redirect 1 = $newurl" }
# get the page redirected to
unset html
if { $IMDB_ALTERNATIVE == 0 } {
set page [::http::config -useragent "MSIE 6.0"]
set page [::http::geturl $newurl]
set html [::http::data $page]
::http::Finish $page
} else {
catch { exec $binary(CURL) "$newurl" } html
}
# if no redirect happened, then get first page on match
} else {
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG redirect 0" }
if { $IMDB_ALTERNATIVE == 0 } {
upvar 0 $page oldpage
regexp {title/tt[0-9]+/} $oldpage(body) location
} else {
set result [catch { exec $binary(CURL) -i "${imdbsearchurl}q=$searchString" } oldpage]
regexp {title/tt[0-9]+/} $oldpage location
}
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG redirect 0 Location == $location" }
set newurl "$imdburl/$location"
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG redirect 0 = $newurl" }
unset html
if { $IMDB_ALTERNATIVE == 0 } {
set page [::http::config -useragent "MSIE 6.0"]
set page [::http::geturl $newurl]
set html [::http::data $page]
::http::Finish $page
} else {
catch { exec $binary(CURL) "$newurl" } html
}
}
# for bogus searches
if {[string length $newurl] == 0} {
puthelp "$toput :No no no! I can't find that!"
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG bogus searches" }
return
}
set title "N/A" ; set name "N/A" ; set genre "N/A" ; set tagline "N/A"
set plot "N/A" ; set rating "N/A" ; set votes "N/A" ; set mpaa "N/A"
set runtime "N/A" ; set budget "N/A" ; set screens "N/A" ; set country "N/A"
set language "N/A" ; set soundmix "N/A" ; set top250 "N/A"
## get title
if [regexp {<title>[^<]+} $html title] {
set pos [expr [string last > $title] + 1]
set title [string range $title $pos end]
set title [htmlcodes $title]
}
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG title == $title" }
## get director
if [regexp {Directed by</b><br>\n <[^>]+>[^<]+} $html name] {
set pos [string last > $name] ; incr pos
set name [string range $name $pos end]
set name [htmlcodes $name]
}
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG director == $name" }
## get genre
if [regexp {<a href=./Sections/Genres[^\n]+} $html genre] {
regsub -all {<[^\>]*>} $genre {} genre
regsub {\(.*\)} $genre {} genre
}
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG genre == $genre" }
## get tagline
if [regexp {<b class="ch">Tagline:</b>[^<]+} $html tagline] {
set pos [string last > $tagline] ; incr pos
set tagline [string range $tagline $pos end]
set tagline [string trim $tagline]
set tagline [htmlcodes $tagline]
}
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG tagline == $tagline" }
## get plot
if [regexp {<b class=\"ch\">Plot (Summary|Outline):</b>[\s\n]+[^<]+} $html plot] {
set pos [string last > $plot] ; incr pos
set plot [string range $plot $pos end]
set plot [string trim $plot]
set plot [htmlcodes $plot]
}
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG plot == $plot" }
## get iMDb rating
if [regexp {<b>\d.\d/10</b> \([\w\s\d,]+\)} $html rating] {
set pos [string last ( $rating]
set pos1 [string first { } $rating $pos]
incr pos ; incr pos1 -1
set votes [string range $rating $pos $pos1]
set rating [string range $rating 3 8]
}
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG rating == $rating | votes == $votes" }
## get TOP 250
if [regexp {<a href="/top_250_films">[^\n]+} $html top250] {
regexp {#[^<]+} $top250 top250
}
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG top250 == $top250" }
## get MPAA
if [regexp {<b class="ch"><a href="/mpaa">[^\n]+} $html mpaa] {
regsub -all {<[^\>]*>} $mpaa {} mpaa
regsub {MPAA: } $mpaa {} mpaa
set mpaa [htmlcodes $mpaa]
}
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG mpaa == $mpaa" }
## get runtime
if [regexp {<b class=\"ch\">Runtime:</b>([\n\s]+)([\w:]+)(\d+)} $html runtime] {
regsub -all {[\n\s]+} $runtime {} runtime
set pos [string last > $runtime] ; incr pos
set runtime [string range $runtime $pos end]
set pos [string last : $runtime]
if {$pos != -1} {incr pos ; set runtime [string range $runtime $pos end]}
}
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG runtime == $runtime" }
## get country
if [regexp {<a href=./Sections/Countries[^\n]+} $html country] {
regsub -all {<[^\>]*>} $country {} country
}
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG country == $country" }
## get language
if [regexp {<a href=./Sections/Languages[^\n]+} $html language] {
regsub -all {<[^\>]*>} $language {} language
}
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG language == $language" }
## get soundmix
if [regexp {<a href=./List.sound-mix=[^\n]+} $html soundmix] {
regsub -all {<[^\>]*>} $soundmix {} soundmix
}
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG language == $language" }
unset html
if { $IMDB_ALTERNATIVE == 0 } {
set page2 [::http::config -useragent "MSIE 6.0"]
set page2 [::http::geturl ${newurl}business]
set html [::http::data $page2]
::http::Finish $page2
} else {
catch { exec $binary(CURL) "${newurl}business" } html
}
## get budget
if [regexp {<b>Budget</b></dt>[\s\n]?<dd><[^>]+>[^<]+} $html budget] {
set pos [string last > $budget] ; incr pos
set budget [string range $budget $pos end]
set budget [string map {€ € £ £ } $budget]
}
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG budget == $budget" }
## get screens
if [regexp {<b>Opening Weekend</b></dt>[\s\n]?[^\n]+} $html opweek] {
if [regexp {\(USA\) \([^)]+\) \([^)]+\)} $opweek screens] {
set pos [string last ( $screens]
set pos1 [string last ) $screens]
incr pos ; incr pos1 -1
set screens [string range $screens $pos $pos1]
}
}
if {$IMDB_DEBUG == 1} { puthelp "NOTICE $nick :IMDB_DEBUG screens == $screens" }
## output results
if { ! [string compare [lindex $announce(IMDBIRC) 0] "random"] && [string is alnum -strict [lindex $announce(IMDBIRC) 1]] == 1 } {
set output $random(IMDBIRC\-[rand [lindex $announce(IMDBIRC) 1]])
} else {
set output $announce(IMDBIRC)
}
set output [replacevar $output "%bold" "\002"]
set output [replacevar $output "%color" "\003"]
set output [replacevar $output "%uline" "\037"]
set output [replacevar $output "%title" $title]
set output [replacevar $output "%url" $newurl]
set output [replacevar $output "%name" $name]
set output [replacevar $output "%genre" $genre]
set output [replacevar $output "%tagline" $tagline]
set output [replacevar $output "%plot" $plot]
set output [replacevar $output "%rating" $rating]
set output [replacevar $output "%votes" $votes]
set output [replacevar $output "%top250" $top250]
set output [replacevar $output "%mpaa" $mpaa]
set output [replacevar $output "%time" $runtime]
set output [replacevar $output "%country" $country]
set output [replacevar $output "%language" $language]
set output [replacevar $output "%soundmix" $soundmix]
set output [replacevar $output "%budget" $budget]
set output [replacevar $output "%screens" $screens]
foreach line [split $output "\n"] {
puthelp "$toput :$line"
}
}
putlog "IMDB info version 2.3.4 loaded"