diff --git a/modules/Babelfish.py b/modules/Babelfish.py new file mode 100644 index 0000000..d75273c --- /dev/null +++ b/modules/Babelfish.py @@ -0,0 +1,83 @@ +""" +Babelfish - go out to babelfish and translate sentences +Copyright (C) 2012 Brian S. Stephan + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import re +import urllib2 +from urllib import urlencode + +from extlib import irclib + +from Module import Module + +class Babelfish(Module): + + """Class that translates text via Babelfish. + + http://babelfish.yahoo.com/ + """ + + def do(self, connection, event, nick, userhost, what, admin_unlocked): + """Handle IRC input.""" + + match = re.search('^!translate\s+(\S+)\s+(\S+)\s+(.*)$', what) + print(what) + if match: + print('match') + fromlang = match.group(1) + tolang = match.group(2) + text = match.group(3) + + return self.reply(connection, event, self.translate(fromlang, tolang, text)) + + def translate(self, fromlang, tolang, text): + + """Translate text from fromlang to tolang, assuming it's a valid pair.""" + + langpair = '%s_%s' % (fromlang, tolang) + + # do some text conversion + text = text.replace('<', '< ') # babelfish blows up on e.g. but < text> is fine + + url = 'http://babelfish.yahoo.com/translate_txt' + params = urlencode({'ei':'UTF-8', 'doit':'done', 'fr':'bf-home', 'intl':'1', 'tt':'urltext', + 'trtext':text, 'lp':langpair}) + req = urllib2.Request(url, params) + req.add_header('Accept-Charset', 'UTF-8,*;q=0.5') + res = urllib2.urlopen(req) + content = res.read() + start_idx = content.find('') + translation = translation.replace(''', '\'') + translation = text.replace('< ', '<') # crappy attempt at undoing the safety above + + return translation + +if __name__ == '__main__': + babelfish = Babelfish(None, None, None) + print('\'' + babelfish.translate('en', 'ja', '') + '\'') + +# vi:tabstop=4:expandtab:autoindent +# kate: indent-mode python;indent-width 4;replace-tabs on;