免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2501 | 回复: 0
打印 上一主题 下一主题

使用Google的translate工具翻译.NET translate API [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-22 17:22 |只看该作者 |倒序浏览
很久前的一天,我想使用这个东西,然后看了下,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 = GetGetRequest("http://translate.google.com/translate_t?langpair="+HttpUtility.UrlEncode("zh-CN|en")+ "&text="+HttpUtility.UrlEncode(mess,System.Text.UnicodeEncoding.GetEncoding( "Gb2312")),"utf-8");
            //Console.WriteLine(mess);
            mess = GetMatchString(mess,@"(<div id=result_box dir=""ltr"">)([?:\s\S]*?)(</div>)",2);
            Console.WriteLine(mess);
        }



注意的是
HttpUtility.UrlEncode(mess,System.Text.UnicodeEncoding.GetEncoding( "Gb2312"))
这句,无法识别UrlEncode的字符编码,这里需要指明。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP