File size: 2,240 Bytes
3e848bc 6a08467 3e848bc 55b5f6a 3e848bc |
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 |
"""Main module."""
try:
from bs4 import BeautifulSoup
except:
raise Exception("Import Error")
import requests
from .models import BaseTranslator
from .constants import BASE_URLS, LANGUAGES_TO_CODES
from .exceptions import LanguageNotSupportedException, NotValidPayload
class GoogleTranslator(BaseTranslator):
def __init__(self, source="auto", target="en"):
self.__base_url = BASE_URLS.get("GOOGLE_TRANSLATE")
super(GoogleTranslator, self).__init__()
if self._validate_languages([source.lower(), target.lower()]):
self._source = self._map_language_to_code(source.lower())
self._target = self._map_language_to_code(target.lower())
def _validate_payload(self, payload):
if not isinstance(payload, str):
return False
elif not payload:
return False
elif len(payload) > 5000:
return False
else:
return True
def _map_language_to_code(self, language):
if language in LANGUAGES_TO_CODES.values() or language == 'auto':
return language
elif language in LANGUAGES_TO_CODES.keys():
return LANGUAGES_TO_CODES[language]
else:
raise LanguageNotSupportedException(language)
def _validate_languages(self, languages):
for lang in languages:
if lang != 'auto' and lang not in LANGUAGES_TO_CODES.keys():
if lang != 'auto' and lang not in LANGUAGES_TO_CODES.values():
raise LanguageNotSupportedException(lang)
return True
def translate(self, payload):
valid = self._validate_payload(payload)
if not valid:
raise NotValidPayload(payload)
try:
payload = payload.strip()
params = {
"hl": self._target,
"sl": self._source,
"q": payload
}
res = requests.get(self.__base_url, params=params)
soup = BeautifulSoup(res.text, 'html.parser')
res = soup.find("div", {"class": "t0"})
return res.get_text(strip=True)
except Exception as e:
print(e.args)
raise
|