使用Bing Translate API做简单的多语言翻译

Bing提供了一个Translate API可以用来做翻译用,其实使用这个API已经很久了,语言翻译是我的irc机器人smbot中功能的其中一个,今天将它提取出来,将使用Bing Translate API来做翻译的部分取出来简单地说一下如何使用Bing Translate API做多语言翻译。

记得当初在做smbot的翻译功能的时候本来是想找Google Translate API的,但是发现不知道什么时候起Google的API收费了,所以只好另寻它路了,很快就找到了Bing的API,不过在通过注册了Translate API应用后发现官方对Translate API的说明很老,而我注册使用的API是2.0,但官方的文档却还是老的文档,新的API与老的API在验证方式上有所变动,在经过漫长的搜索之后终于找到了新的API验证方法,新的API验证方法有两步(大概是这样吧,事件过了很久了忘记了),比较繁琐,在无意的一次测试中我找到了一种相对要简单的多的验证方式,只需要一步就可以完成任务,下面开始。

首先我们需要注册一个Bing帐号,然后在这里我们订阅Bing Translate API
https://datamarket.azure.com/dataset/5BA839F1-12CE-4CCE-BF57-A49D98D29A44
这时我们可以从这里看到我们的应用
https://datamarket.azure.com/account/datasets

选择使用我们可以在线地做一些测试(我就是通过这种方式抓取了数据包找到了“新”的验证方式)
点击它我们可以看到该API的一个参数列表
我们这里只需要两个参数Text和To,前者是我们要翻译的文本,后者是要翻译成的目标语言,目标语言有如下这些
ar bg ca zh-CHS zh-CHT cs da nl en et fi fr de el ht he hi mww hu id it ja tlh tlh-Qaak ko lv lt ms mt no fa pl pt ro ru sk sl es sv th tr uk ur vi
具体哪个对哪个我这里不作说明,大家可以使用GetLanguagesForTranslation参数得到这些目标语言代码

当然这里还有个From是当前需要翻译的语言的代码,比如中文简体是zh-chs,我们在不指定这个参数时Bing会自动匹配我们要翻译的语言是哪国语言(好智能好高级= =),所以我的程序中就没有指定这个参数,如果你想更好地控制你的程序的话就使用这个参数,语言代码如上一致。

我们注册完成后会在帐户信息中看到一个主帐户密钥,没错,验证就是要用它了,不过我们不用直接拿来使用,我们需要对它做一次bash64编码,而我们使用API的方式是通过发送HTTP请求包来完成的,这个验证是HTTP中的一种认证方式,它使用选项Authorization,使用用户名:密码的base64作为参数进行传递,由于没有用户名所以可以写成下面这样
Authorization: Basic “:+主帐户密钥的base64编码”

我们的GET代码为
GET /Bing/MicrosoftTranslator/v1/Translate?Text=’要翻译的内容’&To=’目标语言代码’&$skip=0&$top=1&$format=json HTTP/1.1
要注意的地方Text和To参数中的数据一定要使用单引号进行括进来,不然会出错
format=json参数表示我们需要返回的数据是以json格式进行返回的,当然也可以使用xml格式,随你喜欢,我们将这个GET请求发送到
https://api.datamarket.azure.com
注意这里的https而不是http,这里使用的是安全协议

基本上就是这些了,有了这些我们就可以进行翻译程序的编写了,下面我将smbot中dict指令(翻译功能)的部分提取出来做个单独的程序,下面放代码

编译
gcc -o translate translate.c mysock/mysock.c -lssl
因为mysock使用了openssl所以需要有-lssl参数
第一个参数是要翻译的文本,第二个参数是目标语言的代码
./translate “我可以吞下玻璃而不伤身体你可以吗?” en
I can swallow glass and not injury the body, you can do it?
./translate “I can swallow glass and not injury the body, you can do it?” zh-chs
我可以吞玻璃和不伤害身体,你能做到吗?

我们翻过来再翻过去。。。。。。。。。。。。。。。

–阅读次数(39)

发表评论

电子邮件地址不会被公开。

*