C# dotnetCore调用有道云翻译

using System;
using System.IO;
using System.Net;
using System.Text;
using System.Collections.Generic;
using System.Security.Cryptography;
using Newtonsoft.Json;
using System.Runtime.Serialization;

namespace zhiyun_csharp_demo
{
    public enum LanguageType
    {
        zh,//中文    
        en,//英文    
        ja,//日文    
        ko,//韩文    
        fr,//法文    
        es,//西班牙文
        pt,//葡萄牙文
        it,//意大利文
        ru,//俄文    
        vi,//越南文    
        de,//德文    
        ar,//阿拉伯文
        id,//印尼文    
        auto,//自动识别
    }
    [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; }
    }


    class FanyiV3DemoInternalTest
    {

        public static string appKey = "";
        public static string appSecret = "";
        //官方文档:http://ai.youdao.com/docs/doc-trans-api.s#p08
        public static void Main()
        { 
            var source= "你叫什么名字,我对你一见钟情";
            Console.WriteLine("原文:"+source);
            Console.WriteLine("译文:");
            var names= Enum.GetNames(typeof(LanguageType));
            for (int i = 0; i < names.Length; i++)
            {
                var result = Translate(source, LanguageType.zh, names[i]);
                Console.WriteLine(names[i] + ":" + result);
            }

            Console.ReadKey();
        }
        public static string Translate(string src,LanguageType fromType, string toType) {

            Dictionary<String, String> dic = new Dictionary<String, String>();
            string url = "https://openapi.youdao.com/api";
            string q = src;

            string salt = DateTime.Now.Millisecond.ToString();
            dic.Add("from", fromType.ToString());
            dic.Add("to", toType.ToString());
            dic.Add("signType", "v3");
            TimeSpan ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc));
            long millis = (long)ts.TotalMilliseconds;
            string curtime = Convert.ToString(millis / 1000);
            dic.Add("curtime", curtime);
            string signStr = appKey + Truncate(q) + salt + curtime + appSecret; ;
            string sign = ComputeHash(signStr, new SHA256CryptoServiceProvider());
            dic.Add("q", System.Web.HttpUtility.UrlEncode(q));
            dic.Add("appKey", appKey);
            dic.Add("salt", salt);
            dic.Add("sign", sign);

            string resutl = Post(url, dic);
            if (resutl != null)
            {
                var youDaoTranslationResponse = JsonConvert.DeserializeObject<YouDaoTranslationResponse>(resutl);
                
                return youDaoTranslationResponse.FirstTranslation[0];
            }
            return null;
        }
        protected static string ComputeHash(string input, HashAlgorithm algorithm)
        {
            Byte[] inputBytes = Encoding.UTF8.GetBytes(input);
            Byte[] hashedBytes = algorithm.ComputeHash(inputBytes);
            return BitConverter.ToString(hashedBytes).Replace("-", "");
        }

        protected static string Post(string url, Dictionary<String, String> dic)
        {
            string result = "";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            StringBuilder builder = new StringBuilder();
            int i = 0;
            foreach (var item in dic)
            {
                if (i > 0)
                    builder.Append("&");
                builder.AppendFormat("{0}={1}", item.Key, item.Value);
                i++;
            }
            byte[] data = Encoding.UTF8.GetBytes(builder.ToString());
            req.ContentLength = data.Length;
            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();
            }
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            if (resp.ContentType.ToLower().Equals("audio/mp3"))
            {
                SaveBinaryFile(resp, "合成的音频存储路径");
            }
            else
            {
                Stream stream = resp.GetResponseStream();
                using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                {
                    result = reader.ReadToEnd();
                }
              //  Console.WriteLine(result);
                return result;
            }
            return null;
        }

        protected static string Truncate(string q)
        {
            if (q == null)
            {
                return null;
            }
            int len = q.Length;
            return len <= 20 ? q : (q.Substring(0, 10) + len + q.Substring(len - 10, 10));
        }

        private static bool SaveBinaryFile(WebResponse response, string FileName)
        {
            string FilePath = FileName + DateTime.Now.Millisecond.ToString() + ".mp3";
            bool Value = true;
            byte[] buffer = new byte[1024];

            try
            {
                if (File.Exists(FilePath))
                    File.Delete(FilePath);
                Stream outStream = System.IO.File.Create(FilePath);
                Stream inStream = response.GetResponseStream();

                int l;
                do
                {
                    l = inStream.Read(buffer, 0, buffer.Length);
                    if (l > 0)
                        outStream.Write(buffer, 0, l);
                }
                while (l > 0);

                outStream.Close();
                inStream.Close();
            }
            catch
            {
                Value = false;
            }
            return Value;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
有道离线翻译库是指有道提供的离线翻译SDK,它可以实现在C#调用有道离线翻译功能。以下是一个简单的示例代码,演示如何使用有道离线翻译库实现翻译功能: 首先,你需要从有道官网上下载并安装有道离线翻译SDK。 然后,你需要在C#项目中引用有道离线翻译库的DLL文件。 ```csharp using System; using Youdao.SDK; using Youdao.SDK.Common; using Youdao.SDK.Configs; class Program { static void Main(string[] args) { string appId = "<Your_App_Id>"; string appKey = "<Your_App_Key>"; string textToTranslate = "Hello, how are you?"; var config = new YoudaoConfig(appId, appKey); var translator = new Translator(config); var result = translator.Translate(textToTranslate, "auto", "zh-CHS"); Console.WriteLine($"Original: {textToTranslate}"); Console.WriteLine($"Translated: {result.Translation}"); } } ``` 在上面的示例代码中,你需要将 `<Your_App_Id>` 和 `<Your_App_Key>` 替换为你在有道申请的应用ID和应用密钥。然后,你可以创建一个`YoudaoConfig`对象,并将其传递给`Translator`类的构造函数。接下来,你可以使用`Translate`方法进行翻译,指定要翻译的文本、源语言和目标语言。最后,你可以打印出翻译结果。 请确保你已经获得了有效的应用ID和应用密钥,并且已经将其替换到代码中。同时,也请确保你已经正确安装了有道离线翻译SDK,并在项目中引用了相应的DLL文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值