/App_Code/StaffBroker/BingTranslate.cs
C# | 154 lines | 137 code | 9 blank | 8 comment | 2 complexity | 9a17062aef910f7318d1e8aeaed48466 MD5 | raw file
Possible License(s): BSD-3-Clause, Apache-2.0
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Net;
- using System.IO;
- using System.Runtime.Serialization.Json;
- using System.Runtime.Serialization;
- using System.Web;
- using System.ServiceModel.Channels;
- using System.ServiceModel;
- namespace MicrosoftTranslatorSdk.HttpSamples
- {
- class Program
- {
- static void Main(string[] args)
- {
- AdmAccessToken admToken;
- string headerValue;
- //Get Client Id and Client Secret from https://datamarket.azure.com/developer/applications/
- //Refer obtaining AccessToken (http://msdn.microsoft.com/en-us/library/hh454950.aspx)
- AdmAuthentication admAuth = new AdmAuthentication("AgapeConnect", "");
- try
- {
- admToken = admAuth.GetAccessToken();
- // Create a header with the access_token property of the returned token
- headerValue = "Bearer " + admToken.access_token;
- DetectMethod(headerValue);
- }
- catch (WebException e)
- {
- ProcessWebException(e);
- Console.WriteLine("Press any key to continue...");
- Console.ReadKey(true);
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- Console.WriteLine("Press any key to continue...");
- Console.ReadKey(true);
- }
- }
- private static void DetectMethod(string authToken)
- {
- Console.WriteLine("Enter Text to detect language:");
- string textToDetect = Console.ReadLine();
- //Keep appId parameter blank as we are sending access token in authorization header.
- string uri = "http://api.microsofttranslator.com/v2/Http.svc/Detect?text=" + textToDetect;
- 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"));
- string languageDetected = (string)dcs.ReadObject(stream);
- Console.WriteLine(string.Format("Language detected:{0}", languageDetected));
- Console.WriteLine("Press any key to continue...");
- Console.ReadKey(true);
- }
- }
- catch
- {
- throw;
- }
- finally
- {
- if (response != null)
- {
- response.Close();
- response = null;
- }
- }
- }
- private static void ProcessWebException(WebException e)
- {
- Console.WriteLine("{0}", 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();
- }
- }
- }
- Console.WriteLine("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;
- }
- }
- }
- }