]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - data/rbot/plugins/imdb.rb
plugin(imdb): changed base url
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / imdb.rb
index 0f4b8c809e9124ac0fa1557ae0e5590d5bbe6d53..0f5c6024b6306ddcd73079500208dde7a02dbf55 100644 (file)
 # License:: MIT license
 
 class Imdb
-  IMDB = "http://www.imdb.com"
+  IMDB = "https://www.imdb.com"
   TITLE_OR_NAME_MATCH = /<a\s+href="(\/(?:title|name)\/(?:tt|nm)[0-9]+\/?)[^"]*"(?:[^>]*)>([^<]*)<\/a>/
   TITLE_MATCH = /<a\s+href="(\/title\/tt[0-9]+\/?)[^"]*"(?:[^>]*)>([^<]*)<\/a>/
-  NAME_MATCH = /<a\s+href="(\/name\/nm[0-9]+\/?)[^"]*"(?:[^>]*)>([^<]*)<\/a>/
+  NAME_MATCH = /<a\s+onclick="[^"]+"\s+href="(\/name\/nm[0-9]+\/?)[^"]*"(?:[^>]*)>([^<]*)<\/a>/
   CHAR_MATCH = /<a\s+href="(\/character\/ch[0-9]+\/?)[^"]*"(?:[^>]*)>([^<]*)<\/a>/
   CREDIT_NAME_MATCH = /#{NAME_MATCH}\s*<\/td>\s*<td[^>]+>\s*\.\.\.\s*<\/td>\s*<td[^>]+>\s*(.+?)\s*<\/td>/m
   FINAL_ARTICLE_MATCH = /, ([A-Z]\S{0,2})$/
@@ -33,8 +33,12 @@ class Imdb
   end
 
   def search(rawstr, rawopts={})
+    # allow the user to search directly for (movie) IDs
+    if rawstr.match /$tt\d+^/ then
+      return ["/movie/#{rawstr}/"]
+    end
     str = CGI.escape(rawstr)
-    str << ";site=aka" if @bot.config['imdb.aka']
+    str << "&site=aka" if @bot.config['imdb.aka']
     opts = rawopts.dup
     opts[:type] = :both unless opts[:type]
     return do_search(str, opts)
@@ -128,6 +132,8 @@ class Imdb
   def info_title(sr, opts={})
     resp = nil
     begin
+      # movie urls without tailing / trigger a redirect
+      sr += '/' if sr[-1,1] != '/'
       resp = @bot.httputil.get_response(IMDB + sr, :max_redir => -1)
     rescue Exception => e
       error e.message
@@ -185,8 +191,8 @@ class Imdb
       end
 
       genre = Array.new
-      resp.body.scan(/<a href="\/genre\/[^"]+"[^>]+>([^<]+)<\/a>/) do |gnr|
-        genre << gnr
+      resp.body.scan(/<a\s+href="\/genre\/[^\?]+\?[^"]+"\s+>([^<]+)<\/a>/) do |gnr|
+        genre << gnr.first.strip
       end
 
       plot = resp.body.match(DESC_MATCH)[3] rescue nil