让Python使用Bing翻译API V2


最近要整点自动翻译的东东,发现最亲民的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
 
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值