= commited on
Commit
77f147b
·
1 Parent(s): 05a3c2c

started working on qcri

Browse files
deep_translator/constants.py CHANGED
@@ -5,7 +5,8 @@ BASE_URLS = {
5
  "PONS": "https://en.pons.com/translate/",
6
  "YANDEX": "https://translate.yandex.net/api/{version}/tr.json/{endpoint}",
7
  "LINGUEE": "https://www.linguee.com/",
8
- "MYMEMORY": "http://api.mymemory.translated.net/get"
 
9
  }
10
 
11
  GOOGLE_CODES_TO_LANGUAGES = {
 
5
  "PONS": "https://en.pons.com/translate/",
6
  "YANDEX": "https://translate.yandex.net/api/{version}/tr.json/{endpoint}",
7
  "LINGUEE": "https://www.linguee.com/",
8
+ "MYMEMORY": "http://api.mymemory.translated.net/get",
9
+ "QCRI": "https://mt.qcri.org/api/v1/{endpoint}?"
10
  }
11
 
12
  GOOGLE_CODES_TO_LANGUAGES = {
deep_translator/qcri.py ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import requests
3
+ from deep_translator.constants import BASE_URLS
4
+ from deep_translator.exceptions import (RequestError,
5
+ YandexDefaultException, TranslationNotFound, TooManyRequests)
6
+
7
+
8
+ class YandexTranslator(object):
9
+ """
10
+ class that wraps functions, which use the yandex translator under the hood to translate word(s)
11
+ """
12
+
13
+ def __init__(self, api_key=None):
14
+ """
15
+ @param api_key: your qrci api key. Get one for free here https://mt.qcri.org/api/v1/ref
16
+ """
17
+
18
+ # key: "72e9e2cc7c992db4dcbdd6fb9f91a0d1"
19
+ if not api_key:
20
+ raise YandexDefaultException(401)
21
+ self.__base_url = BASE_URLS.get("QRCI")
22
+
23
+ self.api_key = api_key
24
+ self.api_version = "v1.5"
25
+ self.api_endpoints = {
26
+ "langs": "getLangs",
27
+ "detect": "detect",
28
+ "translate": "translate",
29
+ }
30
+ endpoints = {
31
+ "get_languages": "getLanguagePairs",
32
+ "get_domains": "getDomains",
33
+ "translate": "translate",
34
+
35
+ }
36
+
37
+ params = {
38
+ "key": api_key
39
+ }
40
+ pairs = requests.get(self.__base_url.format(endpoint=endpoints["get_languages"]), params=params)
41
+
42
+ print(pairs.url, pairs.text)
43
+
44
+ def get_supported_languages(self):
45
+ return set(x.split("-")[0] for x in self.dirs)
46
+
47
+ @property
48
+ def languages(self):
49
+ return self.get_supported_languages()
50
+
51
+ @property
52
+ def dirs(self, proxies=None):
53
+
54
+ try:
55
+ url = self.__base_url.format(version=self.api_version, endpoint="getLangs")
56
+ print("url: ", url)
57
+ response = requests.get(url, params={"key": self.api_key}, proxies=proxies)
58
+ except requests.exceptions.ConnectionError:
59
+ raise YandexDefaultException(503)
60
+ else:
61
+ data = response.json()
62
+
63
+ if response.status_code != 200:
64
+ raise YandexDefaultException(response.status_code)
65
+ return data.get("dirs")
66
+
67
+ def detect(self, text, proxies=None):
68
+ response = None
69
+ params = {
70
+ "text": text,
71
+ "format": "plain",
72
+ "key": self.api_key,
73
+ }
74
+ try:
75
+ url = self.__base_url.format(version=self.api_version, endpoint="detect")
76
+ response = requests.post(url, data=params, proxies=proxies)
77
+
78
+ except RequestError:
79
+ raise
80
+ except ConnectionError:
81
+ raise YandexDefaultException(503)
82
+ except ValueError:
83
+ raise YandexDefaultException(response.status_code)
84
+ else:
85
+ response = response.json()
86
+ language = response['lang']
87
+ status_code = response['code']
88
+ if status_code != 200:
89
+ raise RequestError()
90
+ elif not language:
91
+ raise YandexDefaultException(501)
92
+ return language
93
+
94
+ def translate(self, source, target, text, proxies=None):
95
+ params = {
96
+ "text": text,
97
+ "format": "plain",
98
+ "lang": target if source == "auto" else "{}-{}".format(source, target),
99
+ "key": self.api_key
100
+ }
101
+ try:
102
+ url = self.__base_url.format(version=self.api_version, endpoint="translate")
103
+ response = requests.post(url, data=params, proxies=proxies)
104
+ except ConnectionError:
105
+ raise YandexDefaultException(503)
106
+ else:
107
+ response = response.json()
108
+
109
+ if response['code'] == 429:
110
+ raise TooManyRequests()
111
+
112
+ if response['code'] != 200:
113
+ raise YandexDefaultException(response['code'])
114
+
115
+ if not response['text']:
116
+ raise TranslationNotFound()
117
+
118
+ return response['text']
119
+
120
+ def translate_file(self, source, target, path):
121
+ """
122
+ translate from a file
123
+ @param source: source language
124
+ @param target: target language
125
+ @param path: path to file
126
+ @return: translated text
127
+ """
128
+ try:
129
+ with open(path) as f:
130
+ text = f.read()
131
+
132
+ return self.translate(source, target, text)
133
+ except Exception as e:
134
+ raise e
135
+
136
+ def translate_batch(self, source, target, batch):
137
+ """
138
+ translate a batch of texts
139
+ @param source: source language
140
+ @param target: target language
141
+ @param batch: list of texts to translate
142
+ @return: list of translations
143
+ """
144
+ return [self.translate(source, target, text) for text in batch]
145
+