最近工作上没有什么事情,比较清闲,但是闲着又不舒服,在浏览码农网,看到一个博客,自己实现百度翻译的功能,感觉挺有意思的,就自己也学着实现了一下,用了接近一天的时间,最终完成了最基本的功能—–翻译英文单词。这里建议自己(毕竟编程小白的博客也没有几个看)没事多看看码农网,虽然活跃用户不多,但是里面的文章质量都非常高,费说少说,下面进入正题。
要实现翻译功能,其核心就是调用百度开放的翻译API接口,具体内容和文档请查看百度开发者平台–翻译。从开发文档中,可以总结出完成翻译功能的三个步骤:

  1. 利用得到APP ID和秘钥,使用MD5算法生成签名
  2. 对签名进行加密
  3. 将加密后的签名,APPID 秘钥 随机数写入请求字符串
  4. 发送请求字符串
  5. 接受反馈回来的json数据,进行json数据进行反序列化
  6. 最终得到翻译后的中文意思
    步骤明确了,剩下来的就是用代码实现了。
    百度反馈回来的数据是json格式的,为了写代码方便,首先创建一个类,用于存放json数据,具体代码如下:
using System.Collections.Generic;
namespace baidufanyi
{class TransObj{//注意:就是此类的三个属性名称必须和json数据里面的key一致public string from { set; get; }public string to { set; get; }public List<TransResult> trans_result { set; get; }  }class TransResult{public string src { set; get; }public string dst { set; get; }}
}

由于要实现的功能仅仅只是翻译而已,因此界面非常简单,我的界面如下:

因为秘钥和APPID都是固定的,而随机数不是固定的因此分别定义如下:

双击翻译按钮,得到按钮响应函数:

