注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

午夜阳光

 
 
 

日志

 
 

C#调用百度翻译API实现自己的简单翻译工具 Get方式  

2014-09-01 17:12:14|  分类: C# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

于是在百度开发者中心申请了一个百度翻译的API。

首先肯定是需要百度开发者中心去申请一个百度翻译的API的。申请方式具体可以去这里看:百度翻译API帮助中心,我就简单说一下:登录之后,新建一个工程。在控制面板里面有一个其它API的选项。进入选择百度翻译API。提交申请之后,会显示正在提交申请之类的,不用管,拿到key就行了。

接下来打开visual studio,新建一个winform项目。可以先把窗体空间拖好。

这是我拖好的界面,是丑了点,我也没过多美化。main

使用了两个ComboBox控件,是当前语言的选择和目标语言的选择。语言支持请看这里:翻译API语言列表以及json

这是百度的官方文档。因为我们仔细发送语言的时侯,不是通过中文发送的,而是使用的对应的英文,例如:英语==en,简体中文==zh

这应该很容易理解。在C#里面可以通过键值对的集合来保存语言列表。


//能够选择的当前语言信息
            Dictionary<String, String> NowLanguage = new Dictionary<string, string>();
            NowLanguage.Add("auto", "自动检测");
            NowLanguage.Add("zh", "简体中文");
            NowLanguage.Add("en", "英语");           
            NowLanguage.Add("de", "德语");      
           
NowLanguage.Add("jp", "日语");
            NowLanguage.Add("spa", "西班牙语");
            NowLanguage.Add("th", "泰语");
            NowLanguage.Add("ru", "俄罗斯语");
            NowLanguage.Add("yue", "粤语");
            NowLanguage.Add("kor", "韩语");
            NowLanguage.Add("fra", "法语");
            NowLanguage.Add("it", "意大利语");
            NowLanguage.Add("ara", "阿拉伯语");
            NowLanguage.Add("pt", "葡萄牙语");
            NowLanguage.Add("wyw", "文言文");
            //能够选择的目标语言信息
            TargetLanguage = new Dictionary<string, string>();
            TargetLanguage.Add("auto", "自动检测");
            TargetLanguage.Add("zh", "简体中文");
            TargetLanguage.Add("en", "英语");
            TargetLanguage.Add("de", "德语");
            TargetLanguage.Add("jp", "日语");
            TargetLanguage.Add("spa", "西班牙语");
            TargetLanguage.Add("th", "泰语");  
        
TargetLanguage.Add("ru", "俄罗斯语");
            TargetLanguage.Add("yue", "粤语");
            TargetLanguage.Add("kor", "韩语");
            TargetLanguage.Add("fra", "法语");
            TargetLanguage.Add("it", "意大利语");
            TargetLanguage.Add("ara", "阿拉伯语");
            TargetLanguage.Add("pt", "葡萄牙语");
            TargetLanguage.Add("wyw", "文言文");

以上的内容是文档里面提供的,我直接使用了Dictionary集合储存了语言列表,然后再添加到了ComboBox(绑定数据源)。绑定数据源应该不需要再说吧。如果不会的可以看这里:ComboBox绑定Dictionary做为数据源

使用ComboBox的事件:SelectedIndexChanged   来获取用户选择的语言,使用属性SelectedValue。

现在最主要通过API获取返回的翻译结果。百度官方的文档可以知道返回的结果是json代码。主要还是可以自己看看上面所发的第二个链接,也就是百度官方的使用文档。

我现在就主要说C#如何发送请求获得JSON代码。

百度翻译API的接口Get请求方式:

1
http://openapi.baidu.com/public/2.0/bmt/translate?client_id=你申请的Key&q=查询内容&from=源语言&to=目标语言

其中的from和to是两个ComboBox的选择值。

有了API接口之后,我们需要的就是发送请求了。可以使用实例化一个WebClient,然后使用方法:DownloadString方法。里面传入API的Get请求网址。

具体的实现方法:


/// <summary>
        /// 调用百度API的翻译方法
        /// </summary>
        /// <param name="NowLanguage">当前语言</param>
        /// <param name="TargetLanguage">目标语言</param>
        /// <param name="Content">翻译内容</param>
        /// <returns>翻译的结果</returns>
        public String TranslationMain(String NowLanguage, String TargetLanguage,String Content)
        {
            String api = String.Format("http://openapi.baidu.com/public/2.0/bmt/translate?client_id=你的Key&q={0}&from={1}&to={2}", Content, NowLanguage, TargetLanguage);
            WebClient client = new WebClient();
            return client.DownloadString(api);
        }

这个方法返回一个JSON字符串。

格式如下:

1
{"from":"en","to":"zh","trans_result":[{"src":"today","dst":"\u4eca\u5929"}]}

看到JSON之后,我们可以看到当前语言、目标语言、翻译内容、翻译结果。很明显,翻译结果是Unicode码。所以到后面还需要转换成UTF-8代码。这个先不急,先把trans_result里面的dst获取到,因为dst就是翻译结果。

仔细看JSON代码,可以看成是两层内容。所以要分两次解析。

解析JSON可以通过一个dll:Newtonsoft.Json

下载地址:http://pan.baidu.com/s/1pJ2UM8N   提取密码:24lp

包里面有很多dll,选择自己.net版本相对应的dll添加到项目中的引用即可。

现在就可以写一个解析JSON的方法了:


/// <summary>
        ///解析Json代码
        /// </summary>
        /// <param name="jsonCode">JSON代码</param>
        /// <returns>返回翻译的字符串</returns>
        public String Analytical(String JsonCode)
        {
            JObject ResultParent = JObject.Parse(JsonCode);
            String trans_result = ResultParent["trans_result"].ToString();
            JObject ResultChild = JObject.Parse(trans_result.Replace("[", " ").Replace("]", " "));
            //翻译后的目标结果
            String target = ResultChild["dst"].ToString();
            return target;
        }

很明显,我上面就解析了两次,其中的trans_result为解析的第一次,也就是解析出来trans_result的内容。后面又将 trans_result里面的方括号给转换成了空格,如果不转换,那么就不是一个正确的json代码,所以我使用空格将json大括号前后的方括号去 掉。String ResultChild就是解析出来的src和dst内容。然后我再将dst取出来,放到target变量中,返回target。也就 返回了翻译结果。在解析JSON中,其中的Unicode码也就直接被翻译成了UTF-8。所以,返回的结果就是我们所需要的内容。

….

现在貌似就已经搞定了。

这次写的教程写得比较乱,如果看得不懂的地方可以提出来。

我写的源代码下载地址:链接: http://pan.baidu.com/s/1i3zdpTb   密码: pyo8

  评论这张
 
阅读(698)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017