Нет ответа от URL, использующего запросы Python для другого языка
Я хотел использовать сервис Google Translate для преобразования текста с одного языка на другой. Я знаю, что Google Translate теперь является платным сервисом, поэтому я не использовал REST API. Я попробовал следующий способ, чтобы выучить язык и больше ничего.
Код работает хорошо, когда я запрашиваю URL для перевода на язык, который возвращает текст на английском языке. Например, если вы звоните:-
do_trans("Hello World", "fr", "en")
Пример вывода
Бонжур Ле Монд
Привет, мир
Выше работает хорошо. Работая хорошо, я имею в виду, что когда я повторяю запрос на получение текста на английском языке из текста на французском языке, то полученный вывод является правильным. Но если я запрашиваю такой язык, как японский или китайский (который возвращает разные данные в Юникоде) и т. Д., То перевод с китайского или японского на английский не выполняется, хотя первая часть, которая является английской для других языков, работает хорошо.
# -- coding: utf-8 --
import requests
import re
__base_url = "http://translate.google.com/translate_a/t"
__headers = {
"User-Agent": "Mozilla/5.0 (Windows; U; en) AppleWebKit/420+ (KHTML, like Gecko) "
"Version/3.1.2 Safari/525.21"
}
params = {
"client": "t",
"ie": "UTF-8",
"oe": "UTF-8",
"sl": "en",
"tl": "ja",
"text": "こんにちはモンキー!"
}
matcher = re.compile(r'\[\[\["(.*?)","(.*)","(.*)",""\]\]')
def do_trans(text, tolang, fromlang):
params['sl'] = fromlang
params['tl'] = tolang
params['text'] = text
req = requests.get(__base_url, params=params, headers=__headers)
if req.status_code == 200:
transtext = re.search(matcher, req.text)
if transtext:
return transtext.group(1)
if __name__ == "__main__":
t1 = do_trans("Hello World", "zh-CN", "en")
print(t1)
t2 = do_trans(t1, "en", "zh-CN")
print t2
Пример вывода для выше:-
你好 世界
Никто
Любая помощь и информация о том, как решить эту ошибку или проблему, были бы хорошими.
Спасибо.
1 ответ
Что ж, проблема в выражении соответствия, вы видите, что если вы напечатаете req.text, вы заметите, что при переводе с en на zh-CN вы получите:
[[["你好世界","Hello World","Nǐ hǎo shìjiè",""]],,...
Что соответствует вашему выражению [[["something", "something", "something", ""]]
,
Когда вы переводите обратно на английский с китайского, вы получаете:
[[["Hello World","你好世界","","Nǐ hǎo shìjiè"]],,...
Который не соответствует, потому что у вас нет пустого ""
в четвертом пункте в списке.
Исправьте ваш матчер:
# Note that I've added (.*) to the fourth item in the list
matcher = re.compile(r'\[\[\["(.*?)","(.*)","(.*)","(.*)"\]\]')
И вы получите:
你好 世界
Привет, мир
PS:
О UnicodeEncodeError: 'charmap' codec can't encode characters in position 38-41: character maps to <undefined>
в основном говорит: "Я не могу преобразовать то, что вы передаете в кодек charmap (cmd coding)". Исправьте это, передав строку utf-8.
if __name__ == "__main__":
t1 = do_trans("Hello World", "zh-CN", "en")
print(t1.encode('utf-8'))
t2 = do_trans(t1, "en", "zh-CN")
print(t2.encode('utf-8'))
Хотя это что-то напечатает, я не смог заставить cmd выводить китайскую строку правильно, все еще ОЧЕНЬ ограниченная поддержка юникода в оболочке CMD.