        private void translate_Click(object sender, EventArgs e){zh.Text = null;//WebClient类  提供用于将数据发送到由URI标识的资源,以及从由URI标识的资源接受数据的常用方法 WebClient client = new WebClient();string txtInput = en.Text;string sign = GetMd5Sign();string url = string.Format("http://api.fanyi.baidu.com/api/trans/vip/translate?q={0}&from=en&to=zh&appid={1}&salt={2}&sign={3}",txtInput, appid, randomString, sign);byte[] buffer = client.DownloadData(url);            //从指定url加载资源             string result = Encoding.UTF8.GetString(buffer); //将指定字节数组中的所有字节解码为一个字符串TransObj transObj = JsonConvert.DeserializeObject<TransObj>(result);    zh.Text = transObj.trans_result[0].dst;}

对签名进行MD5加密函数如下:

        private String GetMd5Sign(){ASCIIEncoding encoding = new ASCIIEncoding();string sign = null;randomString = GetRandomString();sign = appid + en.Text + randomString + secretKey;byte[] buffer = encoding.GetBytes(sign);           //将指定的字符串中的所有字符编码为一个UTF-8字节序列MD5 md5 = MD5.Create();                            //使用Create() 创建默认实例byte[] hash = md5.ComputeHash(buffer);             //开始加密StringBuilder sb = new StringBuilder();for(int i = 0; i<hash.Length;i++){sb.AppendFormat("{0:x2}",hash[i]);}return sb.ToString();                              //输出MD5加密后的字符串}

获取随机数的函数,虽然在百度开发文档中介绍 salt随机数是整数,但是在整合到请求字符串中,还是会转换为字符串,只不过是一个纯数字字符串罢了,因此下面的函数直接得到一个随机的纯数字字符串。

        private String GetRandomString(){StringBuilder stringBuilder = new StringBuilder();Random random = new Random();for(int i = 0; i<10;i++){stringBuilder.Append(random.Next(0,9));}return stringBuilder.ToString();}

为了方便,程序还增加了一个快捷键功能,按下回车键时,调用按钮响应函数。

        private void TranslateForm_KeyDown(object sender, KeyEventArgs e){if(e.KeyValue == Convert.ToInt32(Keys.Enter)){translate_Click(null,null);}}

以上代码就是所有的代码,虽然代码比较简单,但是我在写代码的过程中仍然遇到了几个问题,因为我的不熟悉。
定义类存放json数据的时候,属性名称一定要和json数据的key名称一致,否则在对json进行反序列化的时候该属性为null。
当然该程序现在仅有的功能就是翻译单词和简单的句子


总结该程序用到的我不熟悉的知识点:

  1. WebClient类。提供用于将数据发送到和接收来自通过 URI 确认的资源数据的常用方法。具体详情参考WebClient类详解
  2. json数据的序列化和反序列化,json数据序列化和反序列化网上有很多种方法,本程序用的是nuget管理器下载安装的第三方类库Netonsoft.Json,在json反序列化用到了泛型方法
    public static T DeserializeObject<T>(string value);
  3. MD5加密算法。C#有一个专门的类库用来实现MD5加密算法的。关于MD5加密,网上已经有很多好的解释,我就不在说了。MD5加密介绍实现
    加密主要由下面几句代码完成。
            //需要加密的字符串sign = appid + en.Text + randomString + secretKey;//将指定的字符串中的所有字符编码为一个UTF-8字节序列byte[] buffer = encoding.GetBytes(sign);  //使用Create() 创建默认实例MD5 md5 = MD5.Create();    //开始加密                       byte[] hash = md5.ComputeHash(buffer);            
  1. 自己都感觉写的好乱,没有把自己的想法清晰的表达出来,唯一的进步或许就是自己已经开始写博客了,相信自己以后会越写条理越清晰。

C#实现百度翻译功能相关推荐

  1. python实现离线翻译_基于python实现百度翻译功能

    运行环境: python 3.6.0 今天处于练习的目的,就用 python 写了一个百度翻译,是如何做到的呢,其实呢就是拿到接口,通过这个接口去访问,不过中间确实是出现了点问题,不过都解决掉了 先晾 ...

  2. python怎么读发音百度翻译-基于python实现百度翻译功能

    运行环境: python 3.6.0 今天处于练习的目的,就用 python 写了一个百度翻译,是如何做到的呢,其实呢就是拿到接口,通过这个接口去访问,不过中间确实是出现了点问题,不过都解决掉了 先晾 ...

  3. 一个简单有趣的爬虫-----爬取百度翻译功能

    首先确定爬取的网址:https://fanyi.baidu.com/sug 我们爬取翻译功能时应对request进行简单伪装,编写headers: base_url = 'https://fanyi. ...

  4. python爬百度翻译-Python爬虫实现百度翻译功能过程详解

    首先,需要简单的了解一下爬虫,尽可能简单快速的上手,其次,需要了解的是百度的API的接口,搞定这个之后,最后,按照官方给出的demo,然后写自己的一个小程序 打开浏览器 F12 打开百度翻译网页源代码 ...

  5. python实现翻译功能_Python爬虫实现百度翻译功能过程详解

    首先,需要简单的了解一下爬虫,尽可能简单快速的上手,其次,需要了解的是百度的API的接口,搞定这个之后,最后,按照官方给出的demo,然后写自己的一个小程序 打开浏览器 F12 打开百度翻译网页源代码 ...

  6. python实现百度翻译功能

    import requests #指定url url='https://fanyi.baidu.com/sug' #进行伪装 headers={"User-Agent":" ...

  7. python翻译器怎么用_Python使用百度翻译开发平台实现英文翻译为中文功能示例

    本文实例讲述了Python使用百度翻译开发平台实现英文翻译为中文功能.分享给大家供大家参考,具体如下: #coding=utf8 import random import requests impor ...

  8. python百度翻译爬虫_Python爬虫教程-05-python爬虫实现百度翻译

    使用python爬虫实现百度翻译功能 python爬虫实现百度翻译: python解释器[模拟浏览器],发送[post请求],传入待[翻译的内容]作为参数,获取[百度翻译的结果] 通过开发者工具,获取 ...

  9. EXCEL+方方格子中的翻译工具+百度翻译=实现批量翻译

    以下方法是我当时找到的一种excel表格单子批量翻译方法,希望能够帮助大家. EXCEL+方方格子翻译工具+百度翻译=实现批量翻译 本方法一共使用2种额外工具实现excel批量单词翻译:1.方方格子工 ...

  10. 手把手教你如何微信公众号开发“翻译功能

    翻译,我想这个功能已经很常见了,而且很多地方都有实现了,另外,不只是翻译功能,还可以是语音翻译等等,这些都是可以实现的,所以,写这篇文章,主要是介绍如何将公开的接口进行实际的使用..授人以鱼不如授人以 ...

最新文章

  1. Case study:数据库网页构建原理和实践
  2. Django1.10文档学习笔记二
  3. bzoj1833: [ZJOI2010]count 数字计数USACO37 Cow Queueing 数数的梦(数位DP)
  4. 暑期训练日志----2018.8.24
  5. VS2013 启用 angularjs 智能提示 Intelligence
  6. 微信翻译团队课余也搞围棋AI:比腾讯绝艺更强,首次亮相就夺冠
  7. 设置PDF文件默认缩放比例
  8. jio tomcat_透过Jio Glass看
  9. 二叉树前序遍历、中序遍历、后序遍历 递归和非递归方式实现
  10. premiere学习笔记01帧定格,时间码,透明视频,调整图层,转场及批量转场,插件安装,音频调整,关键帧,马赛克,蒙版,嵌套序列
  11. 2023年南开大学税务专硕考研上岸前辈备考经验指导
  12. 关于防止出现手机微信投票怎么刷票、微信刷票会不会被发现的技术
  13. 数据科学家:大器晚成,是软件工程师成功的唯一捷径
  14. c语言函数输出怎么让竖的变横的,c语言里面。为什么我的屏幕输出数字都是竖着输出。而不是横着。怎么才能变成横着。我想输出矩阵格式的。...
  15. 风口起落的背后,是6271家创业公司的消亡
  16. iphone原彩显示对眼睛好吗_iPhone12又拉胯?用户吐槽屏幕发黄,到底是为啥?
  17. [角谷猜想 || 冰雹猜想]的一些瞎想
  18. windows服务部署
  19. Java人才,请往这里看过来!
  20. 八行代码实现图像分类-神一样的Mathematica

热门文章

  1. 如何给C盘扩容?不用软件,把其他盘的空间分给C盘即可(图文详解)
  2. 洛谷P【P5708】三角形面积java写法
  3. 智能陈桥五笔输入法 for linux,科技教程:在Linux下安装陈桥五笔输入法
  4. 海底捞激励员工的方法符合哪些激励理论的建议
  5. 什么是CAP理论? cp ap原则的含义
  6. 15软件班安卓课程实训总结
  7. 淘宝运营,新链接和老连接如何做搜索,有什么区别?
  8. 什么情况下,英文单词中的k发音变g,t发音变d,p发音变b
  9. c语言中的16进制坐标计算器,16进制计算器
  10. R语言一步到位求数据的均值,频数,标准差,标准误差