我正在尝试使用带有 utf-8 文本的 python 的谷歌翻译。如何调用 json api?他们有一个将其嵌入 html 的文档,但我在任何地方都找不到合适的 API 或 wsdl。
谢谢拉斐尔
我正在尝试使用带有 utf-8 文本的 python 的谷歌翻译。如何调用 json api?他们有一个将其嵌入 html 的文档,但我在任何地方都找不到合适的 API 或 wsdl。
谢谢拉斐尔
这是最终对我有用的代码。使用没有 ajax api 的网站可以让你的 ip 被禁止,所以这更好。
#!/usr/bin/env python
from urllib2 import urlopen
from urllib import urlencode
import urllib2
import urllib
import simplejson
import sys
# The google translate API can be found here:
# http://code.google.com/apis/ajaxlanguage/documentation/#Examples
def translate(text = 'hola querida'):
tl="es"
sl="en"
langpair='%s|%s'%(tl,sl)
base_url='http://ajax.googleapis.com/ajax/services/language/translate?'
data = urllib.urlencode({'v':1.0,'ie': 'UTF8', 'q': text.encode('utf-8'),
'langpair':langpair})
url = base_url+data
search_results = urllib.urlopen(url)
json = simplejson.loads(search_results.read())
result = json['responseData']['translatedText']
return result
使用 Peteris Kramins 的 xgoogle(他的博客)
>>> from xgoogle.translate import Translator
>>>
>>> translate = Translator().translate
>>>
>>> print translate("Mani sauc Pēteris", lang_to="en")
My name is Peter
>>>
>>> print translate("Mani sauc Pēteris", lang_to="ru").encode('utf-8')
Меня зовут Петр
>>>
>>> print translate("Меня зовут Петр")
My name is Peter
看看我发现了什么:http ://code.google.com/intl/ru/apis/ajaxlanguage/terms.html
这是有趣的部分:
您不会也不会允许您的最终用户或其他第三方: .... * 提交长度超过 5000 个字符的任何请求;……
我认为您在谈论必须从 javascript 使用的 ajax api http://code.google.com/apis/ajaxlanguage/,所以我不明白您所说的“google translate from python”是什么意思
或者,如果您需要使用 python 的翻译功能,您可以直接查询翻译页面并使用 xml/html 库解析它,例如美丽的汤,html5lib
实际上我做过一次,漂亮的汤在谷歌翻译上不起作用,但 html5lib( http://code.google.com/p/html5lib/ )可以
你需要做这样的事情(从我更大的代码库复制)
def translate(text, tlan, slan="en"):
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'translate.py/0.1')]
htmlPage = opener.open(
"http://translate.google.com/translate_t?" +
urllib.urlencode({'sl': slan, 'tl':tlan}),
data=urllib.urlencode({'hl': 'en',
'ie': 'UTF8',
'text': text.encode('utf-8'),
'sl': slan, 'tl': tlan})
)
parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("etree", cElementTree))
etree_document = parser.parse(htmlPage)
return _getResult(etree_document)