Version 0 of Google Translate ajax API

Updated 2010-03-31 20:19:50 by jokerozen

I needed to check language and translate a lot of texts, so I wrote those 2 procs inspired from Google AJAX search API and getting all I needed from official page

I'm testing it right now, I made +5000 requests for lang_detect and around 1500 translations in one day, and google let me do ... (500 ms between each lang_detect and 1s between each translation).

g_translate { string } return a string of text translated to english or -1 in case of error.

lang_detect { string } return the detected language as a 2 chars string and a floating number between 1 and 0 representing confidence. In case of error, langage is "error" and confidence is -1.


 package require http
 package require json
 proc g_translate {to_translate} {
  set api_key "<your API key here>" 
  set q [::http::formatQuery sig $api_key q $to_translate v 1.0 ]
  set url "http://ajax.googleapis.com/ajax/services/language/translate?langpair=%7Cen"
  set t [http::geturl $url -query $q]
  set translated ""
  if { [http::ncode $t] == 200 } {
    set d [http::data $t]
    set idx 0
    while { $idx >= 0 } {
        set idx [string first {responseData} $d $idx]
        if { $idx >= 0 } {
            set jd [json::json2dict [string range $d [expr {$idx-2}] end]]
            if {[dict get $jd responseData] != "null"} {
             set translated [dict get $jd responseData translatedText]
            }
            incr idx 5
        }
    }
  } else {
    set translated -1
    puts "Error=[http::error $t]"
    puts "Status=[http::status $t]"
    puts "Code=[http::code $t]"
    puts "Ncode=[http::ncode $t]"
    puts "Data=[http::data $t]"
  }
  http::cleanup $t
  return $translated
 }

 proc lang_detect { to_translate } {
  set api_key "<your API key here>"
  set q [::http::formatQuery sig $api_key q $to_translate v 1.0 ]
  set url "http://ajax.googleapis.com/ajax/services/language/detect?"
  # works only with GET 
  append url $q
  set t [http::geturl $url]
  set translated ""
  if { [http::ncode $t] == 200 } {
    set d [http::data $t]
    set idx 0
    while { $idx >= 0 } {
        set idx [string first {responseData} $d $idx]
        if { $idx >= 0 } {
            set jd [json::json2dict [string range $d [expr {$idx-2}] end]]
            if {[dict get $jd responseData] != "null"} {
             set lang [dict get $jd responseData language]
             set conf [dict get $jd responseData confidence]
            }
            incr idx 5
        }
    }
  } else {
    set lang "error"
    set conf -1
    puts "Error=[http::error $t]"
    puts "Status=[http::status $t]"
    puts "Code=[http::code $t]"
    puts "Ncode=[http::ncode $t]"
  }
  http::cleanup $t
  return "$lang $conf"
 }