Exemplo n.º 1
0
        public List <Result> Query(Query query)
        {
            List <Result> results = new List <Result>();
            const string  ico     = "Images\\youdao.ico";

            if (query.Search.Length == 0)
            {
                results.Add(new Result
                {
                    Title    = "开始有道中英互译",
                    SubTitle = "基于有道网页 API",
                    IcoPath  = ico
                });
                return(results);
            }

            try
            {
                StreamReader  sr = File.OpenText("Plugins/Wox.Plugin.Youdao/key.json");
                StringBuilder jsonArrayText_tmp = new StringBuilder();
                string        input             = null;
                while ((input = sr.ReadLine()) != null)
                {
                    jsonArrayText_tmp.Append(input);
                }
                sr.Close();
                string jsonArrayText = jsonArrayText_tmp.Replace(" ", "").ToString();

                JsonTextReader reader     = new JsonTextReader(new StringReader(jsonArrayText));
                JsonSerializer serializer = new JsonSerializer();
                YouDaoKey      youdaokey  = serializer.Deserialize <YouDaoKey>(reader);
                if (youdaokey != null)
                {
                    Key     = youdaokey.key;
                    Keyfrom = youdaokey.keyfrom;
                    Log.Debug("get key from key.json keyfrom=" + Keyfrom + " key=" + Key);
                }
            }
            catch {
            }

            TranslateUrl = string.Format(TranslateUrlFormat, Keyfrom, Key);

            Log.Info(TranslateUrl + query.Search);

            var             json = Http.Get(TranslateUrl + query.Search).Result;
            TranslateResult o    = JsonConvert.DeserializeObject <TranslateResult>(json);

            if (o.errorCode == 0)
            {
                if (o.translation != null)
                {
                    var translation = string.Join(", ", o.translation.ToArray());
                    var title       = translation;
                    if (o.basic?.phonetic != null)
                    {
                        title += " [" + o.basic.phonetic + "]";
                    }
                    results.Add(new Result
                    {
                        Title    = title,
                        SubTitle = "翻译结果",
                        IcoPath  = ico,
                        Action   = this.copyToClipboardFunc(translation)
                    });
                }

                if (o.basic?.explains != null)
                {
                    var explantion = string.Join(",", o.basic.explains.ToArray());
                    results.Add(new Result
                    {
                        Title    = explantion,
                        SubTitle = "简明释义",
                        IcoPath  = ico,
                        Action   = this.copyToClipboardFunc(explantion)
                    });
                }

                if (o.web != null)
                {
                    foreach (WebTranslation t in o.web)
                    {
                        var translation = string.Join(",", t.value.ToArray());
                        results.Add(new Result
                        {
                            Title    = translation,
                            SubTitle = "网络释义:" + t.key,
                            IcoPath  = ico,
                            Action   = this.copyToClipboardFunc(translation)
                        });
                    }
                }
            }
            else
            {
                string error = string.Empty;
                switch (o.errorCode)
                {
                case 20:
                    error = "要翻译的文本过长";
                    break;

                case 30:
                    error = "无法进行有效的翻译";
                    break;

                case 40:
                    error = "不支持的语言类型";
                    break;

                case 50:
                    error = "无效的key";
                    break;
                }

                results.Add(new Result
                {
                    Title   = error,
                    IcoPath = ico
                });
            }

            return(results);
        }
Exemplo n.º 2
0
        public List <Result> Query(Query query)
        {
            List <Result> results = new List <Result>();
            const string  ico     = "Images\\youdao.ico";

            if (query.Search.Length == 0)
            {
                results.Add(new Result
                {
                    Title    = "开始有道中英互译",
                    SubTitle = "基于有道网页 API",
                    IcoPath  = ico
                });
                return(results);
            }
            var             json = Http.Get(TranslateUrl + query.Search).Result;
            TranslateResult o    = JsonConvert.DeserializeObject <TranslateResult>(json);

            if (o.errorCode == 0)
            {
                if (o.translation != null)
                {
                    var translation = string.Join(", ", o.translation.ToArray());
                    var title       = translation;
                    if (o.basic?.phonetic != null)
                    {
                        title += " [" + o.basic.phonetic + "]";
                    }
                    results.Add(new Result
                    {
                        Title    = title,
                        SubTitle = "翻译结果",
                        IcoPath  = ico,
                        Action   = this.copyToClipboardFunc(translation)
                    });
                }

                if (o.basic?.explains != null)
                {
                    var explantion = string.Join(",", o.basic.explains.ToArray());
                    results.Add(new Result
                    {
                        Title    = explantion,
                        SubTitle = "简明释义",
                        IcoPath  = ico,
                        Action   = this.copyToClipboardFunc(explantion)
                    });
                }

                if (o.web != null)
                {
                    foreach (WebTranslation t in o.web)
                    {
                        var translation = string.Join(",", t.value.ToArray());
                        results.Add(new Result
                        {
                            Title    = translation,
                            SubTitle = "网络释义:" + t.key,
                            IcoPath  = ico,
                            Action   = this.copyToClipboardFunc(translation)
                        });
                    }
                }
            }
            else
            {
                string error = string.Empty;
                switch (o.errorCode)
                {
                case 20:
                    error = "要翻译的文本过长";
                    break;

                case 30:
                    error = "无法进行有效的翻译";
                    break;

                case 40:
                    error = "不支持的语言类型";
                    break;

                case 50:
                    error = "无效的key";
                    break;
                }

                results.Add(new Result
                {
                    Title   = error,
                    IcoPath = ico
                });
            }

            return(results);
        }
