Translating Twitter, part 2

A while ago I wrote in an article about translating tweets in my client Haunt. For the translating itself I was using the Google Translate API, which has sadly be deprecated. Evil after all I suppose.

I've now rewritten my translation code to use the Bing Translation APIs instead. You need to register an API key (see http://www.bing.com/developers/appids.aspx) to be able to use the APIs. The APIs that I am using are fairly simple though.

For a simple translation, requesting http://api.microsofttranslator.com/V2/Http.svc/Translate?appId=[yourappid]&to=en&text=[yourtext] is all you need to do. It will auto-detect the language for you as well.

However, it does not return the detected language, so I had to resort to using two requests in order to reimplement the same functionality that I had before with the Google APIs. I also found that it was easier to use the Http and not the Ajax variant of the API. It requires using SimpleXML to get to the data, but at least you do not have to fight with the BOM (Byte-order mark) and quoting.

The full code looks like:

<?php
$apiBase = 'http://api.microsofttranslator.com/V2/Http.svc/';
$appId = 'yourappid';
$text = urlencode( 'Een hoge boom vangt veel wind' );

$language = (string) simplexml_load_string(
        file_get_contents(
                "{$apiBase}/Detect?appId={$appId}&text={$text}"
        )
);

$inEnglish = (string) simplexml_load_string(
        file_get_contents(
                "{$apiBase}/Translate?appId={$appId}&text={$text}&to=en"
        )
);

var_dump( $language, $inEnglish );
?>

with as output:

string(2) "nl"
string(34) "A high tree catches a lot of wind."

Shortlink

This article has a short URL available: http://drck.me/bing-translate-8nq

Comments

Any reason to use simplexml_load_string(file_get_contents()) instead of just simplexml_load_file() ?

Derick said:

I had to resort to using two requests...

By using the GetTranslations service, the detected source language and the translation can be found with one request. Admittedly, it's a little bit messy (needing a POST request) but it saves waiting around for two request/response cycles.

An example, which appears to work, based on the code in your article can be found at https://gist.github.com/1000264 .

@Ilia: No reason, it's just that I debugged with file_get_contents() first.

@Peter: I'll update the article again... I'd missed this API.

Add Comment

Name:
Email:

Will not be posted. Please leave empty instead of filling in garbage though!
Comment:

Please follow the reStructured Text format. Do not use the comment form to report issues in software, use the relevant issue tracker. I will not answer them here.


All comments are moderated

Life Line