技术开发 频道

使用translate工具翻译.NET translate API

【IT168 技术文档】google前不久推出了Google Ajax Library API,说白了就是提供几个知名js库的host,目前有:

jQuery
prototype
script.aculo.us
MooTools
dojo
google提供的这批js类库都有使用cdn,同时提供压缩和非压缩版本,并gzip输出。比如Prototype在未压缩前是124k,压缩后则只有30k,而jquery经过瘦身以后,也是从97k降到了16k。

这项服务的意义在于,如果各个网站都使用google提供的某个js类库比如jquery,那么由于浏览器缓存的缘故,用户就可以避免下载相同内容的js,这样也就能提高js的载入速度了。

很久前的一天,我想使用这个东西,然后看了下,GooGle的Translate工具目前没有公开API,还是一个逐渐完善的过程,另一方面,利用一段很小的程序就可以得到我们想要的效果。
   在这篇,我就利用C#写一个小程序,翻译:
   思路是这样的:
  
   1:发送POST(或者GET)
   2:获取POST(或者GET)的响应
   3:正则匹配我们想要的值。

   发生POST(或者GET)的函数:
 
    public static string GetGetRequest(string urlP,string encode){
        if(null==urlP) return null;
        string StrRetP = null;
        Stream dataStream = null;
        try{

            HttpWebRequest myHttpWebRequest=(HttpWebRequest)WebRequest.Create(urlP);

            myHttpWebRequest.Timeout = 10000;     // 10 secs
            HttpWebResponse Objresponse =(HttpWebResponse)myHttpWebRequest.GetResponse();
            //Encoding enc = Encoding.GetEncoding(1252);  // Windows default Code Page
            if(Objresponse.StatusDescription == "OK"){//HttpStatusCode.OK
                dataStream = Objresponse.GetResponseStream ();
                Encoding objE = String.IsNullOrEmpty(encode)?Encoding.GetEncoding(0):Encoding.GetEncoding(encode);
                StreamReader r = new StreamReader(dataStream,objE);
                StrRetP= r.ReadToEnd();
            }
        }catch(Exception e){
            StrRetP =e.Message;
        }finally{
            if(null!=dataStream) dataStream.Close();
        }
        return StrRetP;
    }

 这个我在前面的一些文章中有所介绍。

然后正则匹配的函数:

    public static string GetMatchString(string text,string pattern,int point){
        if(String.IsNullOrEmpty(text)||String.IsNullOrEmpty(pattern))return String.Empty;
        Regex rx = new Regex(pattern,RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline);
        Match match = rx.Match(text);
        string word="";
        if (match.Success)    word = match.Groups[point].Value;
        return word.Trim();
    }

 这个数根据一个正则表达数,返回匹配的值。

直接进入Main主体:

        public static void Main(string[] args){
            string mess ="我们";
            Console.WriteLine(HttpUtility.UrlEncode("我们"));
            mess = GetGetReques&text="+HttpUtility.UrlEncode(mess,System.Text.UnicodeEncoding.GetEncoding( "Gb2312")),"utf-8");
            //Console.WriteLine(mess);
            mess = GetMatchString(mess,@"(<div id=result_box dir=""ltr"">)([?:sS]*?)(</div>)",2);
            Console.WriteLine(mess);
        }

注意的是
HttpUtility.UrlEncode(mess,System.Text.UnicodeEncoding.GetEncoding( "Gb2312"))
这句,无法识别UrlEncode的字符编码,这里需要指明。
 

0
相关文章