| """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 | |