最近要整点自动翻译的东东,发现最亲民的Google的翻译API关闭了。那么摆在码农的面前大概也只有2条路,
一是,直接使用web版本的的google翻译,然后分析URL,和结果得到翻译结果。然后直接调用,网上好像已经有兄弟们这样干了。
二是,投奔微软的阵营,使用Bing的API,
由于我要翻译的东东好像在bing这儿的翻译效果还可以,另外也训练一下自己的Python能力,做点开源的事情。打算写个Python使用Bing的API代码测试一下。
Bing的翻译API也不是绝对免费,每个月可以翻译2M的字符的数据。这个当然不多,但一般人也够用了。(纯文本的圣经4M多)。超出后如果要再使用也必须付费,
费用好像是2M 40美刀。
另外Bing的API有一些有特色的地方,比如你可以在里面增加一些自己的翻译,帮助修正你的翻译结果,另外其还有语音能力。可以将你输入的语音转换为wav或者mp3文件。上流。
网上有些兄弟写过Bing的API,但是大部分是是对于V1的版本的,V2版本改了验证方式
现在微软已经使用了新的验证方式,使用APPID的方法已经玩不转了。每次使用前必须用一个access token的东东,你必须自己申请一个ClientID和Client密码。有兴趣了解详情的请参考
http://blogs.msdn.com/b/translation/p/gettingstarted1.aspx
http://api.microsofttranslator.com
Bing的API有3种调用接口,Ajax,SOAP,HTTP。我用Python搞,估计HTTP的方式更加合适我一点。我的只实现了部分接口,
我实现的Bing 翻译V2的接口包括,翻译,得到翻译候选列表,(一次翻译多个语句)设置翻译内容,得到语音等几个,其他的感觉有点多余,未必用得到。
如果没有token或者Token超时,会自己重新去获取Token,使用起来也比较简单。
还是多说无益,上代码,注释应该足够丰富,大家肯定看的明白。
# coding=utf-8
'''
网上有些兄弟写过,但是大部分是是对于V1的版本的,V2版本改了验证方式
现在微软已经使用了新的验证方式,使用APPID的方法已经玩不转了。必须用一个access token的东东
清参考
http://blogs.msdn.com/b/translation/p/gettingstarted1.aspx
http://api.microsofttranslator.com
'''
import urllib
import urllib2
import json
import time
import unittest
import xml.etree.ElementTree
class Get_Translate_Data(object):
'''
Get Translate 操作取回的数据的,解析后的得到的数据字段,
'''
def __init__(self):
# #翻译结果匹配程度
self._match_degree = 0
# #翻译结果被用户选择的次数
self._selected_count = 0
# #翻译结果可以认可的比率,MS自己有一套规则,自己上参考网址看
self._rating = 0
# #返回的结果
self._translated_text = ""
def __str__(self):
return ("match_degree:%s selected_count:%s rating:%s translated_text:%s")\
% (self._match_degree, self._selected_count, self._rating, self._translated_text)
class Bing_Translator_API(object):
'''
此工具用于使用bing的翻译API,让你快速的得到翻译的结果
我是按照2012年12月22日看到的API V2的要求实现的,
实现的Bing 翻译V2的接口包括,翻译,得到翻译候选列表,(一次翻译多个语句)设置翻译内容,得到语音,
'''
# 最大请求的字符长度,微软的要求
REQ_STR_MAX_LEN = 10000
# add trascation 增加翻译的原文最大长度
ADD_ORIGINALTEXT_LEN = 1000
# add trascation 增加翻译的翻译文字长度
ADD_TRANSLATEDTEXT_LEN = 2000
# SPEEK string的最大值
SPEAK_STRING_LEN = 2000
# 最大返回的结果个数
RSP_RESULT_MAX_NUMBER = 10
# 取得acess token的两个参数,常量
ACCESS_TOKEN_REQ_SCOPE = "http://api.microsofttranslator.com"
ACCESS_TOKEN_REQ_GRANT_TYPE = "client_credentials"
# POST取得ACESS TOKEN的URL
ACCESS_TOKEN_REQ_URL = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13"
# GET方法得到翻译的结果,只得到一个结果,估计这个最常用
TRANSLATE_REQ_URL = "http://api.microsofttranslator.com/V2/Http.svc/Translate"
# POST取得翻译结果的结果的URL,这个是一次可以取回多个翻译结果
GET_TRANSLATE_REQ_URL = "http://api.microsofttranslator.com/V2/Http.svc/GetTranslations"
# 检测语句的语言
DETECT_REQ_URL = "http://api.microsofttranslator.com/V2/Http.svc/Detect"
# 增加翻译的URL
ADD_TRANSLATION_URL = "http://api.microsofttranslator.com/V2/Http.svc/AddTranslation"
# 发音的请求
SPEAK_REQ_URL = "http://api.microsofttranslator.com/V2/Http.svc/Speak"
# LC=language code,常用的几个都写在这儿,免得你还要查询
LC_CHINESE_SIMPLIFIED = "zh-CHS"
LC_CHINESE_TRADITIONAL = "zh-CHT"
LC_ENGLISH = "en"
LC_JAPANESE = "ja"
LC_KOREAN = "ko"
LC_FRENCH = "fr"
LC_GERMAN = "de"
def __init__ (self, client_id, client_secret, proxy_conf=None):
'''
@param client_id 客户端ID,你在MS网址注册得到的ID
@param client_secret 客户端密钥
@param proxy_conf 代理配置,默认None,不配置,如果配置http,https都要写,
比如{'http': 'http://proxy.a.com:8080/','https': 'http://proxy.a.com:8080/'},折腾了我一个下午
'''
# 你请求获得acess token的两个参数,客户端ID,和一个验证密码
self._client_id = client_id
self._client_secret = client_secret
self._token_opener = None
self._api_opener = None