]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blob - data/rbot/plugins/fish.rb
68e6d29cf872f0a6e3091fd3a8def5f92de3b7d5
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / fish.rb
1 require 'net/http'
2 require 'uri/common'
3 Net::HTTP.version_1_2
4
5 class BabelPlugin < Plugin
6   LANGS = %w{en fr de it pt es nl ru zh zt el ja ko}
7   def help(plugin, topic="")
8     "translate to <lang> <string> => translate from english to <lang>, translate from <lang> <string> => translate to english from <lang>, translate <fromlang> <tolang> <string> => translate from <fromlang> to <tolang>. If <string> is an http url, translates the referenced webpage and returns the 1st content paragraph. Languages: #{LANGS.join(', ')}"
9   end
10   def translate(m, params)
11     langs = LANGS
12     trans_from = params[:fromlang] ? params[:fromlang] : 'en'
13     trans_to = params[:tolang] ? params[:tolang] : 'en'
14     trans_text = params[:phrase].to_s
15     
16     lang_match = langs.join("|")
17     unless(trans_from =~ /^(#{lang_match})$/ && trans_to =~ /^(#{lang_match})$/)
18       m.reply "invalid language: valid languagess are: #{langs.join(' ')}"
19       return
20     end
21
22     data_text = URI.escape trans_text
23     trans_pair = "#{trans_from}_#{trans_to}"
24
25     if (trans_text =~ /^http:\/\//) && (URI.parse(trans_text) rescue nil)
26       url = 'http://babelfish.altavista.com/babelfish/trurl_pagecontent' +
27         "?lp=#{trans_pair}&url=#{data_text}"
28
29       return Utils.get_first_pars([url], 1, :message => m)
30     end
31
32     data = "lp=#{trans_pair}&doit=done&intl=1&tt=urltext&urltext=#{data_text}"
33
34     # check cache for previous lookups
35     if @registry.has_key?("#{trans_pair}/#{data_text}")
36       m.reply @registry["#{trans_pair}/#{data_text}"]
37       return
38     end
39
40     headers = {
41       "content-type" => "application/x-www-form-urlencoded; charset=utf-8"
42     }
43
44     query = "/babelfish/tr"
45
46     begin
47       resp = @bot.httputil.get_response('http://babelfish.altavista.com'+query,
48                                         :method => :post,
49                                         :body => data,
50                                         :headers => headers)
51     rescue Exception => e
52       m.reply "http error: #{e.message}"
53       return
54     end
55
56     if (resp.code == "200")
57       lines = Array.new
58       resp.body.each_line { |l| lines.push l }
59
60       l = lines.join(" ")
61       debug "babelfish response: #{l}"
62
63       if(l =~ /^\s+<td bgcolor=white class=s><div style=padding:10px;>(.*)<\/div>/)
64         answer = $1
65         # cache the answer
66         if(answer.length > 0)
67           @registry["#{trans_pair}/#{data_text}"] = answer
68         end
69         m.reply answer
70         return
71       end
72       m.reply "couldn't parse babelfish response html :("
73     else
74       m.reply "couldn't talk to babelfish :("
75     end
76   end
77 end
78 plugin = BabelPlugin.new
79 plugin.map 'translate to :tolang *phrase'
80 plugin.map 'translate from :fromlang *phrase'
81 plugin.map 'translate :fromlang :tolang *phrase'
82