Exemplo n.º 3
0
        public List <Result> Query(Query query)
        {
            List <Result> results = new List <Result>();
            const string  ico     = "Images\\youdao.ico";

            if (string.IsNullOrWhiteSpace(_settings.AppKey) || string.IsNullOrWhiteSpace(_settings.SecretKey))
            {
                results.Add(new Result()
                {
                    Title    = "请设置有道翻译API Key",
                    SubTitle = "申请Key: http://ai.youdao.com/",
                    IcoPath  = ico
                });
                return(results);
            }
            if (query.Search.Length == 0)
            {
                results.Add(new Result
                {
                    Title    = "开始有道中英互译",
                    SubTitle = "基于有道智云 API",
                    IcoPath  = ico
                });
                return(results);
            }
            string q      = query.Search;
            string from   = "auto";
            string to     = "auto";
            string appKey = _settings.AppKey;
            string salt   = "6";
            string sign   = CalculateMD5Hash(appKey + q + salt + _settings.SecretKey);
            string url    = $"{youdaoApiUrl}?q={q}&from={from}&to={to}&appKey={appKey}&salt={salt}&sign={sign}";

            var             json = Http.Get(url).Result;
            TranslateResult o    = JsonConvert.DeserializeObject <TranslateResult>(json);

            if (o.errorCode == 0)
            {
                if (o.translation != null)
                {
                    var translation = string.Join(", ", o.translation.ToArray());
                    var title       = translation;
                    if (o.basic?.phonetic != null)
                    {
                        title += " [" + o.basic.phonetic + "]";
                    }
                    results.Add(new Result
                    {
                        Title    = title,
                        SubTitle = "翻译结果",
                        IcoPath  = ico,
                        Action   = this.copyToClipboardFunc(translation)
                    });
                }

                if (o.basic?.explains != null)
                {
                    var explantion = string.Join(",", o.basic.explains.ToArray());
                    results.Add(new Result
                    {
                        Title    = explantion,
                        SubTitle = "简明释义",
                        IcoPath  = ico,
                        Action   = this.copyToClipboardFunc(explantion)
                    });
                }

                if (o.web != null)
                {
                    foreach (WebTranslation t in o.web)
                    {
                        var translation = string.Join(",", t.value.ToArray());
                        results.Add(new Result
                        {
                            Title    = translation,
                            SubTitle = "网络释义:" + t.key,
                            IcoPath  = ico,
                            Action   = this.copyToClipboardFunc(translation)
                        });
                    }
                }
            }
            else
            {
                string error = string.Empty;
                switch (o.errorCode)
                {
                case 20:
                    error = "要翻译的文本过长";
                    break;

                case 30:
                    error = "无法进行有效的翻译";
                    break;

                case 40:
                    error = "不支持的语言类型";
                    break;

                case 50:
                    error = "无效的key";
                    break;

                case 101:
                    error = "缺少必填的参数,出现这个情况还可能是et的值和实际加密方式不对应";
                    break;

                case 102:
                    error = "不支持的语言类型";
                    break;

                case 103:
                    error = "翻译文本过长";
                    break;

                case 104:
                    error = "不支持的API类型";
                    break;

                case 105:
                    error = "不支持的签名类型";
                    break;

                case 106:
                    error = "不支持的响应类型";
                    break;

                case 107:
                    error = "不支持的传输加密类型";
                    break;

                case 108:
                    error = "appKey无效";
                    break;

                case 109:
                    error = "batchLog格式不正确";
                    break;

                case 110:
                    error = "无相关服务的有效实例";
                    break;

                case 111:
                    error = "开发者账号无效,可能是账号为欠费状态";
                    break;

                case 201:
                    error = "解密失败,可能为DES,BASE64,URLDecode的错误";
                    break;

                case 202:
                    error = "签名检验失败";
                    break;

                case 203:
                    error = "访问IP地址不在可访问IP列表";
                    break;

                case 301:
                    error = "辞典查询失败";
                    break;

                case 302:
                    error = "翻译查询失败";
                    break;

                case 303:
                    error = "服务端的其它异常";
                    break;

                case 401:
                    error = "账户已经欠费停";
                    break;

                default:
                    error = "未知错误, errorCode = " + o.errorCode;
                    break;
                }

                results.Add(new Result
                {
                    Title   = error,
                    IcoPath = ico
                });
            }

            return(results);
        }