Add support for customizable service url
This commit is contained in:
parent
92ea3cd2c1
commit
0f943b6a64
16
README.rst
16
README.rst
@ -22,6 +22,7 @@ Features
|
||||
translate.google.com uses
|
||||
- Auto language detection
|
||||
- Bulk translations
|
||||
- Customizable service URL
|
||||
- Connection pooling (the advantage of using requests.Session)
|
||||
- HTTP/2 support
|
||||
|
||||
@ -32,7 +33,6 @@ more features are coming soon.
|
||||
|
||||
- Proxy support
|
||||
- Internal session management (for better bulk translations)
|
||||
- Customizable service URL (translate.google.**com**)
|
||||
|
||||
HTTP/2 support
|
||||
~~~~~~~~~~~~~~
|
||||
@ -89,6 +89,20 @@ source language.
|
||||
>>> translator.translate('veritas lux mea', src='la')
|
||||
# <Translated src=la dest=en text=The truth is my light pronunciation=The truth is my light>
|
||||
|
||||
Customize service URL
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
You can use another google translate domain for translation. If multiple
|
||||
URLs are provided it then randomly chooses a domain.
|
||||
|
||||
.. code:: python
|
||||
|
||||
>>> from googletrans import Translator
|
||||
>>> translator = Translator(service_urls=[
|
||||
'translate.google.com',
|
||||
'translate.google.co.kr',
|
||||
])
|
||||
|
||||
Advanced Usage (Bulk)
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
@ -5,6 +5,7 @@ A Translation module.
|
||||
You can translate text using this module.
|
||||
"""
|
||||
import requests
|
||||
import random
|
||||
|
||||
from googletrans import urls, utils
|
||||
from googletrans.compat import PY3
|
||||
@ -18,12 +19,13 @@ EXCLUDES = ('en', 'ca', 'fr')
|
||||
|
||||
class Translator(object):
|
||||
|
||||
def __init__(self, user_agent=DEFAULT_USER_AGENT):
|
||||
def __init__(self, service_urls=None, user_agent=DEFAULT_USER_AGENT):
|
||||
self.session = requests.Session()
|
||||
self.session.headers.update({
|
||||
'User-Agent': user_agent,
|
||||
})
|
||||
self.token_acquirer = TokenAcquirer(session=self.session)
|
||||
self.service_urls = service_urls or ['translate.google.com']
|
||||
|
||||
# Use HTTP2 Adapter if hyper is installed
|
||||
try: # pragma: nocover
|
||||
@ -32,6 +34,11 @@ class Translator(object):
|
||||
except ImportError: # pragma: nocover
|
||||
pass
|
||||
|
||||
def _pick_service_url(self):
|
||||
if len(self.service_urls) == 1:
|
||||
return self.service_urls[0]
|
||||
return random.choice(self.service_urls)
|
||||
|
||||
def _translate(self, text, dest='en', src='auto'):
|
||||
if src != 'auto':
|
||||
if src not in LANGUAGES.keys() and src in SPECIAL_CASES.keys():
|
||||
@ -51,7 +58,8 @@ class Translator(object):
|
||||
token = self.token_acquirer.do(text)
|
||||
params = utils.build_params(query=text, src=src, dest=dest,
|
||||
token=token)
|
||||
r = self.session.get(urls.TRANSLATE, params=params)
|
||||
url = urls.TRANSLATE.format(host=self._pick_service_url())
|
||||
r = self.session.get(url, params=params)
|
||||
|
||||
data = utils.format_json(r.text)
|
||||
return data
|
||||
|
@ -3,4 +3,4 @@
|
||||
Predefined URLs used to make google translate requests.
|
||||
"""
|
||||
BASE = 'https://translate.google.com'
|
||||
TRANSLATE = 'https://translate.google.com/translate_a/single'
|
||||
TRANSLATE = 'https://{host}/translate_a/single'
|
||||
|
@ -1,6 +1,21 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from pytest import raises
|
||||
|
||||
from googletrans import Translator
|
||||
|
||||
|
||||
def test_bind_multiple_service_urls():
|
||||
service_urls = [
|
||||
'translate.google.com',
|
||||
'translate.google.co.kr',
|
||||
]
|
||||
|
||||
translator = Translator(service_urls=service_urls)
|
||||
assert translator.service_urls == service_urls
|
||||
|
||||
assert translator.translate('test', dest='ko')
|
||||
assert translator.detect('Hello')
|
||||
|
||||
|
||||
def test_latin_to_english(translator):
|
||||
result = translator.translate('veritas lux mea', src='la', dest='en')
|
||||
|
Loading…
Reference in New Issue
Block a user