C#调用Bing的在线翻译接口Translator
2012-08-25 23:12
295 查看
首先要申请Developer账户,申请完毕后在https://datamarket.azure.com/account可以看到账户名和密码。
也可以申请一个应用程序,同样可以当做调用Translator接口的账户和密码。
按MSDN上的示例简单重构了一个静态类:
上述调用方法存在不稳定的情况,试了SOAP方式,还是比较稳定的:
要添加一个Service Reference:TranslatorService
也可以申请一个应用程序,同样可以当做调用Translator接口的账户和密码。
按MSDN上的示例简单重构了一个静态类:
internal static class Translator { public static string TranslateString(string text, string fromCulture, string toCulture) { string translateResult = ""; AdmAccessToken admToken; //使用应用程序名,密码 //AdmAuthentication admAuth = new AdmAuthentication("TranslateHelper", "******"); //使用账户名,密码 AdmAuthentication admAuth = new AdmAuthentication("955aaf93-127b-45ef-84ba-509cc094e05c", "*******"); try { admToken = admAuth.GetAccessToken(); //string text = "查询条件"; //string from = "zh-CHS"; //string to = "en"; string uri = "http://api.microsofttranslator.com/v2/Http.svc/Translate?text=" + System.Web.HttpUtility.UrlEncode(text) + "&from=" + fromCulture + "&to=" + toCulture; string authToken = "Bearer" + " " + admToken.access_token; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(uri); httpWebRequest.Headers.Add("Authorization", authToken); WebResponse response = null; try { response = httpWebRequest.GetResponse(); using (Stream stream = response.GetResponseStream()) { System.Runtime.Serialization.DataContractSerializer dcs = new System.Runtime.Serialization.DataContractSerializer(Type.GetType("System.String")); translateResult = (string)dcs.ReadObject(stream); } } catch (Exception e) { MessageBox.Show(e.Message); } } catch (WebException e) { ProcessWebException(e); } catch (Exception ex) { MessageBox.Show(ex.Message); } return translateResult; } private static void ProcessWebException(WebException e) { MessageBox.Show( e.ToString()); // Obtain detailed error information string strResponse = string.Empty; using (HttpWebResponse response = (HttpWebResponse)e.Response) { using (Stream responseStream = response.GetResponseStream()) { using (StreamReader sr = new StreamReader(responseStream, System.Text.Encoding.ASCII)) { strResponse = sr.ReadToEnd(); } } } MessageBox.Show(string.Format("Http status code={0}, error message={1}", e.Status, strResponse)); } } [DataContract] public class AdmAccessToken { [DataMember] public string access_token { get; set; } [DataMember] public string token_type { get; set; } [DataMember] public string expires_in { get; set; } [DataMember] public string scope { get; set; } } public class AdmAuthentication { public static readonly string DatamarketAccessUri = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13"; private string clientId; private string cientSecret; private string request; public AdmAuthentication(string clientId, string clientSecret) { this.clientId = clientId; this.cientSecret = clientSecret; //If clientid or client secret has special characters, encode before sending request this.request = string.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope=http://api.microsofttranslator.com", HttpUtility.UrlEncode(clientId), HttpUtility.UrlEncode(clientSecret)); } public AdmAccessToken GetAccessToken() { return HttpPost(DatamarketAccessUri, this.request); } private AdmAccessToken HttpPost(string DatamarketAccessUri, string requestDetails) { //Prepare OAuth request WebRequest webRequest = WebRequest.Create(DatamarketAccessUri); webRequest.ContentType = "application/x-www-form-urlencoded"; webRequest.Method = "POST"; byte[] bytes = Encoding.ASCII.GetBytes(requestDetails); webRequest.ContentLength = bytes.Length; using (Stream outputStream = webRequest.GetRequestStream()) { outputStream.Write(bytes, 0, bytes.Length); } using (WebResponse webResponse = webRequest.GetResponse()) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(AdmAccessToken)); //Get deserialized object from JSON stream AdmAccessToken token = (AdmAccessToken)serializer.ReadObject(webResponse.GetResponseStream()); return token; } } }
上述调用方法存在不稳定的情况,试了SOAP方式,还是比较稳定的:
要添加一个Service Reference:TranslatorService
private string Translate(string text, string from, string to) { HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty(); AdmAuthentication admAuth = new AdmAuthentication("955aaf93-127b-45ef-84ba-509cc094e05c", "***"); AdmAccessToken admToken = admAuth.GetAccessToken(); string authToken = "Bearer" + " " + admToken.access_token; httpRequestProperty.Headers.Add("Authorization", authToken); TranslatorService.LanguageServiceClient client = new TranslatorService.LanguageServiceClient(); using (OperationContextScope scope = new OperationContextScope(client.InnerChannel)) { OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty; return client.Translate("", text, from, to, "text/plain", ""); } }
相关文章推荐
- asp.net c# 调用百度pai实现在线翻译,英文转中文
- Java 实现在线翻译功能 调用微软Bing API
- C# 调用微信接口的代码
- 【eclipse插件开发实战】 Eclipse插件开发6——eclipse在线翻译插件Translator开发实例详解
- c# .net 调用php 的webservice接口
- C# 调用WSDL接口及方法
- C# 调用SQL的存储过程的接口及实现
- 华为Mate 10牵手Microsoft Translator,让离线翻译可媲美在线神经网络翻译
- C#调用C++的dll时,c++ dll函数接口中尽量不要用bool返回类型
- c# 反射调用程序集方法、接口实例
- C#怎样通过url调用接口
- Java 调用C# webservice接口 生成java客户端 实现方式
- Yahoo,Msn,Skype,QQ,阿里旺旺在线聊天链接接口调用
- C# 调用LDAP接口获取域用户信息
- c# 【MVC】WebApi通过HttpClient来调用Web Api接口
- C#调用Geos的C函数接口进行空间拓扑操作
- java调用C# webservice接口使用axis报错
- C#调用微软在线翻译API实现简单的翻译功能
- C#调用sap接口及返回数据到SAP