Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ###############################################################################
- ## This iMDB.tcl requires Eggdrop1.6.0 or higher ##
- ## (c) 2003 by B0unTy ##
- ## ##
- ## changed by gr11x ##
- ## 17.01.2013 ##
- ## * Fixed search request url and search page identification ##
- ## ##
- ## changed by username and caesar ##
- ## 19.03.2012 ##
- ## * some random code trimming by username and caesar ##
- ## ##
- ## changed by username ##
- ## 16.03.2012 ##
- ## * changed the anti-flood protection, it was malfunctioning and it's now ##
- ## replaced with a new throttle control. ##
- ## ##
- ## changed by spithash ##
- ## 30.09.2011 ##
- ## * Fixed rating cause imdb's website has changed a little bit ##
- ## * Changed the default theme of 'set announce(IMDBIRC)' to my needs. ##
- ## Don't get nasty if it doesn't look like the old/default one. ##
- ## You can change it back to how you had it using your previous version. ##
- ## ##
- ## changed by znuff ##
- ## 23.08.2011 ##
- ## * Fixed parse of multiple cookies (release date, rating, rbar, votes, ##
- ## title, runtime, awards, comments, mpaa, cert) ##
- ## * Fixed color output for rbar ##
- ## * Set output to UTF-8 by default ##
- ## * Added a new cookie - bullet separator (%bull) ##
- ## * Runtime cookie now includes the prefix "min" ##
- ## * Changed default search url to akas.* to bypass the stupid localization ##
- ## of the title ##
- ## * Grabbing user comments makes another request to IMdb! ##
- ## * What I didn't fix: company, cast_multiline, cast_ine, screens - they ##
- ## do produce output, but not the desired one, and I have no intention ##
- ## to fix ##
- ## ##
- ## changed by username ##
- ## 19.10.2010 ##
- ## *fixed page parsing errors ##
- ## ##
- ## changed by OV2 ##
- ## 05.01.2010 ##
- ## *fixed remaining bugs with imdb changes ##
- ## ##
- ## 02.01.2010 ##
- ## *modified for imdb page changes ##
- ## ##
- ## 16.09.2008 ##
- ## *modified for new imdb page ##
- ## ##
- ## 25.05.2008 ##
- ## *plot works again ##
- ## ##
- ## 19.05.2008 ##
- ## *fixed the non-working cookies (cert, soundmix ...) ##
- ## * "|" characters in cookies are displayed again ##
- ## ##
- ## 21.09.2007 ##
- ## *multiline color/underline/bold were broken ##
- ## +added single-line cast (%castline) ##
- ## +added the remaining information from imdb (color, cert, etc...) ##
- ## ##
- ## 17.07.2007 ##
- ## *fix for the exact title matching ##
- ## *exact name matches are no longer confused with exact title matches ##
- ## ##
- ## 27.06.2007 ##
- ## *works with new imdb search page ##
- ## *%uline works again ##
- ## ##
- ## 09.04.2007: ##
- ## *fixed director/s writer/s ##
- ## +added support for plot keywords ##
- ## +added support for user comment line ##
- ## ##
- ## 28.02.2007: ##
- ## *ratings work again ##
- ## *director and writing credits work again ##
- ## ##
- ## 25.02.2007: ##
- ## *fixed some bugs of the previous changes (thanks to rosc2112) ##
- ## ##
- ## 24.02.2007: ##
- ## *bold/underline/color in front of the multiline cast will now be ##
- ## applied to each of the cast lines ##
- ## *the | character is now used to declare sections in the announce line ##
- ## if any variable in a section is not found on the imdb page, the ##
- ## corresponding section will not be displayed in the output ##
- ## (see the default announce line for an example) ##
- ## ##
- ## 22.02.2007: ##
- ## *incorporated some code from rosc2112's version ##
- ## *some small fixes ##
- ## ##
- ## 20.02.2007: ##
- ## *changed regexp queries to accomodate the new imdb layout ##
- ## *cleaned up the unneccesary post-regexp code ##
- ## ##
- ## 14.05.2006: ##
- ## *fixed plot outline not showing completely if it included links ##
- ## (thanks to darkwing for finding the bug) ##
- ## +added support for awards (thanks to rosc2112) ##
- ## +added support for the cast list (be careful with the limit) ##
- ## +added support for writing credits ##
- ## ##
- ## 21.01.2006: ##
- ## *fixed problem with irregular search-result pages from imdb ##
- ## ##
- ## 31.08.2005: ##
- ## *changed search result priority again: ##
- ## 1. popular match where the title=search string ##
- ## 2. exact matches ##
- ## 3. first title on page ##
- ## *fixed missig warn_msg var ##
- ## ##
- ## until 24.06.2005: ##
- ## *works with new IMDB ##
- ## *works with (hopefully) all search results (popular/exact/partial) ##
- ## +added timeouts (20secs) ##
- ## +added bottom 100 support ##
- ## +added rating bar from chilla's imdb-script ##
- ## +added flood control ##
- ## *small speedup (if your output does not include %screens or %budget ##
- ## *changed proc name to improve compatibility with other scripts ##
- ## *changed search result priority to {exact->first displayed} ##
- ## ##
- ###############################################################################
- ## ##
- ## 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
- # PLOT OUTLINE = %plot |-----------------------------
- # RATING = %rating | !! to reset color code !!
- # RATING_BAR = %rbar | !! use %color w/o args !!
- # VOTES = %votes |
- # RUNTIME = %time (incl. "min") | "|" declares a section
- # AWARDS = %awards | if any cookie in a section
- # BUDGET = %budget | is empty the whole section
- # SCREENS = %screens | is removed from the output
- # TAGLINE = %tagline | (end section with "|")
- # MPAA = %mpaa |
- # COUNTRY = %country |
- # LANGUAGE = %language |
- # SOUND MIX = %soundmix |
- # TOP 250 = %top250 |
- # CAST LINES = %castmline |
- # CAST SNGLELINE = %castline |
- # WRITING CREDITS = %wcredits |
- # PLOT KEYWORDS = %keywords |
- # COMMENT LINE = %comment |
- # RELEASE DATE = %reldate |
- # MOVIE COLOR = %mcolor |
- # ASPECT RATIO = %aspect |
- # CERTIFICATION = %cert |
- # LOCATIONS = %locations |
- # COMPANY = %company |
- #
- # + 19.10.2010
- # Also Known As = %aka
- # + 23.8.2011
- # BULLET (separator)= %bull
- #
- # RANDOMIZING OUTPUT :
- # ====================
- # Exemple:
- # 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 ---------^
- #
- # exemple 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 announce(IMDBIRC) "%bold%title%bold %color4-%color %url %color4-%color %boldDirected by:%bold %name %color4-%color %boldGenre:%bold %genre %color4-%color %boldRelease Date:%bold %reldate %color4-%color %boldBudget:%bold %budget %color4-%color %boldScreens:%bold %screens %color4-%color %boldRating:%bold%color7 %rating/10 %rbar %color14(%color3 %votes votes\%color14 )\n%boldPlot:%bold %plot%bold %color4-%color %boldRuntime:%bold %time."
- # example normal announce:
- # set announce(IMDBIRC) "%bold%title%bold - %url\n|Rating: %rating (%votes votes) %rbar| |%top250|\n|%plot|"
- # set announce(IMDBIRC) "%bold%title%bold |\[%time mins - %mcolor\]| - %url\n|Genre: %genre|\n|Tagline: %tagline|\n|Synopsis: %plot|\n|Rating: %rating (%votes votes) %rbar| |%color3%top250%color|\n|Awards: %awards|"
- #set announce(IMDBIRC) "%bold%title%bold - %url\n|%boldGenre:%bold %genre|\n|Plot Keywords: %keywords|\n|Tagline: %tagline|\n|Synopsis: %plot|\n|Rating: %rating (%votes votes) %rbar| |%color3%top250%color|\n|Comment: %comment|\n|Awards: %awards|\n|Runtime: %time mins.|"
- # set default announce format
- #set announce(IMDBIRC) "
- #%bold%title%bold (%aka)\n
- #|%boldTagline:%bold %tagline %bold\n|
- #|%boldURL:%bold %url| |%bull %boldGenre:%bold %genre\n|
- #|%boldRelease date:%bold %reldate| |%bull %boldRating:%bold %rating (%votes votes)| |%bull %boldRuntime:%bold %time|\n
- #"
- #trigger command in channel
- set trigger "!imdb"
- #rating bar color
- #bracket
- set barcol1 "14"
- #stars
- set barcol2 "7"
- #cast count to return on multiline and single line (0 means no limit)
- set cast_linelimit "5"
- #http connection timeout (milliseconds)
- set imdb_timeout "25000"
- # Delay between command for each channel.
- set delay 20
- # 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) "/usr/bin/curl"
- # note for windrop: use normal slashes, e.g. C:/path/to/curl.exe
- #################################################################
- # 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 -|- $trigger imdb_proc
- set instance 0
- set warn_msg 0
- proc htmlcodes {tempfile} {
- # set mapfile [string map {& & ' ' ' ' [ ( \ / ] ) { ( } ) " " ? ? ? ? © © « « ® ® ? ? ? ? } $tempfile]
- # set mapfile [string map {? ? · · ^(1) ^(1) » » 1/4 1/4 1/2 1/2 3/4 3/4 A` A` A' A' A^ A^ } $mapfile]
- # set mapfile [string map {A~ A~ A" A" A* A* ? ? C, C, E` E` E' E' E^ E^ E" E" I` I` I' I' I^ I^ I" I" ? ? N~ N~ O` O` O' O' O^ O^ O~ O~ O" O" } $mapfile]
- # set mapfile [string map {? ? ? ? U` U` U' U' U^ U^ U" U" Y' Y' ? ? ? ? a` a` a' a' a^ a^ a~ a~ a" a" a* a* ? ? c, c, e` e` e' e' e^ e^ } $mapfile]
- # set mapfile [string map {e" e" i` i` i' i' i^ i^ i" i" ? ? n~ n~ o` o` o' o' o^ o^ o~ o~ o" o" ? ? ? ? u` u` u' u' u^ u^ u" u" y' y' ? ? } $mapfile]
- set mapfile [string map { "" & "&" " \"} $tempfile]
- return $mapfile
- }
- 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 findnth {strin what count} {
- set ret 0
- for {set x 0} {$x < $count} {incr x} {
- set ret [string first $what $strin [expr $ret + 1]]
- }
- return $ret
- }
- proc imdb_proc { nick uhost handle chan arg } {
- global cast_linelimit instance delay imdb_timeout barcol1 barcol2 IMDB_DEBUG pub_or_not announce random warn_msg trigger binary IMDB_ALTERNATIVE
- variable imdb
- # channel_check permission
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG permission_result == $permission_result" }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG instance == $instance" }
- if {![channel get $chan imdb]} { return }
- # public or private
- if {$pub_or_not == 1 } { set toput "PRIVMSG $chan" } else { set toput "NOTICE $nick" }
- if {$IMDB_DEBUG == 1} { putlog "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} { putlog "IMDB_DEBUG no arg passed, show help" }
- puthelp "$toput :IMDb info script \002v30.09.2011\002 using \002$using\002"
- puthelp "$toput :\002Syntax: $trigger <movie title>\002 example: $trigger Beautiful Mind"
- return
- }
- #flood-control
- if {[info exists imdb(lasttime,$chan)] && [expr $imdb(lasttime,$chan) + $delay] > [clock seconds]} {
- putserv "NOTICE $nick :You can use only 1 command in $delay seconds. Wait [expr $delay - [expr [clock seconds] - $imdb(lasttime,$chan)]] seconds and try again."
- return 0
- }
- # initial search
- set imdburl "http://akas.imdb.com"
- set imdbsearchurl "http://akas.imdb.com/find?s=tt&exact=true&"
- set searchString [string map {\ %20 & %26 , %2C} $arg]
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG searchString: \"$searchString\"" }
- if { $IMDB_ALTERNATIVE == 0 } {
- set page [::http::config -useragent "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3"]
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG ${imdbsearchurl}q=$searchString" }
- if [catch {set page [::http::geturl ${imdbsearchurl}q=$searchString -timeout $imdb_timeout]} error] {
- puthelp "$toput :Error retrieving URL... try again later."
- ::http::Finish $page
- return
- }
- if { [::http::status $page] == "timeout" } {
- puthelp "$toput :\002Connection to imdb.com timed out while doing initial search.\002"
- ::http::Finish $page
- return
- }
- set html [::http::data $page]
- ::http::Finish $page
- } else {
- catch { exec $binary(CURL) "${imdbsearchurl}q=$searchString" } html
- }
- #if redirect necessary (search page), find first link and redirect
- if { ([regexp {<title>Find - IMDb} $html] == 1) } {
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG redirect 1" }
- set ttcode "0000001"
- set start "0"
- set temp $html
- #dealing with different search results
- set hit 0
- if { [regexp -indices {Popular Titles} $temp tstart] } {
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG found popular titles" }
- set temp2 [string range $temp [lindex $tstart 1] end]
- regexp {1\..*?<a.*?>(.*?)</a>} $temp2 dummy title
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG compare $title == $arg" }
- if { [string equal -nocase $title $arg] } {
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG equals - displaying first popular match" }
- set temp $temp2
- set hit 1
- } else {
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG not equal - searching for exact match" }
- }
- }
- if { $hit == 0 } {
- if { [regexp -indices {Titles \(Exact Matches\)} $temp start] } {
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG displaying exact match" }
- } elseif { [regexp -indices {Titles} $temp start] } {
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG no exact match - displaying first title on page" }
- } else {
- puthelp "$toput :No useful results."
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG no titles results found" }
- return
- }
- set temp [string range $temp [lindex $start 1] end]
- }
- #searching for first ttcode
- if [regexp {/title/tt[0-9]+} $temp 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} { putlog "IMDB_DEBUG bogus ttcode" }
- return
- }
- set newurl "$imdburl/title/$ttcode/"
- if {$IMDB_DEBUG == 1} { putlog "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 -timeout $imdb_timeout]
- if [catch {set page [::http::geturl $newurl -timeout $imdb_timeout]} error] {
- puthelp "$toput :Error retrieving URL... try again later."
- ::http::Finish $page
- return
- }
- if {[::http::status $page]=="timeout"} {
- puthelp "$toput :\002Connection to imdb.com timed out.\002"
- ::http::Finish $page
- return
- }
- set html [::http::data $page]
- ::http::Finish $page
- } else {
- catch { exec $binary(CURL) "$newurl" } html
- }
- # if no redirect necessary (only one match in meta), then go there
- } else {
- set location ""
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG redirect 0" }
- if { $IMDB_ALTERNATIVE == 0 } {
- upvar 0 $page oldpage
- regexp {title/tt[0-9]+/} $oldpage(meta) location
- } else {
- set result [catch { exec $binary(CURL) -i "${imdbsearchurl}q=$searchString" } oldpage]
- putlog $oldpage
- regexp {title/tt[0-9]+/} $oldpage location
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG redirect 0 Location == $location" }
- set newurl "$imdburl/$location"
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG redirect 0 = $newurl" }
- if { $location != "" } {
- if { $IMDB_ALTERNATIVE == 0 } {
- unset html
- set page [::http::config -useragent "MSIE 6.0"]
- if [catch {set page [::http::geturl $newurl -timeout $imdb_timeout]} error] {
- puthelp "$toput :Error retrieving URL... try again later."
- ::http::Finish $page
- return
- }
- if {[::http::status $page]=="timeout"} {
- puthelp "$toput :\002Connection to imdb.com timed out.\002"
- ::http::Finish $page
- return
- }
- set html [::http::data $page]
- ::http::Finish $page
- } else {
- unset html
- catch { exec $binary(CURL) "$newurl" } html
- }
- } else {
- puthelp "$toput :Error in search mechanics - you probably need a newer version."
- return
- }
- }
- # grab footer content / user comment
- if { $newurl != "" } {
- set part2 "_ajax/footer"
- set footerurl "$newurl$part2"
- if { $IMDB_ALTERNATIVE == 0 } {
- set page [::http::config -useragent "MSIE 6.0"]
- if [catch {set page [::http::geturl $footerurl -timeout $imdb_timeout]} error] {
- puthelp "$toput :Error retrieving URL... try again later."
- ::http::Finish $page
- return
- }
- if {[::http::status $page]=="timeout"} {
- puthelp "$toput :\002Connection to imdb.com timed out.\002"
- ::http::Finish $page
- return
- }
- set html2 [::http::data $page]
- ::http::Finish $page
- } else {
- catch { exec $binary(CURL) "$footerurl" } html2
- }
- } else {
- puthelp "$toput :Error in search mechanics - you probably need a newer version."
- return
- }
- # for bogus searches
- if {[string length $newurl] == 0} {
- puthelp "$toput :No no no! I can't find that!"
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG bogus searches" }
- return
- }
- # decide on output
- 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)
- }
- # collect output
- set title "N/A"; set aka "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 "top/bottom:N/A"; set awards "N/A"; set rating_bar ""; set cast_multiline "N/A"; set wcredits "N/A";
- set keywords "N/A"; set comment "N/A"; set reldate "N/A"; set cast_line "N/A"; set movie_color "N/A"; set aspect_ratio "N/A";
- set cert "N/A"; set film_locations "N/A"; set company "N/A"
- ## get title
- if [regexp {<title>[^<]+} $html title dummy] {
- set pos [expr [string first > $title] +1]
- set pos2 [expr [string first ) $title]]
- set title [string range $title $pos $pos2]
- set title [htmlcodes $title]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG title == $title" }
- ## get aka
- if [regexp {<h4 class="inline">Also Known As:</h4>(.*?)</div>} $html dummy aka] {
- regsub -all {<[^\>]*>} $aka {} aka
- set aka [string map {"See more" "" \n "" & " & " » ""} $aka]
- set aka [string trim $aka]
- set aka [htmlcodes $aka]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG aka == $aka" }
- ## get director
- if [regexp {<h4 class="inline">.*?Director:.*?</h4>(.*?)</div>} $html dummy name] {
- regsub -all {\n[ ]*} $name {} name
- set name [string map {"&<br/>" "& " "<br/>" ", " "See more" ""} $name]
- regsub -all {<[^>]+>} $name {} name
- set name [string trim $name]
- regsub -all {,$} $name {} name
- set name [htmlcodes $name]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG director == $name" }
- ## get writing credits
- if [regexp {<h4 class="inline">.*?Writers:.*?</h4>(.*?)</div>} $html dummy wcredits] {
- regsub -all {\n[ ]*} $wcredits {} wcredits
- set wcredits [string map {"See more" "" "<br/> " "" "&<br/>" "& " "&<br/>" "& " "<br/>" ", " "»" ""} $wcredits]
- regsub -all {<[^>]+>} $wcredits {} wcredits
- set wcredits [string trim $wcredits]
- regsub -all {,$} $wcredits {} wcredits
- set wcredits [htmlcodes $wcredits]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG writer == $wcredits" }
- # release date
- if {[regexp {<time itemprop="datePublished" .*?>(.*?)</time>} $html dummy reldate]} {
- regsub -all {[\n\s]+} $runtime {} runtime
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG release date == $reldate" }
- ## get genre
- if [regexp {<h4 class="inline">Genres:</h4>(.*?)</div>} $html dummy genre] {
- set genre [string map {"See more" "" " "} $genre]
- regsub -all {<[^\>]*>} $genre {} genre
- set genre [string map {"|" "||" } $genre]
- set genre [string trim $genre]
- regsub {\(.*\)} $genre {} genre
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG genre == $genre" }
- ## get tagline
- if [regexp {<h4 class="inline">Taglines:</h4>(.*?)<} $html dummy tagline] {
- set tagline [string map {"See more" "" } $tagline]
- regsub -all {<[^\>]*>} $tagline {} tagline
- set tagline [string trim $tagline]
- set tagline [htmlcodes $tagline]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG tagline == $tagline" }
- ## get plot outline
- if { [regexp {<h2>Storyline</h2>(.*?)<em .*?>} $html dummy plot] || [regexp {<h5>Plot Summary:</h5>(.*?)</div>} $html dummy plot] } {
- set plot [string map {"See more" "" "(view trailer)" "" "full summary" "" "add synopsis" "" "full synopsis (warning! may contain spoilers)" "" "full synopsis" "" " | " ""} $plot]
- regsub -all {<[^\>]*>} $plot {} plot
- set plot [string trim $plot]
- set plot [string range $plot 0 357]
- set plot [htmlcodes $plot]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG plot == $plot" }
- ## get plot keywords
- if [regexp {<h4 class="inline">Plot Keywords:</h4>(.*?)</div>} $html dummy keywords] {
- set keywords [string map {"See more" "" \n "" " " » ""} $keywords]
- regsub -all {<[^\>]*>} $keywords {} keywords
- set keywords [string map {"|" "||"} $keywords]
- set keywords [string trim $keywords]
- set keywords [htmlcodes $keywords]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG keywords == $keywords" }
- ## get awards
- if [regexp {<div class="article highlighted" >(.*?)<span.*?href="awards"} $html awards] {
- regsub -all {[\n]} $awards {} awards
- set pos [expr [string first "<b>" $awards] +3]
- set pos2 [expr [string first "<span" $awards] -1]
- set awards [string range $awards $pos $pos2]
- set awards [string map {"</b>" " "} $awards]
- set awards [htmlcodes $awards]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG awards == $awards" }
- ## get comment
- if [regexp {<div class="user-comments">.*?</strong>} $html2 comment] {
- regsub -all {[\n]} $comment {} comment
- set pos [expr [string first "<strong>" $comment] +8]
- set pos2 [expr [string first "</strong>" $comment] -9]
- set comment [string range $comment $pos $pos2]
- set comment [string trim $comment]
- set comment [htmlcodes $comment]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG comment == $comment" }
- ## get iMDb rating
- if [regexp {<strong><span itemprop="ratingValue">(.*?)</span></strong>} $html rating] {
- regsub -all {<[^\>]*>} $rating {} rating
- #rating bar code - attempt at recreating
- set goldstars [expr round($rating)]
- set greystars [expr 10 - $goldstars]
- # generating the rating bar
- set marker "*"
- set rating_bar "%color$barcol1\[%color$barcol2"
- for {set i2 0} {$i2 < $goldstars} {incr i2 1} {
- set rating_bar "$rating_bar$marker"
- }
- set marker "-"
- set rating_bar "$rating_bar%color$barcol2"
- for {set i3 0} {$i3 < $greystars} {incr i3 1} {
- set rating_bar "$rating_bar$marker"
- }
- set rating_bar "$rating_bar%color$barcol1\]%color"
- #end rating bar code
- }
- if [regexp {<span itemprop="ratingCount">(.*?)</span>} $html votes] {
- regsub -all {<[^\>]*>} $votes {} votes
- }
- #if [regexp {<b>((.*?)</b><span class="mellow">/10)</span>.*?<a .*? href="ratings".*?>(.*?) votes</a>} $html dummy rating goldstars votes] {
- #
- # regsub -all {<[^\>]*>} $rating {} rating
- # #rating bar code
- # set goldstars [expr round($goldstars)]
- # set greystars [expr 10 - $goldstars]
- # # generating the rating bar
- # set marker "*"
- # set rating_bar "$barcol1\[$barcol2"
- # for {set i2 0} {$i2 < $goldstars} {incr i2 1} {
- # set rating_bar "$rating_bar$marker"
- # }
- # set marker "-"
- # set rating_bar "$rating_bar14"
- # for {set i3 0} {$i3 < $greystars} {incr i3 1} {
- # set rating_bar "$rating_bar$marker"
- # }
- # set rating_bar "$rating_bar$barcol1\]"
- # #end rating bar code
- #
- #}
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG rating == $rating | votes == $votes | rating bar == $rating_bar" }
- ## get TOP 250
- if [regexp {<strong>Top 250 #([\d]+)</strong>} $html dummy top250] {
- } elseif [regexp {>(Bottom 100: #[\d]+)</a>} $html dummy top250] {
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG top250 == $top250" }
- ## get MPAA
- if [regexp {<span itemprop="contentRating">.*?</span>} $html mpaa] {
- regsub -all {<[^\>]*>} $mpaa {} mpaa
- set mpaa [string trim $mpaa]
- set mpaa [htmlcodes $mpaa]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG mpaa == $mpaa" }
- ## get runtime
- if [regexp {<h4 class="inline">Runtime:</h4>.*?<time .*?>(.*?)</time>} $html dummy runtime] {
- regsub -all {[\n\s]+} $runtime {} runtime
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG runtime == $runtime" }
- ## get country
- if [regexp {<h4 class="inline">Country:</h4>(.*?)</div>} $html dummy country] {
- set country [string map { " "} $country]
- regsub -all {<[^\>]*>} $country {} country
- set country [string map {"|" "||" } $country]
- regsub -all {[\n]+} $country {} country
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG country == $country" }
- ## get language
- if [regexp {<h4 class="inline">Language:</h4>(.*?)</div>} $html dummy language] {
- set language [string map {"See more" "" \n "" " " » ""} $language]
- regsub -all {<[^\>]*>} $language {} language
- regsub -all {[\n]+} $language {} language
- set language [string map {"|" "||"} $language]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG language == $language" }
- ## get movie color
- if [regexp {<h4 class="inline">Color:</h4>(.*?)</div>} $html dummy movie_color] {
- regsub -all {<[^\>]*>} $movie_color {} movie_color
- regsub -all {[\n\s]+} $movie_color {} movie_color
- set movie_color [string trim $movie_color]
- set movie_color [string map {"|" "||"} $movie_color]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG movie_color == $movie_color" }
- ## get aspect ratio
- if [regexp {<h4 class="inline">Aspect Ratio:</h4>(.*?)</div>} $html dummy aspect_ratio] {
- regsub -all {<[^\>]*>} $aspect_ratio {} aspect_ratio
- set aspect_ratio [string map {"more" "" } $aspect_ratio]
- set aspect_ratio [string trim $aspect_ratio]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG aspect_ratio == $aspect_ratio" }
- ## get soundmix
- if [regexp {<h4 class="inline">Sound Mix:</h4>(.*?)</div>} $html dummy soundmix] {
- set soundmix [string map {"See more" "" \n "" "" » ""} $soundmix]
- regsub -all {<[^\>]*>} $soundmix {} soundmix
- regsub -all {[\n]+} $soundmix {} soundmix
- set soundmix [string map {"|" "||"} $soundmix]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG soundmix == $soundmix" }
- ## get certification
- if [regexp {<div class="infobar">.*?alt="(.*?)"} $html dummy cert] {
- regsub -all {<[^\>]*>} $cert {} cert
- set mpaa [string trim $cert]
- set mpaa [htmlcodes $cert]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG cert == $cert" }
- ## get locations
- if { [regexp {<h4 class="inline">Filming Locations:</h4>(.*?)</div>} $html dummy film_locations] } {
- set film_locations [string map {"See more" "" » ""} $film_locations]
- regsub -all {<[^\>]*>} $film_locations {} film_locations
- regsub -all {[\n\s]+} $film_locations { } film_locations
- set film_locations [string trim $film_locations]
- set film_locations [htmlcodes $film_locations]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG film_locations == $film_locations" }
- ## get company
- if [regexp {<h3>Company Credits</h3>(.*?)</div>} $html dummy company] {
- set company [string map {"See more" "" "" » ""} $company]
- regsub -all {<[^\>]*>} $company {} company
- regsub -all {[\n\s]+} $company { } company
- set company [string trim $company]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG company == $company" }
- ## get cast
- if [regexp {<table class="cast_list">(.*?)</table>} $html dummy cast] {
- regsub -all {</tr>.*?<tr.*?>} $cast "\n" cast_multiline
- regsub -all {[\n]+} $cast_multiline {} cast_multiline
- regsub -all {<[^\>]*>} $cast_multiline {} cast_multiline
- set cast_multiline [string map {"rest of cast listed alphabetically:" \n} $cast_multiline]
- set cast_multiline [string trim [join [htmlcodes $cast_multiline]]]
- if { $cast_linelimit > 0 } {
- set nthoccur [expr [findnth $cast_multiline \n $cast_linelimit] - 1]
- if {$nthoccur > 0} {set cast_multiline [string range $cast_multiline 0 $nthoccur]}
- }
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG cast_multiline == $cast_multiline" }
- ## fill singleline
- regsub -all {\n} $cast_multiline " / " cast_line
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG cast_line == $cast_line" }
- ## get budget
- if [regexp {<h4 class="inline">Budget:</h4> (.*?)</div>} $html dummy budget] {
- regsub -all {[\n]+} $budget {} budget
- set budget [string map { ? ?} $budget]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG budget == $budget" }
- ## get screens
- if [regexp {<h4 class="inline">Opening Weekend:</h4>\n(.*?Screens\))} $html dummy screens] {
- regsub -all {[\n]+} $screens { } screens
- regsub -all {<[^\>]*>} $screens {} screens
- set screens [htmlcodes $screens]
- }
- if {$IMDB_DEBUG == 1} { putlog "IMDB_DEBUG screens == $screens" }
- ## output results
- #cleaning the end url
- set cleanurl [string map {"akas." ""} $newurl]
- set output [string map [list "%title" "$title" "%aka" "$aka" "%url" "$cleanurl" "%name" "$name" "%genre" "$genre" "%tagline" "$tagline" "%plot" "$plot" "%keywords" "$keywords" "%awards" "$awards" "%comment" "$comment" "%rating" "$rating" "%rbar" "$rating_bar" "%votes" "$votes" "%top250" "$top250" "%mpaa" "$mpaa" "%time" "$runtime" "%country" "$country" "%language" "$language" "%mcolor" "$movie_color" "%aspect" "$aspect_ratio" "%soundmix" "$soundmix" "%cert" "$cert" "%locations" "$film_locations" "%company" "$company" "%budget" "$budget" "%screens" "$screens" "%reldate" "$reldate"] $output]
- set checkvar ""
- regexp {.*?%castmline} $output checkvar
- if { [expr [regexp -all {%uline} $checkvar] % 2] == 1 } {
- set cast_multiline [string map {"\n" "\n%uline"} $cast_multiline]
- }
- if { [expr [regexp -all {%bold} $checkvar] % 2] == 1 } {
- set cast_multiline [string map {"\n" "\n%bold"} $cast_multiline]
- }
- if { [regexp {.*%color([\d]+(?:,[\d]+)?)[^\n]*?%castmline} $checkvar dummy colormline] } {
- regsub -all {\n} $cast_multiline "\n%color$colormline" cast_multiline
- }
- set output [replacevar $output "%castmline" $cast_multiline]
- set output [replacevar $output "%castline" $cast_line]
- set output [replacevar $output "%wcredits" $wcredits]
- regsub -all {\|[^\|]*?N/A[^\|]*?\|} $output "" output
- set output [string map {"||" "|" "|" ""} $output]
- regsub -all {\n[\n\s]*\n} $output "\n" output
- set output [string trim $output]
- set output [replacevar $output "%bold" "\002"]
- set output [replacevar $output "%uline" "\037"]
- set output [replacevar $output "%bull" "\u2022"]
- set output [replacevar $output "%color" "\003"]
- set output [encoding convertto utf-8 $output]
- foreach line [split [imdb_decode $output] "\n"] {
- while {$line != ""} {
- puthelp "$toput :[string range $line 0 399]"
- set line [string range $line 400 end]
- }
- }
- set imdb(lasttime,$chan) [clock seconds]
- }
- proc wmsg { } {
- global warn_msg
- set warn_msg 0
- }
- proc imdb_decode {text {char "utf-8"} } {
- # code below is neccessary to prevent numerous html markups
- # from appearing in the output (ie, ", ?, etc)
- # stolen (borrowed is a better term) from tcllib's htmlparse ;)
- # works unpatched utf-8 or not, unlike htmlparse::mapEscapes
- # which will only work properly patched....
- set escapes {
- \xa0 ¡ \xa1 ¢ \xa2 £ \xa3 ¤ \xa4
- ¥ \xa5 ¦ \xa6 § \xa7 ¨ \xa8 © \xa9
- ª \xaa « \xab ¬ \xac ­ \xad ® \xae
- ¯ \xaf ° \xb0 ± \xb1 ² \xb2 ³ \xb3
- ´ \xb4 µ \xb5 ¶ \xb6 · \xb7 ¸ \xb8
- ¹ \xb9 º \xba » \xbb ¼ \xbc ½ \xbd
- ¾ \xbe ¿ \xbf À \xc0 Á \xc1 Â \xc2
- Ã \xc3 Ä \xc4 Å \xc5 Æ \xc6 Ç \xc7
- È \xc8 É \xc9 Ê \xca Ë \xcb Ì \xcc
- Í \xcd Î \xce Ï \xcf Ð \xd0 Ñ \xd1
- Ò \xd2 Ó \xd3 Ô \xd4 Õ \xd5 Ö \xd6
- × \xd7 Ø \xd8 Ù \xd9 Ú \xda Û \xdb
- Ü \xdc Ý \xdd Þ \xde ß \xdf à \xe0
- á \xe1 â \xe2 ã \xe3 ä \xe4 å \xe5
- æ \xe6 ç \xe7 è \xe8 é \xe9 ê \xea
- ë \xeb ì \xec í \xed î \xee ï \xef
- ð \xf0 ñ \xf1 ò \xf2 ó \xf3 ô \xf4
- õ \xf5 ö \xf6 ÷ \xf7 ø \xf8 ù \xf9
- ú \xfa û \xfb ü \xfc ý \xfd þ \xfe
- ÿ \xff ƒ \u192 Α \u391 Β \u392 Γ \u393 Δ \u394
- Ε \u395 Ζ \u396 Η \u397 Θ \u398 Ι \u399
- Κ \u39A Λ \u39B Μ \u39C Ν \u39D Ξ \u39E
- Ο \u39F Π \u3A0 Ρ \u3A1 Σ \u3A3 Τ \u3A4
- Υ \u3A5 Φ \u3A6 Χ \u3A7 Ψ \u3A8 Ω \u3A9
- α \u3B1 β \u3B2 γ \u3B3 δ \u3B4 ε \u3B5
- ζ \u3B6 η \u3B7 θ \u3B8 ι \u3B9 κ \u3BA
- λ \u3BB μ \u3BC ν \u3BD ξ \u3BE ο \u3BF
- π \u3C0 ρ \u3C1 ς \u3C2 σ \u3C3 τ \u3C4
- υ \u3C5 φ \u3C6 χ \u3C7 ψ \u3C8 ω \u3C9
- ϑ \u3D1 ϒ \u3D2 ϖ \u3D6 • \u2022
- … \u2026 ′ \u2032 ″ \u2033 ‾ \u203E
- ⁄ \u2044 ℘ \u2118 ℑ \u2111 ℜ \u211C
- ™ \u2122 ℵ \u2135 ← \u2190 ↑ \u2191
- → \u2192 ↓ \u2193 ↔ \u2194 ↵ \u21B5
- ⇐ \u21D0 ⇑ \u21D1 ⇒ \u21D2 ⇓ \u21D3 ⇔ \u21D4
- ∀ \u2200 ∂ \u2202 ∃ \u2203 ∅ \u2205
- ∇ \u2207 ∈ \u2208 ∉ \u2209 ∋ \u220B ∏ \u220F
- ∑ \u2211 − \u2212 ∗ \u2217 √ \u221A
- ∝ \u221D ∞ \u221E ∠ \u2220 ∧ \u2227 ∨ \u2228
- ∩ \u2229 ∪ \u222A ∫ \u222B ∴ \u2234 ∼ \u223C
- ≅ \u2245 ≈ \u2248 ≠ \u2260 ≡ \u2261 ≤ \u2264
- ≥ \u2265 ⊂ \u2282 ⊃ \u2283 ⊄ \u2284 ⊆ \u2286
- ⊇ \u2287 ⊕ \u2295 ⊗ \u2297 ⊥ \u22A5
- ⋅ \u22C5 ⌈ \u2308 ⌉ \u2309 ⌊ \u230A
- ⌋ \u230B ⟨ \u2329 ⟩ \u232A ◊ \u25CA
- ♠ \u2660 ♣ \u2663 ♥ \u2665 ♦ \u2666
- " \x22 & \x26 < \x3C > \x3E O&Elig; \u152 œ \u153
- Š \u160 š \u161 Ÿ \u178 ˆ \u2C6
- ˜ \u2DC   \u2002   \u2003   \u2009
- ‌ \u200C ‍ \u200D ‎ \u200E ‏ \u200F – \u2013
- — \u2014 ‘ \u2018 ’ \u2019 ‚ \u201A
- “ \u201C ” \u201D „ \u201E † \u2020
- ‡ \u2021 ‰ \u2030 ‹ \u2039 › \u203A
- € \u20AC ' \u0027 ‎ "" ‏ ""
- };
- if {![string equal $char [encoding system]]} { set text [encoding convertfrom $char $text] }
- set text [string map [list "\]" "\\\]" "\[" "\\\[" "\$" "\\\$" "\"" "\\\"" "\\" "\\\\"] [string map -nocase $escapes $text]]
- regsub -all -- {&#([[:digit:]]{1,5});} $text {[format %c [string trimleft "\1" "0"]]} text
- regsub -all -- {&#x([[:xdigit:]]{1,4});} $text {[format %c [scan "\1" %x]]} text
- catch { set text "[subst "$text"]" }
- if {![string equal $char [encoding system]]} { set text [encoding convertto $char $text] }
- return "$text"
- }
- putlog "IMDB Info Version 17.01.2013: LOADED"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement