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).
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] ne {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] ne {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" }