From d37aeeda4c2b2f1f8c23d49747feff99ecf95da2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?N=C3=A9munaire?= Date: Sat, 30 Jun 2012 20:24:04 +0200 Subject: [PATCH] New module translate uses wordreference --- modules/syno.py | 2 +- modules/translate.py | 72 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 modules/translate.py diff --git a/modules/syno.py b/modules/syno.py index 9596e01..d6fba0c 100644 --- a/modules/syno.py +++ b/modules/syno.py @@ -30,7 +30,7 @@ def parseanswer(msg): if len(synos) > 0: msg.send_chn("Synonymes de %s : %s" % (syno, ', '.join(synos))) else: - msg.send_chn("Aucun synonymes de %s n'a ete trouve") + msg.send_chn("Aucun synonymes de %s n'a été trouvé"%syno) else: msg.send_chn("Une erreur s'est produite durant la recherche d'un synonyme de %s" % syno) return True diff --git a/modules/translate.py b/modules/translate.py new file mode 100644 index 0000000..724abaa --- /dev/null +++ b/modules/translate.py @@ -0,0 +1,72 @@ +# coding=utf-8 + +import http.client +import re +import socket +import json +from urllib.parse import quote + +nemubotversion = 3.0 + +import module_states_file as xmlparser + +LANG = ["ar", "zh", "cz", "en", "fr", "gr", "it", "ja", "ko", "pl", "pt", "ro", "es", "tr"] + +def parseanswer(msg): + global LANG + if msg.cmd[0] == "translate": + startWord = 1 + if msg.cmd[startWord] in LANG: + langTo = msg.cmd[startWord] + startWord += 1 + else: + langTo = "fr" + if msg.cmd[startWord] in LANG: + langFrom = langTo + langTo = msg.cmd[startWord] + startWord += 1 + else: + if langTo == "en": + langFrom = "fr" + else: + langFrom = "en" + + (res, page) = getPage(' '.join(msg.cmd[startWord:]), langFrom, langTo) + if res == http.client.OK: + wres = json.loads(page.decode()) + if "Error" in wres: + msg.send_chn(wres["Note"]) + else: + start = "Traduction de %s : "%' '.join(msg.cmd[startWord:]) + if "Entries" in wres["term0"]: + if "SecondTranslation" in wres["term0"]["Entries"]["0"]: + msg.send_chn(start + wres["term0"]["Entries"]["0"]["FirstTranslation"]["term"] + " ; " + wres["term0"]["Entries"]["0"]["SecondTranslation"]["term"]) + else: + msg.send_chn(start + wres["term0"]["Entries"]["0"]["FirstTranslation"]["term"]) + elif "PrincipalTranslations" in wres["term0"]: + if "1" in wres["term0"]["PrincipalTranslations"]: + msg.send_chn(start + wres["term0"]["PrincipalTranslations"]["0"]["FirstTranslation"]["term"] + " ; " + wres["term0"]["PrincipalTranslations"]["1"]["FirstTranslation"]["term"]) + else: + msg.send_chn(start + wres["term0"]["PrincipalTranslations"]["0"]["FirstTranslation"]["term"]) + else: + msg.send_chn("Une erreur s'est produite durant la recherche d'une traduction de %s" % ' '.join(msg.cmd[startWord:])) + return True + return False + + +def getPage(terms, langfrom="fr", langto="en"): + conn = http.client.HTTPConnection("api.wordreference.com") + try: + conn.request("GET", "/0.8/%s/json/%s%s/%s" % (CONF.getNode("wrapi")["key"], langfrom, langto, quote(terms))) + except socket.gaierror: + print ("impossible de récupérer la page WordReference.") + return (http.client.INTERNAL_SERVER_ERROR, None) + except (TypeError, KeyError): + print ("You need a WordReference API key in order to use this module. Add it to the module configuration file:\n\nRegister at http://www.wordreference.com/docs/APIregistration.aspx") + return (http.client.INTERNAL_SERVER_ERROR, None) + + res = conn.getresponse() + data = res.read() + + conn.close() + return (res.status, data)