Created
March 1, 2015 03:54
-
-
Save hugsy/293222d9aade53dbe1db to your computer and use it in GitHub Desktop.
Use Google REST Translate service
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python2 | |
# -*- coding : utf-8 -*- | |
# | |
from os import getenv | |
from sys import path, argv | |
from httplib import HTTPConnection | |
from json import loads | |
from pprint import pprint | |
from array import array | |
from optparse import OptionParser | |
import ast | |
__author__ = "hugsy" | |
__version__ = 0.2 | |
__licence__ = "WTFPL v.2" | |
__file__ = "translate.py" | |
__desc__ = """Pompe honteusement Google Translate pour traduire du texte""" | |
__usage__ = """ | |
%prog version {0}, {1} | |
by {2} | |
syntax: {3} [options] args | |
""".format(__version__, __licence__, __author__, argv[0]) | |
parser = OptionParser(usage = __usage__, | |
version = "%prog version "+str(__version__), | |
description = __desc__) | |
parser.add_option("-v", "--verbose", default=False, | |
action="store_true", dest="verbose", | |
help="increments verbosity") | |
parser.add_option("-f", "--from", default="auto", | |
type="string", dest="de", metavar="LANG", | |
help="choose source language [default '%default']") | |
parser.add_option("-t", "--to", default="fr", | |
type="string", dest="vers", metavar="LANG", | |
help="choose dest language [default '%default']") | |
parser.add_option("-l", "--list", default=False, | |
action="store_true", dest="liste", | |
help="list supported language") | |
(options, args) = parser.parse_args() | |
langs = [] | |
langs.append("af") | |
langs.append("sq") | |
langs.append("de") | |
langs.append("en") | |
langs.append("ar") | |
langs.append("hy") | |
langs.append("az") | |
langs.append("eu") | |
langs.append("be") | |
langs.append("bg") | |
langs.append("ca") | |
langs.append("zh-CN") | |
langs.append("ko") | |
langs.append("ht") | |
langs.append("hr") | |
langs.append("da") | |
langs.append("es") | |
langs.append("et") | |
langs.append("fi") | |
langs.append("fr") | |
langs.append("gl") | |
langs.append("cy") | |
langs.append("ka") | |
langs.append("el") | |
langs.append("iw") | |
langs.append("hi") | |
langs.append("hu") | |
langs.append("id") | |
langs.append("ga") | |
langs.append("is") | |
langs.append("it") | |
langs.append("ja") | |
langs.append("la") | |
langs.append("lv") | |
langs.append("lt") | |
langs.append("mk") | |
langs.append("ms") | |
langs.append("mt") | |
langs.append("nl") | |
langs.append("no") | |
langs.append("fa") | |
langs.append("pl") | |
langs.append("pt") | |
langs.append("ro") | |
langs.append("ru") | |
langs.append("sr") | |
langs.append("sk") | |
langs.append("sl") | |
langs.append("sv") | |
langs.append("sw") | |
langs.append("tl") | |
langs.append("cs") | |
langs.append("th") | |
langs.append("tr") | |
langs.append("uk") | |
langs.append("ur") | |
langs.append("vi") | |
langs.append("yi") | |
if options.liste : | |
print ("Available language:") | |
print ("* %s" % ', '.join(langs)) | |
exit (0) | |
texte = " ".join(args).replace (" ", "%20") | |
host = "translate.google.fr" | |
path = "/translate_a/t" | |
def clear_str(s): | |
# Google Translate ne respecte pas ECMA-262, cette fonction nettoie | |
# "a la sauvage" la chaine avant de la filer au parser JSON | |
b = "" | |
while b != s: | |
b = s | |
s = s.replace(",,", ",") | |
return b.replace(",]", "]") | |
def json2string(s): | |
ret = "" | |
try: | |
data = loads(s) | |
for elt in data: | |
if (type(elt[0][1]).__name__ == 'list') : | |
# ret+= ("[%s]\n" % elt[0][0]) | |
for l in elt[0][1]: | |
ret += ("\t* %s\n" % l) | |
else : | |
ret += "* %s\n" % elt[0][0] | |
return ret | |
except IndexError: | |
return ret | |
except Exception as e : | |
print ("[!] Exception '%s'" % e) | |
print ("%s" % s) | |
return False | |
def list2string(s): | |
ret = "" | |
e = ast.literal_eval(s) | |
if e is not None: | |
pp = pprint.PrettyPrinter() | |
return "%s" % pp.pprint(e) | |
return False | |
http = HTTPConnection(host) | |
headers = {"Accept-Charset": "utf-8;q=0.7,*;q=0.7", | |
"Accept": "text/plain", | |
"User-Agent": "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; fr-FR)"} | |
http.request("GET", | |
"%s?client=t&sl=%s&tl=%s&text=%s"%(path, options.de, options.vers, texte), | |
None, | |
headers) | |
res = http.getresponse() | |
if res.status != 200 : | |
print ("[-] HTTP %d : %s" % (res.status, res.reason)) | |
exit(1) | |
b = res.read().decode("utf-8") | |
chaine = clear_str(b) | |
ret = json2string(chaine) | |
if ret != False: | |
print ("%s " % ret) | |
else: | |
print ("Failed to parse string") | |
http.close() | |
exit(0) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment