Nidhal Baccouri commited on
Commit
b566374
·
unverified ·
2 Parent(s): fcb8bdf bf1ba51

Merge pull request #50 from nidhaloff/feature/proxy

Browse files
README.rst CHANGED
@@ -81,6 +81,8 @@ Why you should use it
81
  - Easy to use and extend
82
  - Support for most famous universal translators
83
  - Stable and maintained regularly
 
 
84
 
85
  ========
86
  Features
@@ -94,6 +96,7 @@ Features
94
  * Support for the `Yandex translator <https://yandex.com/>`_ (version >= 1.2.1)
95
  * Support for the `QCRI translator <https://mt.qcri.org/api/>`_ (version >= 1.2.4)
96
  * Support for the `DeepL translator <https://www.deepl.com/en/translator/>`_ (version >= 1.2.5)
 
97
  * Automatic single language detection
98
  * Batch language detection
99
  * Translate directly from a text file
@@ -122,7 +125,20 @@ Quick Start
122
  from deep_translator import GoogleTranslator
123
  translated = GoogleTranslator(source='auto', target='de').translate("keep it up, you are awesome") # output -> Weiter so, du bist großartig
124
 
125
- or from terminal
 
 
 
 
 
 
 
 
 
 
 
 
 
126
 
127
  .. code-block:: console
128
 
@@ -477,6 +493,26 @@ Microsoft Translator
477
 
478
  translated = MicrosoftTranslator(api_key='some-key', target='german').translate_file('path/to/file')
479
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
480
 
481
  Usage from Terminal
482
  --------------------
 
81
  - Easy to use and extend
82
  - Support for most famous universal translators
83
  - Stable and maintained regularly
84
+ - The API is very easy to use
85
+ - Proxy integration is supported
86
 
87
  ========
88
  Features
 
96
  * Support for the `Yandex translator <https://yandex.com/>`_ (version >= 1.2.1)
97
  * Support for the `QCRI translator <https://mt.qcri.org/api/>`_ (version >= 1.2.4)
98
  * Support for the `DeepL translator <https://www.deepl.com/en/translator/>`_ (version >= 1.2.5)
99
+ * Support for proxy usage
100
  * Automatic single language detection
101
  * Batch language detection
102
  * Translate directly from a text file
 
125
  from deep_translator import GoogleTranslator
126
  translated = GoogleTranslator(source='auto', target='de').translate("keep it up, you are awesome") # output -> Weiter so, du bist großartig
127
 
128
+ or using proxies:
129
+
130
+ .. code-block:: python
131
+
132
+ from deep_translator import GoogleTranslator
133
+
134
+ proxies_example = {
135
+ "https": "34.195.196.27:8080",
136
+ "http": "34.195.196.27:8080"
137
+ }
138
+ translated = GoogleTranslator(source='auto', target='de', proxies=proxies_example).translate("keep it up, you are awesome") # output -> Weiter so, du bist großartig
139
+
140
+
141
+ or even directly from terminal:
142
 
143
  .. code-block:: console
144
 
 
493
 
494
  translated = MicrosoftTranslator(api_key='some-key', target='german').translate_file('path/to/file')
495
 
496
+ Proxy usage
497
+ -------------
498
+
499
+ deep-translator provide out of the box usage of proxies. Just define your proxies config as a dictionary
500
+ and pass it to the corresponding translator. Below is an example using the GoogleTranslator but this feature
501
+ can be used with all supported translators.
502
+
503
+ .. code-block:: python
504
+
505
+ from deep_translator import GoogleTranslator
506
+
507
+ # define your proxy configs:
508
+ proxies_example = {
509
+ "https": "your https proxy", # example: 34.195.196.27:8080
510
+ "http": "your http proxy if available"
511
+ }
512
+ translated = GoogleTranslator(source='auto', target='de', proxies=proxies_example).translate("this package is awesome")
513
+
514
+
515
+
516
 
517
  Usage from Terminal
518
  --------------------
deep_translator/google_trans.py CHANGED
@@ -19,12 +19,13 @@ class GoogleTranslator(BaseTranslator):
19
  _languages = GOOGLE_LANGUAGES_TO_CODES
20
  supported_languages = list(_languages.keys())
21
 
22
- def __init__(self, source="auto", target="en"):
23
  """
24
  @param source: source language to translate from
25
  @param target: target language to translate to
26
  """
27
  self.__base_url = BASE_URLS.get("GOOGLE_TRANSLATE")
 
28
 
29
  if self.is_language_supported(source, target):
30
  self._source, self._target = self._map_language_to_code(source.lower(), target.lower())
@@ -36,7 +37,8 @@ class GoogleTranslator(BaseTranslator):
36
  element_query={"class": "t0"},
37
  payload_key='q', # key of text in the url
38
  hl=self._target,
39
- sl=self._source)
 
40
 
41
  self._alt_element_query = {"class": "result-container"}
42
 
@@ -89,8 +91,8 @@ class GoogleTranslator(BaseTranslator):
89
  self._url_params[self.payload_key] = text
90
 
91
  response = requests.get(self.__base_url,
92
- params=self._url_params, headers ={'User-agent': 'your bot 0.1'})
93
-
94
  if response.status_code == 429:
95
  raise TooManyRequests()
96
 
@@ -180,7 +182,8 @@ class GoogleTranslator(BaseTranslator):
180
  return arr
181
 
182
 
183
- # if __name__ == '__main__':
184
- # batch = ["tude", "fleck", "incongruous"]
185
- # text = GoogleTranslator(source="en", target="de").translate_batch(batch)
186
- # print(text)
 
 
19
  _languages = GOOGLE_LANGUAGES_TO_CODES
20
  supported_languages = list(_languages.keys())
21
 
22
+ def __init__(self, source="auto", target="en", proxies=None, **kwargs):
23
  """
24
  @param source: source language to translate from
25
  @param target: target language to translate to
26
  """
27
  self.__base_url = BASE_URLS.get("GOOGLE_TRANSLATE")
28
+ self.proxies = proxies
29
 
30
  if self.is_language_supported(source, target):
31
  self._source, self._target = self._map_language_to_code(source.lower(), target.lower())
 
37
  element_query={"class": "t0"},
38
  payload_key='q', # key of text in the url
39
  hl=self._target,
40
+ sl=self._source,
41
+ **kwargs)
42
 
43
  self._alt_element_query = {"class": "result-container"}
44
 
 
91
  self._url_params[self.payload_key] = text
92
 
93
  response = requests.get(self.__base_url,
94
+ params=self._url_params,
95
+ proxies=self.proxies)
96
  if response.status_code == 429:
97
  raise TooManyRequests()
98
 
 
182
  return arr
183
 
184
 
185
+ if __name__ == '__main__':
186
+ # test proxy config
187
+ proxies = None
188
+ text = GoogleTranslator(source="en", target="de", proxies=proxies).translate("you are good")
189
+ print(text)
deep_translator/linguee.py CHANGED
@@ -22,12 +22,13 @@ class LingueeTranslator(BaseTranslator):
22
  _languages = LINGUEE_LANGUAGES_TO_CODES
23
  supported_languages = list(_languages.keys())
24
 
25
- def __init__(self, source, target="en"):
26
  """
27
  @param source: source language to translate from
28
  @param target: target language to translate to
29
  """
30
  self.__base_url = BASE_URLS.get("LINGUEE")
 
31
 
32
  if self.is_language_supported(source, target):
33
  self._source, self._target = self._map_language_to_code(source.lower(), target.lower())
@@ -88,7 +89,7 @@ class LingueeTranslator(BaseTranslator):
88
  # %s-%s/translation/%s.html
89
  url = "{}{}-{}/translation/{}.html".format(self.__base_url, self._source, self._target, word)
90
  url = requote_uri(url)
91
- response = requests.get(url)
92
 
93
  if response.status_code == 429:
94
  raise TooManyRequests()
 
22
  _languages = LINGUEE_LANGUAGES_TO_CODES
23
  supported_languages = list(_languages.keys())
24
 
25
+ def __init__(self, source, target="en", proxies=None):
26
  """
27
  @param source: source language to translate from
28
  @param target: target language to translate to
29
  """
30
  self.__base_url = BASE_URLS.get("LINGUEE")
31
+ self.proxies = proxies
32
 
33
  if self.is_language_supported(source, target):
34
  self._source, self._target = self._map_language_to_code(source.lower(), target.lower())
 
89
  # %s-%s/translation/%s.html
90
  url = "{}{}-{}/translation/{}.html".format(self.__base_url, self._source, self._target, word)
91
  url = requote_uri(url)
92
+ response = requests.get(url, proxies=self.proxies)
93
 
94
  if response.status_code == 429:
95
  raise TooManyRequests()
deep_translator/microsoft.py CHANGED
@@ -17,7 +17,7 @@ class MicrosoftTranslator:
17
  _languages = MICROSOFT_CODES_TO_LANGUAGES
18
  supported_languages = list(_languages.values())
19
 
20
- def __init__(self, api_key=None, region=None, source=None, target=None, **kwargs):
21
  """
22
  @params api_key and target are the required params
23
  @param api_key: your Microsoft API key
@@ -27,6 +27,8 @@ class MicrosoftTranslator:
27
  raise ServerException(401)
28
  else:
29
  self.api_key = api_key
 
 
30
  self.headers = {
31
  "Ocp-Apim-Subscription-Key": self.api_key,
32
  "Content-type": "application/json",
@@ -108,7 +110,8 @@ class MicrosoftTranslator:
108
  requested = requests.post(self.__base_url,
109
  params=self.url_params,
110
  headers=self.headers,
111
- json=valid_microsoft_json)
 
112
  except requests.exceptions.RequestException:
113
  exc_type, value, traceback = sys.exc_info()
114
  logging.warning(f"Returned error: {exc_type.__name__}")
 
17
  _languages = MICROSOFT_CODES_TO_LANGUAGES
18
  supported_languages = list(_languages.values())
19
 
20
+ def __init__(self, api_key=None, region=None, source=None, target=None, proxies=None, **kwargs):
21
  """
