Source code for yandex.yandex
import requests
from yandex.errors import YandexFormatError, raise_exception
[docs]class Yandex:
""" Yandex python wrapper. """
[docs] def __init__(self, api_token):
"""
:param api_token: API token from yandex.
:type api_token: str
"""
self.token = api_token
def guess_language(self, text, possible_languages=None):
"""
Guesses the language from a text sample
:param text: text sample
:type text: str
:param possible_languages: (default : []) possible languages the text might be in
:type possible_languages: list or int
:returns: language code of the text sample
:rtype: str
:raises: yandex.YandexRequestError
"""
if possible_languages is None:
possible_languages = []
url = "https://translate.yandex.net/api/v1.5/tr.json/detect"
payload = {"key": self.token,
"text": text,
"hint": possible_languages}
resp = requests.post(url, data=payload)
if resp.status_code == 200:
return resp.json()['lang']
else:
raise_exception(resp)
def translate(self, text, to_lang, from_lang="", format='plain'):
"""
Translates text from a language into another one.
:param text: text to translate
:type text: str
:param to_lang: language code to translate to.
:type to_lang: str
:param from_lang: (default: "") language code of the original language. Yandex will guess the language if omitted.
:type from_lang: str
:param format: (default: 'plain') format of the text. One of either ('plain', 'html')
:type format: str
:returns: translated text
:rtype: str
:raises: yandex.YandexFormatError
:raises: yandex.YandexRequestError
"""
if format not in ('plain', 'html'):
raise YandexFormatError("Format is not one of ('plain', 'html') : {}".format(format))
url = "https://translate.yandex.net/api/v1.5/tr.json/translate"
if from_lang:
lang_code = "{}-{}".format(from_lang.lower(), to_lang.lower())
else:
lang_code = to_lang.lower()
payload = {"key": self.token,
"text": text,
"lang": lang_code,
"format": format,
}
resp = requests.post(url, data=payload)
if resp.status_code == 200:
return resp.json()['text'][0]
else:
raise_exception(resp)
def get_language_map(self, lang='en'):
"""
Gets a dictionary mapping of all supported languages
:param lang: (default: 'en') language in which the lang names will be.
:returns: dictionary of supported languages in the format {'lang_code': 'lang_name'}
:rytpe: dict<str, str>
:raises: yandex.YandexRequestError
"""
url = "https://translate.yandex.net/api/v1.5/tr.json/getLangs"
payload = {"key": self.token,
"ui": lang}
resp = requests.post(url, data=payload)
if resp.status_code == 200:
return resp.json()['langs']
else:
raise_exception(resp)
def get_language_pairs(self, lang='en'):
"""
Gets a list of all supported languages pairs
:param lang: (default: 'en') language in which the lang names will be.
:returns: list of all supported language pairs in the format 'from-to'
:rytpe: list<str>
:raises: yandex.YandexRequestError
"""
url = "https://translate.yandex.net/api/v1.5/tr.json/getLangs"
payload = {"key": self.token,
"ui": lang}
resp = requests.post(url, data=payload)
if resp.status_code == 200:
return resp.json()['dirs']
else:
raise_exception(resp)