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"
}