-
Notifications
You must be signed in to change notification settings - Fork 0
/
translator.py
112 lines (88 loc) · 2.78 KB
/
translator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
'''
translator.Translator
---------------------
Módulo básico utilizado na tradução
'''
import requests
from clint.textui import colored
__version__ = '0.2.0'
class Translator:
def __init__(self, word, source_word='en', targe_language='pt'):
self.URL = 'http://translate.google.com/translate_a/t'
self.PARAMS = {
'client': 'j',
'text': word,
'sl': source_word,
'tl': targe_language
}
self.HEADERS = {
'Accept-language': 'pt',
'Content-Type': 'text/javascript; charset=UTF-8'
}
def request(self):
'''
'''
# Realiza uma requisição GET na url informada, passando os parâmetros e
# cabeçalhos
req = requests.get(
url=self.URL,
params=self.PARAMS,
headers=self.HEADERS
)
# Transforma a string de retorn em formato json
req_json = req.json()
return self.organize_dict(req_json)
def organize_dict(self, r):
'''
Função retorna um novo dicionário contendo apenas informações
necessárias, como por exemplo:
{
orig: original word
trans: translated word
classes: [
{
class: name of the class
terms: all terms
}
{
class: name of the class
terms: all terms
}
...
]
}
'''
# Cria o dicionário que irá conter as informações filtradas da
# requisição
dictionary = {}
dictionary['orig'] = r['sentences'][0]['orig']
dictionary['trans'] = r['sentences'][0]['trans']
# Para cada classe (artigo, substantivo, etc) adiciona o nome da classe
# e seus termos em uma lista
dictionary['classes'] = []
for _class in r['dict']:
dictionary['classes'].append({
'name': _class['pos'],
'terms': _class['terms'][:5]
})
return dictionary
def show(self, detailed=False):
d = self.request()
# Imprime a tradução
print('{0}: {1}'.format(
colored.white(self.PARAMS['tl']),
colored.red(d['trans'])
))
# Caso solicitado, imprime mais informações
if detailed:
print('{0}: {1}'.format(
colored.white(self.PARAMS['sl']),
d['orig']
))
print()
for _class in d['classes']:
print('{0}: {1}'.format(
colored.white(_class['name']),
', '.join([word for word in _class['terms']])
))
print()