22
  @params api_key and target are the required params
23
  @param api_key: your Microsoft API key
 
27
  raise ServerException(401)
28
  else:
29
  self.api_key = api_key
30
+
31
+ self.proxies = proxies
32
  self.headers = {
33
  "Ocp-Apim-Subscription-Key": self.api_key,
34
  "Content-type": "application/json",
 
110
  requested = requests.post(self.__base_url,
111
  params=self.url_params,
112
  headers=self.headers,
113
+ json=valid_microsoft_json,
114
+ proxies=self.proxies)
115
  except requests.exceptions.RequestException:
116
  exc_type, value, traceback = sys.exc_info()
117
  logging.warning(f"Returned error: {exc_type.__name__}")
deep_translator/mymemory.py CHANGED
@@ -22,12 +22,13 @@ class MyMemoryTranslator(BaseTranslator):
22
  _languages = GOOGLE_LANGUAGES_TO_CODES
23
  supported_languages = list(_languages.keys())
24
 
25
- def __init__(self, source="auto", target="en", **kwargs):
26
  """
27
  @param source: source language to translate from
28
  @param target: target language to translate to
29
  """
30
  self.__base_url = BASE_URLS.get("MYMEMORY")
 
31
  if self.is_language_supported(source, target):
32
  self._source, self._target = self._map_language_to_code(source.lower(), target.lower())
33
  self._source = self._source if self._source != 'auto' else 'Lao'
@@ -93,7 +94,8 @@ class MyMemoryTranslator(BaseTranslator):
93
 
94
  response = requests.get(self.__base_url,
95
  params=self._url_params,
96
- headers=self.headers)
 
97
 
98
  if response.status_code == 429:
99
  raise TooManyRequests()
 
22
  _languages = GOOGLE_LANGUAGES_TO_CODES
23
  supported_languages = list(_languages.keys())
24
 
25
+ def __init__(self, source="auto", target="en", proxies=None, **kwargs):
26
  """
27
  @param source: source language to translate from
28
  @param target: target language to translate to
29
  """
30
  self.__base_url = BASE_URLS.get("MYMEMORY")
31
+ self.proxies = proxies
32
  if self.is_language_supported(source, target):
33
  self._source, self._target = self._map_language_to_code(source.lower(), target.lower())
34
  self._source = self._source if self._source != 'auto' else 'Lao'
 
94
 
95
  response = requests.get(self.__base_url,
96
  params=self._url_params,
97
+ headers=self.headers,
98
+ proxies=self.proxies)
99
 
100
  if response.status_code == 429:
101
  raise TooManyRequests()
deep_translator/pons.py CHANGED
@@ -21,13 +21,13 @@ class PonsTranslator(BaseTranslator):
21
  _languages = PONS_LANGUAGES_TO_CODES
22
  supported_languages = list(_languages.keys())
23
 
24
- def __init__(self, source, target="english"):
25
  """
26
  @param source: source language to translate from
27
  @param target: target language to translate to
28
  """
29
  self.__base_url = BASE_URLS.get("PONS")
30
-
31
  if self.is_language_supported(source, target):
32
  self._source, self._target = self._map_language_to_code(source, target)
33
 
@@ -86,7 +86,7 @@ class PonsTranslator(BaseTranslator):
86
  if self._validate_payload(word, max_chars=50):
87
  url = "{}{}-{}/{}".format(self.__base_url, self._source, self._target, word)
88
  url = requote_uri(url)
89
- response = requests.get(url)
90
 
91
  if response.status_code == 429:
92
  raise TooManyRequests()
 
21
  _languages = PONS_LANGUAGES_TO_CODES
22
  supported_languages = list(_languages.keys())
23
 
24
+ def __init__(self, source, target="en", proxies=None):
25
  """
26
  @param source: source language to translate from
27
  @param target: target language to translate to
28
  """
29
  self.__base_url = BASE_URLS.get("PONS")
30
+ self.proxies = proxies
31
  if self.is_language_supported(source, target):
32
  self._source, self._target = self._map_language_to_code(source, target)
33
 
 
86
  if self._validate_payload(word, max_chars=50):
87
  url = "{}{}-{}/{}".format(self.__base_url, self._source, self._target, word)
88
  url = requote_uri(url)
89
+ response = requests.get(url, proxies=self.proxies)
90
 
91
  if response.status_code == 429:
92
  raise TooManyRequests()