123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
-
- string appId = "";
- string toKey = "";
- int coolTime = 1000;
- string userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
- int NULL = 0;
- int executeThreadId = NULL;
- int nextExecuteTime = 0;
- string GetVersion(){
- return "1";
- }
- string GetTitle(){
- return "{$CP950=Bai Du 翻譯$}{$CP0=Bai Du translate$}";
- }
- string GetDesc(){
- return "https://fanyi.baidu.com/";
- }
- string GetLoginTitle(){
- return "请输入配置";
- }
- string GetLoginDesc(){
- return "请输入AppId和密钥!";
- }
- string GetUserText(){
- return "App ID:";
- }
- string GetPasswordText(){
- return "密钥:";
- }
- array<string> GetSrcLangs(){
- array<string> ret = GetLangTable();
-
- ret.insertAt(0, "");
- return ret;
- }
- array<string> GetDstLangs(){
- return GetLangTable();
- }
- string ServerLogin(string appIdStr, string toKeyStr){
- if (appIdStr.empty() || toKeyStr.empty()) return "fail";
- appId = appIdStr;
- toKey = toKeyStr;
- return "200 ok";
- }
- string Translate(string text, string &in srcLang, string &in dstLang){
- string ret = "";
- if(!text.empty()){
-
-
-
-
-
- srcLang = GetLang(srcLang);
- dstLang = GetLang(dstLang);
-
-
-
- string q = HostUrlEncode(text);
-
- string salt = "" + HostGetTickCount();
- string sign = HostHashMD5(appId + text + salt + toKey);
- string parames = "from=" + srcLang + "&to=" + dstLang + "&appid=" + appId + "&sign=" + sign + "&salt=" + salt + "&q=" + q;
- string url = "http://api.fanyi.baidu.com/api/trans/vip/translate?" + parames;
-
- acquireExclusiveLock();
-
- int tickCount = HostGetTickCount();
- int sleepTime = nextExecuteTime - tickCount;
-
- if(sleepTime > 0){
- HostSleep(sleepTime);
- }
-
-
- string html = HostUrlGetString(url, userAgent);
-
- nextExecuteTime = coolTime + HostGetTickCount();
-
- releaseExclusiveLock();
- if(!html.empty()){
- ret = JsonParse(html);
- }
- if (ret.length() > 0){
- srcLang = "UTF8";
- dstLang = "UTF8";
- }
- if(text == ret){
- ret = "";
- }
- }
- return ret;
- }
- string GetLang(string &in lang){
- string result = lang;
- if(result.empty()){
- result = "auto";
- } else if(result == "zh-CN"){
- result = "zh";
- } else if(result == "zh-TW"){
- result = "cht";
- } else if(result == "ja"){
- result = "jp";
- } else if(result == "ro"){
- result = "rom";
- }
- return result;
- }
- array<string> langTable = {
- "zh-CN",
- "zh-TW",
- "en",
- "ja",
- "kor",
- "fra",
- "spa",
- "th",
- "ara",
- "ru",
- "pt",
- "de",
- "it",
- "el",
- "nl",
- "pl",
- "bul",
- "est",
- "dan",
- "fin",
- "cs",
- "ro",
- "slo",
- "swe",
- "hu",
- "vie"
- "yue",
- "wyw",
- };
- array<string> GetLangTable(){
- return langTable;
- }
- string JsonParse(string json){
- string ret = "";
- JsonReader reader;
- JsonValue root;
-
- if (reader.parse(json, root)){
- if(root.isObject()){
- bool hasError = false;
- array<string> keys = root.getKeys();
-
- for(uint i = 0; i < keys.size(); i++){
- if("error_code" == keys[i]){
- hasError = true;
- break;
- }
- }
- if(hasError){
- JsonValue errorCode = root["error_code"];
- JsonValue errorMsg = root["error_msg"];
- ret = "error: " + errorCode.asString() + ", error_msg=" + errorMsg.asString();
- }else{
- JsonValue transResult = root["trans_result"];
- if(transResult.isArray()){
- for(int i = 0; i < transResult.size(); i++){
- JsonValue item = transResult[i];
- JsonValue dst = item["dst"];
- if(i > 0){
- ret += "\n";
- }
- ret += dst.asString();
- }
- }
- }
- }
- }
- return ret;
- }
- void acquireExclusiveLock(){
- int tickCount1 = HostGetTickCount();
- HostSleep(1);
- int tickCount2 = HostGetTickCount();
-
- int key = tickCount1 << 16 + (tickCount2 & 0xFFFF);
- while(executeThreadId != key){
- if(executeThreadId == NULL){
- executeThreadId = key;
- }
- HostSleep(1);
- if(executeThreadId == key){
- HostSleep(1);
- if(executeThreadId == key){
- break;
- }
- }
- }
- }
- void releaseExclusiveLock(){
- executeThreadId = NULL;
- }
|