原文: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翻译 查询单词详细信息的更多相关文章

  1. 【转】android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作。 注

    使用Android studio打包应用程序出现如下错误: 注: 某些输入文件使用或覆盖了已过时的 API. 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译. 注: 某些 ...

  2. C++ 通过WIN32 API 获取逻辑磁盘详细信息

    众所周知,在微软的操作系统下编写应用程序,最主要的还是通过windows所提供的api函数来实现各种操作的,这些函数通常是可以直接使用的,只要包含windows.h这个头文件, 下载源文件 今天我们主 ...

  3. C++通过WIN32 API获取逻辑磁盘详细信息

      众所周知,在微软的操作系统下编写应用程序,最主要的还是通过windows所提供的api函数来实现各种操作的,这些函数通常是可以直接使用的,只要包含windows.h这个头文件. 今天我们主要介绍的 ...

  4. 简单实现Python调用有道API接口(最新的)

    # ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...

  5. Android Studio编译OsmAnd出现警告:GeoPointParserUtil.java使用或覆盖了已过时的 API。有关详细信息请使用-Xlint:deprecation重新编译

    [背景] 之前折腾: [记录]Android Studio中导入OsmAnd并编译 期间,遇到了编译警告: 1 2 3 4 5 :OsmAnd-java:compileJava 注: E:\crifa ...

  6. GraphQL漏洞案例之获取Facebook任意用户的朋友列表和部分支付卡详细信息

    Facebook有一个GraphQL endpoint,只能由Facebook的某些应用程序使用.需要用户(或页面)access_token来查询GraphQL endpoint. 这里可以将Face ...

  7. SQL Server(MSSQLSERVER) 请求失败或服务未及时响应,有关详细信息,请参见事件日志或其他的适用的错误日志。

    转自:https://www.fengjunzi.com/blog-25573.html 问题 有时候sqlserver无法启动了,原因是mssqlserver服务没有启动,当你手动启动时,又出现服务 ...

  8. Python 批量翻译 使用有道api;

    妹子是做翻译相关的,遇到个问题,要求得到句子中的所有单词的 音标; 有道翻译只能对单个单词翻译音标,不能对多个单词或者句子段落翻译音标; 手工一个一个翻的话那就要累死人了.....于是就让我写个翻译音 ...

  9. Python汉英/英汉翻译(百度API/有道API)

    一.百度API实现 Step1:申请API Key 以前用过BAE,已经有了Api Key,没有的可以去申请 Step2:挺简单,直接看实现的代码吧 ```python #coding:utf-8 i ...

随机推荐

  1. redis文档翻译_key设置过期时间

    Available since 1.0.0.    使用開始版本号1.01 Time complexity: O(1)  时间复杂度O(1) 出处:http://blog.csdn.net/colum ...

  2. http各种状态码具体解释

    1XX (暂时响应)   100(继续) 请求者应当继续提出请求.   101(切换协议)请求者已要求server切换协议,server已确认并准备切换 2XX(成功)    ·200(成功) ser ...

  3. Spring MVC学习:配置简解

    http://blog.csdn.net/heirenheiren/article/details/41485485

  4. [Angular] Implementing a ControlValueAccessor

    So when you need to create a ControlValueAccessor? When you want to use a custom component as form c ...

  5. SYSTEMTIME 与 time_t 之间的转换,计算2个SYSTEMTIME的时间差

    time_t systemtime_to_time_t(const SYSTEMTIME& st) { struct tm gm = {st.wSecond, st.wMinute, st.w ...

  6. Oracle中的sid与servicename

    在平时自己创建库的时候,习惯的将sid与servicename取同名,但是在实际生产中这两个名字很有可能不一致,再使用jdbc连接数据库的url时就需要注意区分了,否则创建不了数据库连接 //serv ...

  7. IDEA 多线程Debug

    一.问题描述 在idea中的进行调试时,代码中有多线程,想对线程中的代码进行跟踪,代码如下: for (int i = 0; i < 5; i++) { final int index = i; ...

  8. js进阶 9-12 js如何实现级联菜单 (章节测试)

    js进阶 9-12  js如何实现级联菜单 (章节测试) 一.总结 一句话总结: 1.js如何实现级联菜单 ? 二维数组,以第一级菜单的文本值做键,以对应的二级菜单选项的文本做值 2.用哪个属性可以获 ...

  9. python 单向循环列表

    # -*- coding: utf-8 -*- # @author: Tele # @Time : 2019/04/23 下午 6:54 # 单向循环列表 # 单向循环列表与单向列表的不同之处在于最后 ...

  10. CentOS使用(一)-----各种环境搭建

    使用virtual box虚拟机,镜像为CentOS-6.9-x86_64-LiveDVD.iso,使用SecureCRT远程连接. 安装CentOS系统之后,选择host-only连接模式,修改虚拟 ...