Skip to content

Instantly share code, notes, and snippets.

@hugsy
Created March 1, 2015 03:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hugsy/293222d9aade53dbe1db to your computer and use it in GitHub Desktop.
Save hugsy/293222d9aade53dbe1db to your computer and use it in GitHub Desktop.
Use Google REST Translate service
#!/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