Last active
February 7, 2017 01:05
-
-
Save aeshirey/8b1e19751dec1ec17ee5790866f66936 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module MicrosoftCognitiveTranslator | |
open System | |
open System.Net | |
open System.Net.Http | |
open System.Web | |
type Translator() = | |
let AsyncGetAccessToken () = | |
let CognitiveServicesAccountKey = "<your cognitive services key>" // see portal.azure.com | |
let ServiceUrl = new System.Uri("https://api.cognitive.microsoft.com/sts/v1.0/issueToken") | |
async { | |
let client = new HttpClient() | |
let request = new HttpRequestMessage() | |
request.Method <- HttpMethod.Post | |
request.RequestUri <- ServiceUrl | |
request.Content <- new StringContent("") | |
request.Headers.TryAddWithoutValidation("Ocp-Apim-Subscription-Key", CognitiveServicesAccountKey) |> ignore | |
use! response = Async.AwaitTask <| client.SendAsync(request) | |
response.EnsureSuccessStatusCode() |> ignore | |
let! token = Async.AwaitTask <| response.Content.ReadAsStringAsync() | |
return token | |
} | |
let Authtoken = AsyncGetAccessToken() |> Async.RunSynchronously | |
// track how many bytes we translate | |
let mutable BytesTranslated = 0 | |
member this.Translate(text : string, fromLanguageCode, toLanguageCode) = | |
let encoded = HttpUtility.UrlEncode(text) | |
let uri = sprintf "https://api.microsofttranslator.com/v2/http.svc/Translate?text=%s&from=%s&to=%s&appid=Bearer%%20%s" encoded fromLanguageCode toLanguageCode Authtoken | |
let httpWebRequest = WebRequest.Create(uri) :?> HttpWebRequest | |
try | |
let response = httpWebRequest.GetResponse() | |
let stream = response.GetResponseStream() | |
let dcs = new System.Runtime.Serialization.DataContractSerializer(Type.GetType("System.String")) | |
let translation = dcs.ReadObject stream :?> string | |
BytesTranslated <- BytesTranslated + text.Length | |
translation | |
with | _ -> Unchecked.defaultof<string> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
An approximate translation from the C# code I was using in one of my projects. FWIW, the C# is twice as many LOC.