我现在也有同样的问题。在
上面写着:
BabelfishChangedError公司
什么时候扔的babelfish.yahoo.com网站更改HTML布局的一些细节,Bablizer不再以正确的形式提交数据,或者无法再解析结果。在
我去看看有没有办法解决这个问题。在
我现在提出的解决方案是使用Microsoft Translator web service(SOAP)。这不是一个简单的解决方案,但代码很有趣。在订阅Azure Marketplace上的Microsoft Translator API
订阅Azure Marketplace上的Microsoft Translator API,我选择了免费订阅。在注册你的应用程序Azure DataMarket
若要向Azure DataMarket注册应用程序,请访问datamarket.azure.com/developer/applications/使用步骤1中的LiveID凭证,然后单击“注册”。写下你的客户id和你的客户机密以备以后使用安装Python的sudsfedorahoste.org/suds/
修改巴贝鱼.py(使用您自己的客户端id和密码):
//要添加的导入from suds.client import Client
import httplib
import ast
...
#added function
def soaped_babelfish(TextToTranslate,codeLangFrom, codeLangTo):
#Oauth credentials
params = urllib.urlencode({'client_id': 'babelfish_soaped', 'client_secret': '1IkIG3j0ujiSMkTueCZ46iAY4fB1Nzr+rHBciHDCdxw=', 'scope': 'http://api.microsofttranslator.com', 'grant_type': 'client_credentials'})
headers = {"Content-type": "application/x-www-form-urlencoded"}
conn = httplib.HTTPSConnection("datamarket.accesscontrol.windows.net")
conn.request("POST", "/v2/OAuth2-13/", params, headers)
response = conn.getresponse()
#print response.status, response.reason
data = response.read()
#obtain access_token
respondeDict = ast.literal_eval(data)
access_token = respondeDict['access_token']
conn.close()
#use the webservice with the accesstoken
client = Client('http://api.microsofttranslator.com/V2/Soap.svc')
result = client.service.Translate('Bearer'+' '+access_token,TextToTranslate,codeLangFrom, codeLangTo, 'text/plain','general')
return result
...
#modified translate method
def translate(phrase, source, target):
phrase = clean(phrase)
try:
source_code = __languages[source]
target_code = __languages[target]
except KeyError, lang:
raise ValueError, "Language %s not available " % lang
return clean(soaped_babelfish(phrase,source_code,target_code))
这就是肥皂剧版的全部!改天我会尝试一个基于web的解决方案(类似于当前的巴贝鱼.py但适应了变化)