async function() {
/*
await db().create("baidu", [
[ "id integer", null, true ], "sign varchar(32), error_code integer, fileSrcUrl varchar(2000), amount integer, charCount integer, requestId integer", [ "dateline timestamp", "datetime('now', 'localtime')" ]
]);
await db().none("create index baidu_requestId on baidu(requestId)");
*/
var res = qstr();
delete res.r; delete res.error_msg;
await db().insert("baidu", res);
return { msg: "ok" };
}
async function() {
var res = form();
var data = await db().table("baidu").where("requestId=@requestId").fetch({ requestId: res.requestId });
return data.fileSrcUrl;
}
async function() {
var res = form();
var data = await dbg().trace(res);
return data;
}
async function() {
var res = form(), from = res.from || "auto", to = res.to || "zh", str = res.str || "wwwroot/bbs-async/baidu/test.jpg";
var appid = sys.baidu_appid, seckey = sys.baidu_seckey;
var salt = (new Date).getTime();
var cuid = "APICUID", mac = "mac", version = 3;
var file = fs.readFileSync(path.resolve(__dirname, str));
var sign = md5(appid + md5(file, 32) + salt + cuid + mac + seckey, 32);
var url = "https://fanyi-api.baidu.com/api/trans/sdk/picture";
var data = await urllib.request(url, {
method: "POST",
contentType: "multipart/form-data",
dataType: "json",
data: { from, to, appid, salt, cuid, mac, version, sign },
files: { image: file }
});
return data.data.data.sumDst;
}
async function(from, to, type, str) {
var res = form();
if(!from) from = res.from || "auto";
if(!to) to = res.to || "zh";
if(!type) type = res.type || "pdf";
if(!str) str = res.str || "wwwroot/bbs-async/baidu/1.pdf";
var timestamp = parseInt(new Date / 1000);
var file = fs.readFileSync(path.resolve(__dirname, str));
var appid = sys.baidu_appid, seckey = sys.baidu_seckey;
var params = [
"appid=" + appid,
"from=" + from,
"to=" + to,
"timestamp=" + timestamp,
"type=" + type
];
params.sort();
var querySign = params.join("&") + "&" + md5(file, 32) + seckey;
var sign = md5(querySign, 32);
var url = "https://fanyi-api.baidu.com/api/trans/vip/doctrans";
var data = await urllib.request(url, {
method: "POST",
contentType: "multipart/form-data",
dataType: "json",
data: { appid, from, to, timestamp, type, sign },
files: { file: fs.createReadStream(path.resolve(__dirname, str)) }
});
const sleep = time => new Promise(resolve => setTimeout(resolve, time));
async function doc(id) {
await sleep(1000);
var data = await db().table("baidu").where("requestId=@requestId").fetch({ requestId: id });
if(data) return data.fileSrcUrl;
else return doc(id);
}
return doc(data.data.data.requestId);
}
async function() {
var res = form(), str = res.str;
var result = await Kuroshiro.default.Util.hasJapanese(str);
return { msg: result };
}
async function() {
var res = form(), str = res.str;
var data = {
to: res.to,
mode: res.mode,
romajiSystem: res.romajiSystem,
delimiter_start: res.delimiter_start,
delimiter_end: res.delimiter_end
}
// 取得res.str里用包裹的字符
var span = str.match(/(.*?)<\/span>/g);
// 如果span存在,将包裹的字符替换为特殊字符作为位置顺序标识以便后续处理
if(span) {
for(var i = 0; i < span.length; i++) {
str = str.replace(span[i], "" + i + ";");
}
}
var result = await kuroshiro.convert(str, data);
// isHiragana(char) 是否是平假名, isKatakana(char) 是否是片假名, isKana(char) 是否是假名, isKanji(char) 是否是日文汉字, isJapanese(char) 是否是日文
// hasHiragana(str) 是否含有平假名, hasKatakana(str) 是否含有片假名, hasKana(str) 是否含有假名, hasKanji(str) 是否含有日文汉字, hasJapanese(str) 是否含有日文
// kanaToHiragna(str) 转平假名, kanaToKatakana(str) 转片假名, kanaToRomaji(str, system) 转罗马字、参数system可选值为"nippon", "passport", "hepburn" (默认值: “hepburn”)
// var result = Kuroshiro.default.Util.isHiragana(res.str);
// var result = Kuroshiro.default.Util.hasKanji(res.str);
// 取得结果中的特殊字符位置顺序标识
var pos = result.match(/\d+;/g);
// 将结果中的非中文字符还原,从span数组中取得对应的字符
if(pos) {
for(var i = 0; i < pos.length; i++) {
result = result.replace("" + i + ";", span[i]); // replace 一共可以传入3个参数,第一个为匹配的字符串,第二个为匹配字符串的起始位置,第三个为调用replace方法的字符串本身
}
}
result = result.replace(/.+/g, "$&"); // $& 表示与 regexp 相匹配的子串
return { msg: result };
}
async function() {
// if(!me().isLogin) return { err: "需要登录" };
// if(me().jifen < 50 && me().roleid < 2) return { err: "您的积分不到50,暂不允许上传文件" };
var filter = /\.(doc|docx|xls|xlsx|ppt|pptx|xml|html|htm|txt|pdf)$/i;
var maxSize = 8 * 1024 * 1024; // 允许 8M
if(!form().file) return { err: "请选择文件" };
if(!filter.test(form().file.name)) return { err: form().file.name + "文件格式不正确" };
var ext = RegExp.$1.toLowerCase();
if(form().file.size > maxSize) return { err: "文件大小不能超过 8M" };
var savePath = "baidu/" + sys.sTime.toString("yyyy/MM/dd");
// 判断目录 savePath 是否存在,不存在则递归建立目录
var mapdir = ensureDir(savePath);
var fname = sys.sTime.toString("hhmmss") + Math.random().toString(36).substr(1, 6) + "." + ext;
fs.writeFileSync(mapdir + "/" + fname, form().file.data);
var doc = await this.doctrans("auto", "zh", ext, "wwwroot/exop.cn/" + savePath + "/" + fname);
return { path: doc };
}