x0x wrote:Now !imdb matrix does not work but !imdb Matrix does. Same with the other fix mentioned above by adding A-Z to the already a-z0-9
Anyone a solution?
The issue here is the fellow was running into issues with characters in the url path. He wasn't using http packages handy http::formatQuery option. Instead he was mapping spaces to + and trying to sanitize input. This reduces the complexity and completeness of the search, crippling it.
Here is a new version, works with all characters (yes, even those special characters
}{$"), even foreign languages although the script is written in english output only. All credit to doggo. If you find yourself using this script, consider it beerware. Put quite simple, you owe doggo a beer. If you can't afford to buy him a beer via paypal there is an optional means of payment: Take a picture of yourself drinking a beer. The background of this picture should be a monitor displaying your irc channel with this scripts output among what is displayed. Put a short personal message to doggo and we have proper payment. Enjoy the script everyone
Note: Uses the version Spike^^ provided so includes any code fixes he made as well...
Code: Select all
# 13/02/2013
# by doggo #omgwtfnzbs @ EFNET
# drop in and try this script ;) all feedback is welcome
# to add channels, do: .chanset #somechan +imdbapi
setudef flag imdbapi
namespace eval imdb {
namespace eval api {
#time limit between cmds
variable flood_set "10"
#trigger to search by ttid
variable info_tttrig "-tt"
#title search trigger
variable info_strig "-imdb"
variable ttsearch_url "http://www.omdbapi.com/?i"
variable titlesearch_url "http://www.omdbapi.com/?t"
variable info_htrig "??imdb"
}
bind pub -|- $imdb::api::info_tttrig imdb::imdb_evaluate::evaluate_imdb
bind pub -|- $imdb::api::info_strig imdb::imdb_evaluate_search::search_evaluate_imdb
bind pub -|- $imdb::api::info_htrig imdb::imdb_helper::helper_imdb
# get info from ttid proc
namespace eval imdb_evaluate {
proc evaluate_imdb {nick hand host chan titleid} {
if {![channel get $chan "imdbapi"]} { return 0 }
set imdb_pub "PRIVMSG $chan"
#flood protection, borrowed from http://forum.egghelp.org/viewtopic.php?t=17078 :D
variable imdb_flood
if {[info exists imdb_flood(lasttime,$chan)] && [expr { $imdb_flood(lasttime,$chan) + $imdb::api::flood_set }] > [clock seconds]} {
puthelp "$imdb_pub :You can use only 1 command in $imdb::api::flood_set seconds. Wait [expr { $imdb::api::flood_set + $imdb_flood(lasttime,$chan) - [clock seconds] }] seconds and try again."
return
}
set titleid [split [stripcodes bcruag $titleid]]
if {![string length [set ttid [lindex $titleid 0]]]} {
putquick "$imdb_pub :Usage: $imdb::api::info_tttrig tt1899353"
return
}
set action [lindex $titleid 1]
if {![regexp {^tt([0-9]+)$} $ttid match imdbid] } {
putquick "$imdb_pub :Error: not a valid ttid."
return
}
if {![catch { ::http::geturl $imdb::api::ttsearch_url=tt$imdbid -timeout 15000 } token]} {
set information [::http::data $token]
::http::cleanup $token
if {![regexp -nocase {response"\:"(.*?)"} $information match response]} {
putquick "$imdb_pub :$imdb::api::ttsearch_url=tt$imdbid timed out.. try again in a bit "
return
} elseif {![string match "True" $response]} {
putquick "$imdb_pub :Error: Unknown IMDb ID"
return
}
::imdb::imdb_trigger::trigger_imdb $information $action $chan
} else {
putquick "$imdb_pub :Error: $token"
return
}
set imdb_flood(lasttime,$chan) [clock seconds]
}
}
# get info from title search proc
namespace eval imdb_evaluate_search {
proc search_evaluate_imdb {nick hand host chan imdbsearch} {
if {![channel get $chan "imdbapi"]} { return 0 }
set imdb_pub "PRIVMSG $chan"
#flood protection, borrowed from http://forum.egghelp.org/viewtopic.php?t=17078 :D
variable imdb_flood
if {[info exists imdb_flood(lasttime,$chan)] && [expr { $imdb_flood(lasttime,$chan) + $imdb::api::flood_set } ] > [clock seconds]} {
puthelp "$imdb_pub :You can use only 1 command in $imdb::api::flood_set seconds. Wait [expr { $imdb::api::flood_set + $imdb_flood(lasttime,$chan) - [clock seconds] } ] seconds and try again."
return
}
if {![llength [set imdbsearch [split [stripcodes bcruag $imdbsearch]]]]} {
putquick "$imdb_pub :Usage: $imdb::api::info_strig Mission Impossible"
return
}
if {[string index [set imdbswitch [lindex $imdbsearch end]] 0] == "-"} {
set imdbsearch [join [lrange $imdbsearch 0 end-1]]
set imdbswitch [string range $imdbswitch 1 end]
} else {
set imdbswitch ""
set imdbsearch [join $imdbsearch]
}
if {![catch { ::http::geturl $imdb::api::titlesearch_url=[http::formatQuery $imdbsearch] -timeout 15000 } token]} {
set information [::http::data $token]
::http::cleanup $token
regexp -nocase {response"\:"(.*?)"} $information match response
if {![info exists response]} {
putquick "$imdb_pub :Error: $imdb::api::titlesearch_url=[http::formatQuery $imdbsearch] timed out.. try again in a bit "
return
} elseif {![string match "True" $response]} {
putquick "$imdb_pub :Error: 0 Results for $imdbsearch"
return
}
::imdb::imdb_trigger::trigger_imdb $information $imdbswitch $chan
} else {
putquick "$imdb_pub :Error: $token"
return
}
set imdb_flood(lasttime,$chan) [clock seconds]
}
}
# parse the returned json proc
namespace eval imdb_trigger {
proc trigger_imdb {information action chan} {
regexp -nocase {title"\:"(.*?)"} $information match title
regexp -nocase {year"\:"(.*?)"} $information match year
regexp -nocase {rated"\:"(.*?)"} $information match rated
regexp -nocase {released"\:"(.*?)"} $information match released
regexp -nocase {genre"\:"(.*?)"} $information match genre
regexp -nocase {director"\:"(.*?)"} $information match director
regexp -nocase {writer"\:"(.*?)"} $information match writer
regexp -nocase {actors"\:"(.*?)"} $information match actors
regexp -nocase {plot"\:"(.*?)"} $information match plot
regexp -nocase {poster"\:"(.*?)"} $information match poster
regexp -nocase {runtime"\:"(.*?)"} $information match runtime
regexp -nocase {rating"\:"(.*?)"} $information match rating
regexp -nocase {votes"\:"(.*?)"} $information match votes
regexp -nocase {ID"\:"(.*?)"} $information match id
set imdb_pub "PRIVMSG $chan"
switch -exact -- [string tolower $action] {
"title" { putquick "$imdb_pub :\00308\[IMDB Title\]\017 $title" }
"year" { putquick "$imdb_pub :\00308\[IMDB Year\]\017 $year" }
"rated" { putquick "$imdb_pub :\00308\[IMDB Rated\]\017 $rated" }
"released" { putquick "$imdb_pub :\00308\[IMDB Released\]\017 $released" }
"genre" { putquick "$imdb_pub :\00308\[IMDB Genre\]\017 $genre" }
"director" { putquick "$imdb_pub :\00308\[IMDB Directed By\]\017 $director" }
"writer" { putquick "$imdb_pub :\00308\[IMDB Written By\]\017 $writer" }
"cast" { putquick "$imdb_pub :\00308\[IMDB Cast\]\017 $actors" }
"plot" { putquick "$imdb_pub :\00308\[IMDB Plot\]\017 $plot" }
"poster" { putquick "$imdb_pub :\00308\[IMDB Poster\]\017 $poster" }
"runtime" { putquick "$imdb_pub :\00308\[IMDB Runtime\]\017 $runtime" }
"rating" { putquick "$imdb_pub :\00308\[IMDB Rating\]\017 $rating" }
"votes" { putquick "$imdb_pub :\00308\[IMDB Votes\]\017 $votes" }
"link" { putquick "$imdb_pub :\00308\[Link\]\017 http://www.imdb.com/title/$id/" }
default {
putquick "$imdb_pub :\00308\[Title\]\017 $title \00308\[Year\]\017 $year \00308\[Genre\]\017 $genre"
putquick "$imdb_pub :\00308\[Directed By\]\017 $director \00308\[Writen By\]\017 $writer"
putquick "$imdb_pub :\00308\[Released\]\017 $released \00308\[Rated\]\017 $rated"
putquick "$imdb_pub :\00308\[Cast\]\017 $actors"
putquick "$imdb_pub :\00308\[Plot\]\017 $plot"
putquick "$imdb_pub :\00308\[Poster\]\017 $poster"
putquick "$imdb_pub :\00308\[Runtime\]\017 $runtime \00308\[Rating\]\017 $rating \00308\[Votes\]\017 $votes"
putquick "$imdb_pub :\00308\[Link\]\017 http://www.imdb.com/title/$id/"
}
}
}
}
# usage helper proc
namespace eval imdb_helper {
proc helper_imdb {nick hand host chan text} {
if {![channel get $chan "imdbapi"]} { return }
set imdb_pub "PRIVMSG $chan"
putquick "$imdb_pub :\00308\[IMDB Search Help\]\017"
putquick "$imdb_pub :\00308\[Search IMDB Id\]\017 $imdb::api::info_tttrig tt0234215 | or | $imdb::api::info_tttrig tt0234215 switch"
putquick "$imdb_pub :\00308\[Search Titles\]\017 $imdb::api::info_strig the matrix reloaded | or | $imdb::api::info_strig the matrix reloaded --switch"
putquick "$imdb_pub :\00308\[Search Switches\]\017 title year rated released genre director writer cast plot poster runtime rating votes link | no switch = spam :D"
}
}
}
#eof