C# 有道API翻译 查询单词详细信息
有道云官方文档
有道云翻译API简介:http://ai.youdao.com/docs/doc-trans-api.s#p01
有道云C#Demo : http://ai.youdao.com/docs/doc-trans-api.s#p08
查询单词信息
在有道云的Demo中,已经很完整的给出了相应的代码~
但是针对是的英-汉等翻译,如何只查询单个单词的详细信息,包含单词的翻译/音标/释义等?例如下图示例信息:

下面修改后封装的查询单词详细信息服务(仅供参考):
/// <summary>
/// 有道词典API
/// </summary>
internal class YouDaoApiService
{
const string AppKey = "131b76a4ee1ecd13";//AppKey和AppSecret是本人@Winter申请的账号,仅供测试使用
const string LangEn = "en";
const string AppSecret = "KX9hLrgSMhfKkvIqS6nhwtwMcRymJqEA"; public static async Task<YouDaoTranslationResponse> GetTranslatioAsync(string queryText, string from = LangEn, string to = LangEn)
{
var requestUrl = GetRequestUrl(queryText, from, to); WebRequest translationWebRequest = WebRequest.Create(requestUrl); var response = await translationWebRequest.GetResponseAsync(); using (Stream stream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(stream ?? throw new InvalidOperationException("有道Api查询出错!"), Encoding.GetEncoding("utf-8")))
{
string result = reader.ReadToEnd();
var youDaoTranslationResponse = JsonConvert.DeserializeObject<YouDaoTranslationResponse>(result); return youDaoTranslationResponse;
}
}
} private static string GetRequestUrl(string queryText, string from, string to)
{
string salt = DateTime.Now.Millisecond.ToString(); MD5 md5 = new MD5CryptoServiceProvider();
string md5Str = AppKey + queryText + salt + AppSecret;
byte[] output = md5.ComputeHash(Encoding.UTF8.GetBytes(md5Str));
string sign = BitConverter.ToString(output).Replace("-", ""); var requestUrl = string.Format(
"http://openapi.youdao.com/api?appKey={0}&q={1}&from={2}&to={3}&sign={4}&salt={5}",
AppKey,
HttpUtility.UrlDecode(queryText, System.Text.Encoding.GetEncoding("UTF-8")),
from, to, sign, salt); return requestUrl;
}
}
注:值得一提的是,查询单词信息,en->en路径有道提供的数据不完整,会返回301错误码。联系有道开发后,提供的方案是auto->zhs。
序列化解析的数据类:
[DataContract]
public class YouDaoTranslationResponse
{
[DataMember(Name = "errorCode")]
public string ErrorCode { get; set; } [DataMember(Name = "query")]
public string QueryText { get; set; } [DataMember(Name = "speakUrl")]
public string InputSpeakUrl { get; set; } [DataMember(Name = "tSpeakUrl")]
public string TranslationSpeakUrl { get; set; } /// <summary>
/// 首选翻译
/// </summary>
[DataMember(Name = "translation")]
public List<string> FirstTranslation { get; set; } /// <summary>
/// 基本释义
/// </summary>
[DataMember(Name = "basic")]
public TranslationBasicData BasicTranslation { get; set; } ///// <summary>
///// 网络释义,该结果不一定存在,暂时不使用
///// </summary>
//[DataMember(Name = "web")]
//public TranslationWebData WebTranslation { get; set; }
} /// <summary>
/// 基本释义
/// </summary>
[DataContract]
public class TranslationBasicData
{
[DataMember(Name = "phonetic")]
public string Phonetic { get; set; } /// <summary>
/// 英式发音
/// </summary>
[DataMember(Name = "uk-phonetic")]
public string UkPhonetic { get; set; } /// <summary>
/// 美式发音
/// </summary>
[DataMember(Name = "us-phonetic")]
public string UsPhonetic { get; set; } /// <summary>
/// 翻译
/// </summary>
[DataMember(Name = "explains")]
public List<string> Explains { get; set; }
} /// <summary>
/// 网络释义
/// </summary>
[DataContract]
public class TranslationWebData
{
[DataMember(Name = "key")]
public string Key { get; set; } [DataMember(Name = "value")]
public List<string> Explains { get; set; }
}
C# 有道API翻译 查询单词详细信息的更多相关文章
- 【转】android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作。 注
使用Android studio打包应用程序出现如下错误: 注: 某些输入文件使用或覆盖了已过时的 API. 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译. 注: 某些 ...
- C++ 通过WIN32 API 获取逻辑磁盘详细信息
众所周知,在微软的操作系统下编写应用程序,最主要的还是通过windows所提供的api函数来实现各种操作的,这些函数通常是可以直接使用的,只要包含windows.h这个头文件, 下载源文件 今天我们主 ...
- C++通过WIN32 API获取逻辑磁盘详细信息
众所周知,在微软的操作系统下编写应用程序,最主要的还是通过windows所提供的api函数来实现各种操作的,这些函数通常是可以直接使用的,只要包含windows.h这个头文件. 今天我们主要介绍的 ...
- 简单实现Python调用有道API接口(最新的)
# ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...
- Android Studio编译OsmAnd出现警告:GeoPointParserUtil.java使用或覆盖了已过时的 API。有关详细信息请使用-Xlint:deprecation重新编译
[背景] 之前折腾: [记录]Android Studio中导入OsmAnd并编译 期间,遇到了编译警告: 1 2 3 4 5 :OsmAnd-java:compileJava 注: E:\crifa ...
- GraphQL漏洞案例之获取Facebook任意用户的朋友列表和部分支付卡详细信息
Facebook有一个GraphQL endpoint,只能由Facebook的某些应用程序使用.需要用户(或页面)access_token来查询GraphQL endpoint. 这里可以将Face ...
- SQL Server(MSSQLSERVER) 请求失败或服务未及时响应,有关详细信息,请参见事件日志或其他的适用的错误日志。
转自:https://www.fengjunzi.com/blog-25573.html 问题 有时候sqlserver无法启动了,原因是mssqlserver服务没有启动,当你手动启动时,又出现服务 ...
- Python 批量翻译 使用有道api;
妹子是做翻译相关的,遇到个问题,要求得到句子中的所有单词的 音标; 有道翻译只能对单个单词翻译音标,不能对多个单词或者句子段落翻译音标; 手工一个一个翻的话那就要累死人了.....于是就让我写个翻译音 ...
- Python汉英/英汉翻译(百度API/有道API)
一.百度API实现 Step1:申请API Key 以前用过BAE,已经有了Api Key,没有的可以去申请 Step2:挺简单,直接看实现的代码吧 ```python #coding:utf-8 i ...
随机推荐
- Linux上制作Window启动盘
Linux上制作Window启动盘 注意: U盘在Linux中的标签(依具体情况而定:执行df查看) U盘 ----- /dev/sdb4 格式化U盘 建立U盘的启动分区 安装关键工具 ms-sys ...
- Spring Tool Suite(STS)加速
Java开发首选技术是Spring,使用Spring技术首选的开发工具是STS,STS有许多加速spring开发的提示和快捷方式,并将spring的最新技术通过STS快速简单的传递给用户. 但是STS ...
- 2016 Java程序员的年终总结(转)
2016 Java程序员的年终总结 技术积累 (1)代码规范 1.1.1.通常的模块分布:一般如果你要实现一个web 应用,你从后台将数据展示到前端页面,在一个比较大的公司,你少不了跟其他项目有交集( ...
- [RxJS] Split an RxJS Observable into groups with groupBy
groupBy() is another RxJS operator to create higher order observables. In this lesson we will learn ...
- eclipse 远程debug tomcat web项目
1.首先须要在linux系统tomcat/bin文件夹下配置catalina.sh这个文件里添加: CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=d ...
- oracle dual表
dual是个虚表,其仅仅有一列. 当查询时间或者日期这些对象的时候就须要使用这个表. 比如: select sysdate from dual; 由于在oracle其中,查询语句必需要有keyword ...
- 具体分析contrex-A9的汇编代码__switch_to(进程切换)
//函数原型:版本号linux-3.0.8 struct task_struct *__switch_to(structtask_struct *, struct thread_info *, str ...
- 恩布900手机客服,安卓版本号Entboost Android 1.0 正式公布
恩布900手机客服,安卓版本号Entboost Android 1.0正式公布,支持一行代码在安卓手机实如今线客服的功能,支持文本.表情,图片,语音和离线消息等. ENTBOOST是跨平台.跨应用的实 ...
- WPF之神奇的资源
原文:WPF之神奇的资源 WPF中的资源有两种,一种称为"程序集资源"(assembly resource),另一种称为"对象资源"(object resour ...
- freemarker自己定义标签(一)
freemarker自己定义标签 1.自己定义标签说明 宏变量存储模板片段能够被用作自己定义指令macro 2.演示样例说明 <html> <head> <meta ht ...