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 ...
随机推荐
- java 返回图片到页面
@RequestMapping(value = "/image/get") public void getImage(HttpServletRequest request, ...
- LUA凝视语法
server端代码已经完毕,client正在优化.游戏不久将上线,近期没事做,老大要我開始学习project Anarchy了.里面代码是比較偏爱的C++,包括lua,暂没学过lua.看了下LUA代码 ...
- Need ffmpeg exe. You can download it by calling: imageio.plugins.ffmpeg.download()
该问题 Need ffmpeg exe. You can download it by calling: imageio.plugins.ffmpeg.download()往往出现在在调用 impor ...
- stm32的pwm波
- 数据类型总结——String(字符串类型)
相关文章 简书原文:https://www.jianshu.com/p/546a755c3eb6 数据类型总结——概述:https://www.cnblogs.com/shcrk/p/9266015. ...
- [AngularFire2] Building an Authentication Observable Data Service
After successfully login, we want something help to check whether user has already login or not. And ...
- SocketChannel API用法
java.nio.channels 类 SocketChannel java.lang.Object java.nio.channels.spi.AbstractInterruptibleChanne ...
- 【C#】万事开头难(二)<机房重构>
前言 机房将要进行完了,之所以仍然使用这个题目,是由于我想告诉自己.无论面对多么未知的事物.不要害怕,去做就好.在这么多天的机房重构中,发现了好多问题,也攻克了好多问题,今天,就把我解决的问题分享给大 ...
- jquery-6 jquery属性选择器
jquery-6 jquery属性选择器 一.总结 一句话总结:jquery操作就是选择器加jquery对象的各种方法. 1.大量操作样式用什么方式? 大批量样式通过加类和减类完成 2.jquery中 ...
- 【14.06%】【hdu 5904】LCIS
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission ...