C#编写的翻译软件返回结果是缓存的

BUG反馈 · 1086 次浏览
用户3016568068... 创建于 2021-02-26 14:41

1.翻译软件基本作用:

英语单词,单行多行显示,全部选中调用百度翻译接口,返回结果,直接粘贴显示到当前编辑器,比如txt,印象笔记。

 

2.百度API

只能每次请求一个单词返回一个翻译结果。所以需要拆分选中的多行值(多行单词)在代码里面拆分查询,存储每次的结果然后拼接。

 

3.目前遇到的问题

查询单词A,返回B单词,B单词是曾经查询过的,仿佛就是从系统缓存里面取出来的一样。已经排除api问题, 每次用电脑管家清除垃圾 就恢复正常。

例:

 正常情况下

查询:book 

返回:book n. 书 (返回结果是【book】 和 【n. 书】拼接的 )

 

错误情况下

查询:book

返回:take v. 拿。(曾经在查询book之前查过take)

 

猜测可能性,quicker 的c#模块是解释运行,缺少清除缓存垃圾管理这一的操作。代码里面循环导致此类问题出现。

各位大神,这个应该怎么解决?

 

 


回复内容
CL 2021-02-26 15:20
#1

c#代码生成的assembly会缓存,但是不应该影响结果,因为查的词是变量,动态的。

可能需要原始代码才能判断,另外也可以试试在http请求中增加额外的随机参数避免http被缓存。

用户3016568068... 2021-02-26 15:52 :

大神 代码在楼下 帮我看看,输入框代码编辑器无法格式化,麻烦了。

用户3016568068... 2021-02-26 16:01 :
每次请求的英语单词这个参数都是不一样的,代替了随机参数的功能。
用户3016568068... 2021-02-26 15:49
#2
public static void Exec(Quicker.Public.IStepContext context){
            var oldValue = context.GetVarValue("text");  // 读取动作里的变量值
            //MessageBox.Show(oldValue as string);
            //context.SetVarValue("varName", "从脚本输出的内容。"); // 向变量里输出值
        string reust = "";
        string appid = context.GetVarValue("appid").ToString();
            string miyue = context.GetVarValue("miyue").ToString();
            string query = context.GetVarValue("query").ToString();
            string salt = context.GetVarValue("salt").ToString();
            query = Regex.Replace(query, @" ", "");
            //按照此要求分割字符串
            char[] chspilt = new char[] { '\r', '\n' };
//获取去掉空元素之后的数组
            string[] arr2 = query.Split(chspilt, StringSplitOptions.RemoveEmptyEntries);
            foreach (var item in arr2)
            {
               
               reust += aciyi(appid, miyue, item.ToString(), salt) + "\r\n";
            }
            context.SetVarValue("text1", reust);
            //MessageBox.Show(reust);
        }
        
          //返回单个词意
        public static string aciyi(string appid,string miyue,string query,string salt) {
  
            string sign = Md5(appid + query + salt + miyue); ;
            string url = "http://api.fanyi.baidu.com/api/trans/vip/translate?q=" + query + "&from=en&to=zh&appid=" + appid + "&salt=" + salt + "&sign=" + sign;
         
            string abc = sendPost(url);
//MessageBox.Show(abc);

            JObject jo3 = (JObject)JsonConvert.DeserializeObject(abc.ToString());
            string test = jo3["trans_result"][0]["dict"].ToString();
            JObject jo2 = (JObject)JsonConvert.DeserializeObject(test.ToString());
           
      
            JArray parcelNumbersArry = JArray.Parse(jo2["word_result"]["simple_means"]["symbols"][0]["parts"].ToString());
            string yuanString = jo2["word_result"]["simple_means"]["word_name"].ToString();



            int partsNum = 0;
            string reust="";
            foreach (var item in parcelNumbersArry)
            {
                partsNum++;
            }
            if (partsNum <= 1)
            {

                reust = yuanString + " " + qustring((JObject)parcelNumbersArry[0]);

            }
            else
            {

                for (int i = 0; i < partsNum; i++)
                {
                    reust += qustring((JObject)parcelNumbersArry[i]) + "\r\n";


                }
                reust = yuanString + " " + reust;

            }
           
            return reust;
        }

        public static string qustring(JObject a) {
            string reust = "";
            string cixing = "";
            try
            {
                cixing = a["part"].ToString();
            }
            catch (Exception)
            {
                cixing = "(百度翻译无词性)";
              //  throw;
            }
            
            JArray yisi = JArray.Parse(a["means"].ToString());
            foreach (var item in yisi)
            {
                reust += item + ";";
            }
            reust = cixing + " " + reust;

            return reust;


        

        }
CL 最后更新于 2021-02-26 16:00
CL 2021-02-26 16:07 :

看不出有啥问题(也看不太明白😂)。 直接用MessageBox显示返回的所有内容,就不对嘛?

用户3016568068... 2021-02-26 16:37 :
过程是没问题的,问题在于返回的内容,如果我一次查五个单词,可能其中一个返回给我的就像上面我说的那个错误一样。
用户3016568068... 回复 CL 2021-02-26 16:38 :

过程是没问题的,问题在于返回的内容,如果我一次查五个单词,可能其中一个返回给我的就像上面我说的那个错误一样。

用户3016568068... 2021-02-27 09:46
#3

问题已解决,给api  url 加个随机数或者时间戳参数,感谢CL提醒。

用户3016568068... 最后更新于 2021-02-27 09:50
回复主贴