之前做過一個桌面翻譯工具,桌面每日一句--桌面翻譯工具(有道翻譯,微軟翻譯,Google翻譯) 獲取金山每日一句,目前因為 金山每日一句頁面改變導致每日一句功能失敗,不過這工具自己用得最多的還是翻譯功能,乾脆把翻譯獨立出來。 另外,最近在逛知乎發現有人分享了必應詞典的第三方api,所以順道拿來完善, ...
之前做過一個桌面翻譯工具,桌面每日一句--桌面翻譯工具(有道翻譯,微軟翻譯,Google翻譯) 獲取金山每日一句,目前因為 金山每日一句頁面改變導致每日一句功能失敗,不過這工具自己用得最多的還是翻譯功能,乾脆把翻譯獨立出來。
另外,最近在逛知乎發現有人分享了必應詞典的第三方api,所以順道拿來完善,api作者分享頁面:https://zhuanlan.zhihu.com/p/22421123
這個必應詞典用起來很簡單直接訪問地址http://xtk.azurewebsites.net/BingDictService.aspx?Word=x x是待翻譯的詞語,返回json,最後就是解析json就行,解析jason用的是開源庫:http://dynamicjson.codeplex.com/
直接貼代碼:
1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Net; 6 using System.Text; 7 using System.Threading.Tasks; 8 using System.Web; 9 using Codeplex.Data; 10 11 namespace BingTranslate 12 { 13 public class BingDictApi 14 { 15 16 17 private static string GetSource(string PageUrl) 18 { 19 try 20 { 21 WebRequest request = WebRequest.Create(PageUrl); //WebRequest.Create方法,返回WebRequest的子類HttpWebRequest 22 request.Timeout = 5000;//設置超時等待 23 WebResponse response = request.GetResponse(); //WebRequest.GetResponse方法,返回對 Internet 請求的響應 24 Stream resStream = response.GetResponseStream(); //WebResponse.GetResponseStream 方法,從 Internet 資源返回數據流。 25 Encoding enc = Encoding.GetEncoding("utf-8"); // 如果是亂碼就改成 utf-8 / GB2312 26 StreamReader sr = new StreamReader(resStream, enc); //命名空間:System.IO。 StreamReader 類實現一個 TextReader (TextReader類,表示可讀取連續字元系列的讀取器),使其以一種特定的編碼從位元組流中讀取字元。 27 string source = sr.ReadToEnd(); //輸出(HTML代碼),ContentHtml為Multiline模式的TextBox控制項 28 resStream.Close(); 29 //Console.Write(source); 30 sr.Close(); 31 return source; 32 } 33 catch (Exception ex) 34 { 35 36 Console.WriteLine(ex.Message); 37 return ""; 38 } 39 40 } 41 42 43 public BingDictobject Translate(string word) 44 { 45 BingDictobject dictobject = new BingDictobject(); 46 string encodedStr = HttpUtility.UrlEncode(word); 47 string url = string.Format("http://xtk.azurewebsites.net/BingDictService.aspx?Word={0}", encodedStr); 48 string text = GetSource(url); 49 if (text.Contains("An error occurs.")) 50 { 51 return null; 52 } 53 var json = DynamicJson.Parse(text); 54 dictobject.word = json.word; 55 if (json.pronunciation())//判斷屬性是否存在 56 { 57 var jsPronunciation = json.pronunciation; 58 if (jsPronunciation!= null) 59 { 60 Pronunciation pronunciation = new Pronunciation(); 61 pronunciation.AmE = jsPronunciation.AmE; 62 pronunciation.AmEmp3 = jsPronunciation.AmEmp3; 63 pronunciation.BrE = jsPronunciation.BrE; 64 pronunciation.BrEmp3 = jsPronunciation.BrEmp3; 65 dictobject.pronunciation = pronunciation; 66 } 67 68 } 69 if (json.defs()) 70 { 71 var jsdef = json.defs; 72 if (jsdef!= null) 73 { 74 Def[] defs = jsdef; 75 dictobject.defs = defs; 76 } 77 78 } 79 80 if (json.sams()) 81 { 82 var jssam = json.sams; 83 if (jssam!=null) 84 { 85 Sam[] sams = jssam; 86 dictobject.sams = sams; 87 } 88 89 } 90 return dictobject; 91 } 92 public class BingDictobject 93 { 94 public string word { get; set; } 95 public Pronunciation pronunciation { get; set; } 96 public Def[] defs { get; set; } 97 public Sam[] sams { get; set; } 98 } 99 100 public class Pronunciation 101 { 102 public string AmE { get; set; } 103 public string AmEmp3 { get; set; } 104 public string BrE { get; set; } 105 public string BrEmp3 { get; set; } 106 } 107 108 public class Def 109 { 110 public string pos { get; set; } 111 public string def { get; set; } 112 } 113 114 public class Sam 115 { 116 public string eng { get; set; } 117 public string chn { get; set; } 118 public string mp3Url { get; set; } 119 public string mp4Url { get; set; } 120 } 121 122 } 123 }
調用方法:
1 using BingTranslate; 2 3 namespace BingTranslateTest 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 BingDictApi bing = new BingDictApi(); 10 bing.Translate("china"); 11 } 12 } 13 }
翻譯效果:
工具附帶其它翻譯api,不再一一說明,原理也很簡單,想研究的可以使用反彙編工具查看
使用也很簡單,喜歡的可以下載使用:
啟動後,在圖盤圖標中調出設計界面,設置好快捷鍵(預設ctrl+T) 按快捷鍵就能調出翻譯界面