diff options
author | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2007-04-04 21:37:21 +0000 |
---|---|---|
committer | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2007-04-04 21:37:21 +0000 |
commit | cec3f257a65f86a45d27e9ba8fcad347d0bd4e31 (patch) | |
tree | 93e07b2761c80543d47d076e477dde4d550d2a8d /data/rbot/plugins/imdb.rb | |
parent | 2f233da3eaefcf196c3f749fcb3ac2e07287bb31 (diff) |
imdb plugin: add country and director to movie info
Diffstat (limited to 'data/rbot/plugins/imdb.rb')
-rw-r--r-- | data/rbot/plugins/imdb.rb | 59 |
1 files changed, 40 insertions, 19 deletions
diff --git a/data/rbot/plugins/imdb.rb b/data/rbot/plugins/imdb.rb index f00b4e53..9702c79a 100644 --- a/data/rbot/plugins/imdb.rb +++ b/data/rbot/plugins/imdb.rb @@ -45,9 +45,7 @@ class Imdb if resp.body.match(/\(Exact Matches\)<\/b>/) m << TITLE_OR_NAME_MATCH.match($') end - debug m.inspect m.compact! - debug m.inspect unless m.empty? return m.map { |mm| mm[1] @@ -101,29 +99,50 @@ class Imdb return nil end + info = [] + if resp.code == "200" m = /<title>([^<]*)<\/title>/.match(resp.body) return nil if !m - title = Utils.decode_html_entities(m[1]) + title_date = m[1] + title, date = title_date.scan(/^(.*)\((\d\d\d\d(?:[IV]+)?)\)$/).first + title.strip! + + dir = nil + data = grab_info(/Directors?/, resp.body) + if data + dir = data.scan(NAME_MATCH).map { |url, name| + name + }.join(', ') + end + + country = nil + data = grab_info(/Country/, resp.body) + if data + country = data.ircify_html + end + + info << [title, "(#{country}, #{date})", dir ? "[#{dir}]" : nil, ": http://us.imdb.com#{sr}"].compact.join(" ") m = /<b>([0-9.]+)\/10<\/b>\n?\r?\s+<small>\(<a href="ratings">([0-9,]+) votes?<\/a>\)<\/small>/.match(resp.body) return nil if !m score = m[1] votes = m[2] + genre = Array.new + resp.body.scan(/<a href="\/Sections\/Genres\/[^\/]+\/">([^<]+)<\/a>/) do |gnr| + genre << gnr + end + + info << "Ratings: #{score}/10 (#{votes} voters). Genre: #{genre.join('/')}" + plot = nil data = grab_info(/Plot (?:Outline|Summary)/, resp.body) if data plot = "Plot: #{data.ircify_html.gsub(/\s+more$/,'')}" + info << plot end - genre = Array.new - resp.body.scan(/<a href="\/Sections\/Genres\/[^\/]+\/">([^<]+)<\/a>/) do |gnr| - genre << gnr - end - info = "#{title} : http://us.imdb.com#{sr}\n" - info << "Ratings: #{score}/10 (#{votes} voters). Genre: #{genre.join('/')}\n" - info << plot if plot return info end return nil @@ -139,10 +158,14 @@ class Imdb return nil end + info = [] + if resp.code == "200" m = /<title>([^<]*)<\/title>/.match(resp.body) return nil if !m - name = Utils.decode_html_entities(m[1]) + name = m[1] + + info << "#{name} : http://us.imdb.com#{sr}" birth = nil data = grab_info("Date of Birth", resp.body) @@ -156,6 +179,8 @@ class Imdb death = "Death: #{data.ircify_html.gsub(/\s+more$/,'')}" end + info << [birth, death].compact.join('. ') + movies = {} filmorate = nil @@ -170,22 +195,18 @@ class Imdb # next unless what next unless ['Actor', 'Director'].include?(what) movies[what] = str.scan(TITLE_MATCH)[0..2].map { |url, tit| - Utils.decode_html_entities(tit) + tit } } end - debug movies.inspect - info = "#{name} : http://us.imdb.com#{sr}\n" - info << [birth, death].compact.join('. ') << "\n" unless movies.empty? - info << "Top Movies:: " ar = [] movies.keys.sort.each { |key| ar << key.dup ar.last << ": " + movies[key].join(', ') } - info << ar.join('. ') + info << "Top Movies:: " + ar.join('. ') end return info @@ -208,10 +229,10 @@ class ImdbPlugin < Plugin return nil end if info.length == 1 - m.reply info + m.reply Utils.decode_html_entities info.first.join("\n") else m.reply info.map { |i| - i.gsub(/\n+/, " | ") + Utils.decode_html_entities i.join(" | ") }.join("\n") end end |