|
|
ËÙʶ±ðÑéÖ¤Âëʶ±ðƽ̨ AIWROK ½ÓÈëʾÀý
- // ËÙʶ±ðÑéÖ¤Âëʶ±ðƽ̨ AIWROK ½ÓÈëʾÀý
- // APIÎĵµ: https://www.sushibie.com/demo.html
- // È«¾ÖÅäÖÃ
- var G = {
- running: true,
- token: "b5KL6hTyLfzDk84413CZZHE00pBLES2zxbE9G8",
- apiUrl: "https://api.sushibie.com/api/YmServer/customApi",
- userInfoUrl: "https://api.sushibie.com/api/YmServer/getUserInfoApi",
- refundUrl: "https://api.sushibie.com/api/YmServer/refundApi",
- captchaType: "2001" // ÑéÖ¤ÂëÀàÐÍID£¬¸ù¾Ýʵ¼ÊÐèÇóÐÞ¸Ä
- };
- // µ¼Èë±ØÒªµÄ Java Àà
- importClass(java.net.HttpURLConnection);
- importClass(java.net.URL);
- importClass(java.io.BufferedReader);
- importClass(java.io.InputStreamReader);
- importClass(java.io.OutputStream);
- importClass(java.lang.StringBuilder);
- importClass(android.util.Base64);
- importClass(java.io.FileInputStream);
- importClass(java.io.File);
- /**
- * ½«Í¼Æ¬Îļþת»»Îª Base64 ×Ö·û´®
- * @param {string} imagePath - ͼƬÎļþµÄ¾ø¶Ô·¾¶
- * @returns {string} Base64 ±àÂëµÄ×Ö·û´®
- */
- function imageToBase64(imagePath) {
- try {
- var file = new File(imagePath);
- if (!file.exists()) {
- printl("[ERROR] ͼƬÎļþ²»´æÔÚ: " + imagePath);
- return null;
- }
-
- var fis = new FileInputStream(file);
- var bytes = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, file.length());
- fis.read(bytes);
- fis.close();
-
- var base64 = Base64.encodeToString(bytes, Base64.NO_WRAP);
- printl("[INFO] ͼƬתBase64³É¹¦£¬´óС: " + base64.length() + " ×Ö·û");
- return base64;
- } catch (e) {
- printl("[ERROR] ͼƬתBase64ʧ°Ü: " + e.message);
- return null;
- }
- }
- /**
- * ÊÖ¶¯¹¹½¨ JSON ×Ö·û´®£¨Rhino »·¾³Ï JSON.stringify ¿ÉÄܲ»¿ÉÓã©
- * @param {object} obj - Ҫת»»µÄ¶ÔÏó
- * @returns {string} JSON ×Ö·û´®
- */
- function toJson(obj) {
- var parts = [];
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- var val = obj[key];
- // ͳһת³É JS ×Ö·û´®£¨¼æÈÝ Java String ¶ÔÏó£©
- var strVal = "" + val;
- if (typeof val === "string" || val instanceof java.lang.String || typeof val === "object" && val.getClass) {
- // תÒåÌØÊâ×Ö·û
- strVal = strVal.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n").replace(/\r/g, "\\r");
- parts.push('"' + key + '":"' + strVal + '"');
- } else {
- parts.push('"' + key + '":' + strVal);
- }
- }
- }
- return "{" + parts.join(",") + "}";
- }
- /**
- * ·¢ËÍ HTTP POST ÇëÇó
- * @param {string} url - ÇëÇóµØÖ·
- * @param {object} postData - POST Êý¾Ý¶ÔÏó
- * @returns {object} ÏìÓ¦½á¹û¶ÔÏó
- */
- function httpPost(url, postData) {
- try {
- var urlObj = new URL(url);
- var conn = urlObj.openConnection();
- conn.setRequestMethod("POST");
- conn.setDoOutput(true);
- conn.setDoInput(true);
- conn.setUseCaches(false);
- conn.setConnectTimeout(10000);
- conn.setReadTimeout(30000);
- conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
- // ²»ÒªÏÔʽµ÷Óà connect()£¬Èà getOutputStream ×Ô¶¯Á¬½Ó
- // ÊÖ¶¯¹¹½¨ JSON ×Ö·û´®
- var jsonStr = toJson(postData);
- var logStr = jsonStr;
- if (logStr.length > 200) {
- logStr = logStr.substring(0, 200) + "...";
- }
- printl("[DEBUG] ÇëÇóÊý¾Ý: " + logStr);
- // ·¢ËÍÇëÇóÊý¾Ý
- var bodyBytes = new java.lang.String(jsonStr).getBytes("UTF-8");
- conn.setRequestProperty("Content-Length", "" + bodyBytes.length);
- var os = conn.getOutputStream();
- if (os == null) {
- printl("[ERROR] ÎÞ·¨»ñÈ¡Êä³öÁ÷");
- return null;
- }
- os.write(bodyBytes);
- os.flush();
- os.close();
- // ¶ÁÈ¡ÏìÓ¦
- var responseCode = conn.getResponseCode();
- printl("[DEBUG] ÏìӦ״̬Âë: " + responseCode);
- var is;
- if (responseCode >= 200 && responseCode < 300) {
- is = conn.getInputStream();
- } else {
- is = conn.getErrorStream();
- }
- if (is == null) {
- printl("[ERROR] ÎÞ·¨»ñÈ¡ÊäÈëÁ÷");
- conn.disconnect();
- return null;
- }
- var reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- var sb = new StringBuilder();
- var line;
- while ((line = reader.readLine()) != null) {
- sb.append(line);
- }
- reader.close();
- conn.disconnect();
- var responseText = sb.toString();
- printl("[DEBUG] ÏìÓ¦ÄÚÈÝ: " + responseText);
- // ÊÖ¶¯½âÎö JSON ÏìÓ¦
- return parseJson(responseText);
- } catch (e) {
- printl("[ERROR] HTTPÇëÇóʧ°Ü: " + e.message);
- return null;
- }
- }
- /**
- * ¼òµ¥ JSON ½âÎö£¨Rhino »·¾³Ï¿ÉÄÜûÓÐÔÉú JSON.parse£©
- * ʹÓà org.json.JSONObject ½âÎö
- */
- function parseJson(jsonStr) {
- try {
- var jsonObj = new org.json.JSONObject(jsonStr);
- return {
- code: jsonObj.optInt("code", -1),
- msg: jsonObj.optString("msg", ""),
- data: parseJsonData(jsonObj)
- };
- } catch (e) {
- printl("[ERROR] JSON½âÎöʧ°Ü: " + e.message);
- return null;
- }
- }
- /**
- * ½âÎö data ×Ö¶Î
- */
- function parseJsonData(jsonObj) {
- try {
- if (jsonObj.isNull("data")) return null;
- var dataObj = jsonObj.optJSONObject("data");
- if (dataObj != null) {
- return {
- code: dataObj.optInt("code", -1),
- data: dataObj.optString("data", ""),
- time: dataObj.optString("time", ""),
- score: dataObj.optString("score", ""),
- unique_code: dataObj.optString("unique_code", "")
- };
- }
- return null;
- } catch (e) {
- return null;
- }
- }
- /**
- * ʶ±ðÑéÖ¤Âë
- * @param {string} imagePath - ͼƬÎļþ·¾¶
- * @param {string} type - ÑéÖ¤ÂëÀàÐÍID
- * @returns {object} ʶ±ð½á¹û {success: boolean, data: string, time: string, msg: string}
- */
- function recognizeCaptcha(imagePath, type) {
- printl("[INFO] ¿ªÊ¼Ê¶±ðÑéÖ¤Â룬ÀàÐÍ: " + type);
-
- // 1. ͼƬת Base64
- var imageBase64 = imageToBase64(imagePath);
- if (!imageBase64) {
- return { success: false, msg: "ͼƬתBase64ʧ°Ü" };
- }
-
- // 2. ¹¹½¨ÇëÇó²ÎÊý
- var postData = {
- token: G.token,
- type: type,
- image: imageBase64
- };
-
- // 3. ·¢ËÍÇëÇó
- printl("[INFO] ÕýÔÚµ÷ÓÃÊÙ˾ÑéÖ¤ÂëAPI...");
- var response = httpPost(G.apiUrl, postData);
-
- if (!response) {
- return { success: false, msg: "APIÇëÇóʧ°Ü" };
- }
-
- // 4. ½âÎöÏìÓ¦
- var code = response.code;
- var msg = response.msg || "δ֪´íÎó";
-
- printl("[INFO] APIÏìÓ¦Âë: " + code + ", ÏûÏ¢: " + msg);
-
- if (code === 10000) {
- // ʶ±ð³É¹¦
- var result = response.data.data;
- var time = response.data.time;
- printl("[SUCCESS] ʶ±ð³É¹¦£¡½á¹û: " + result + ", ºÄʱ: " + time + "Ãë");
- return { success: true, data: result, time: time, msg: msg };
- } else if (code === 10009) {
- // ½á¹û×¼±¸ÖÐ
- printl("[WARN] ½á¹û×¼±¸ÖУ¬ÇëÉÔºóÖØÊÔ");
- return { success: false, msg: "½á¹û×¼±¸ÖÐ" };
- } else {
- // ÆäËû´íÎó
- printl("[ERROR] ʶ±ðʧ°Ü: " + msg);
- return { success: false, msg: msg };
- }
- }
- /**
- * »ñÈ¡ÕË»§Óà¶î
- * @returns {object} {success: boolean, score: number, msg: string}
- */
- function getBalance() {
- printl("[INFO] ²éѯÕË»§Óà¶î...");
-
- var postData = {
- token: G.token,
- type: "score"
- };
-
- var response = httpPost(G.userInfoUrl, postData);
-
- if (!response) {
- return { success: false, msg: "²éѯʧ°Ü" };
- }
-
- if (response.code === 10001) {
- var score = response.data.score;
- printl("[INFO] ÕË»§Óà¶î: " + score + " »ý·Ö");
- return { success: true, score: parseFloat(score), msg: "²éѯ³É¹¦" };
- } else {
- printl("[ERROR] ²éѯʧ°Ü: " + response.msg);
- return { success: false, msg: response.msg };
- }
- }
- /**
- * ±¨´í·µ·Ö
- * @param {string} uniqueCode - ´òÂë·µ»ØµÄ uniqueCode
- * @returns {object} {success: boolean, msg: string}
- */
- function reportError(uniqueCode) {
- printl("[INFO] Ìá½»±¨´í£¬uniqueCode: " + uniqueCode);
-
- var postData = {
- token: G.token,
- uniqueCode: uniqueCode
- };
-
- var response = httpPost(G.refundUrl, postData);
-
- if (!response) {
- return { success: false, msg: "±¨´íÇëÇóʧ°Ü" };
- }
-
- if (response.code === 200) {
- printl("[SUCCESS] ±¨´í³É¹¦£¬»ý·ÖÒÑÍË»¹");
- return { success: true, msg: "±¨´í³É¹¦" };
- } else {
- printl("[ERROR] ±¨´íʧ°Ü: " + response.msg);
- return { success: false, msg: response.msg };
- }
- }
- // ============ Ö÷³ÌÐò ============
- function main() {
- printl("========================================");
- printl("[INFO] ÊÙ˾ÑéÖ¤Âëʶ±ð AIWROK ½ÓÈëʾÀý");
- printl("========================================");
- // 1. ²éѯÓà¶î
- var balanceResult = getBalance();
- if (balanceResult.success) {
- printl("[INFO] µ±Ç°¿ÉÓûý·Ö: " + balanceResult.score);
- } else {
- printl("[WARN] Óà¶î²éѯʧ°Ü: " + balanceResult.msg);
- }
- // 2. ½ØÍ¼²âÊÔ
- printl("[INFO] ¿ªÊ¼½ØÍ¼²âÊÔ...");
- try {
- // È«ÆÁ½ØÍ¼£¬»ñȡͼƬ¶ÔÏó
- var img = screen.screenShotFull();
- if (!img) {
- printl("[ERROR] ½ØÍ¼Ê§°Ü£¬·µ»ØÎª¿Õ");
- return;
- }
- printl("[INFO] ½ØÍ¼³É¹¦");
- // Ö±½Ó½«Í¼Æ¬×ª base64 ·¢Ë͸ø API
- var imageBase64 = img.toBase64();
- printl("[INFO] ͼƬתBase64³É¹¦£¬´óС: " + imageBase64.length() + " ×Ö·û");
- // 3. Ö´ÐÐʶ±ð
- printl("[INFO] ÑéÖ¤ÂëÀàÐÍ: " + G.captchaType);
- printl("[INFO] ÕýÔÚµ÷ÓÃÊÙ˾ÑéÖ¤ÂëAPI...");
- var postData = {
- token: G.token,
- type: G.captchaType,
- image: imageBase64
- };
- var response = httpPost(G.apiUrl, postData);
- img.recycle();
- if (!response) {
- printl("[ERROR] APIÇëÇóʧ°Ü");
- return;
- }
- var code = response.code;
- var msg = response.msg || "δ֪´íÎó";
- printl("[INFO] APIÏìÓ¦Âë: " + code + ", ÏûÏ¢: " + msg);
- if (code === 10000 && response.data) {
- printl("========================================");
- printl("[SUCCESS] ʶ±ð³É¹¦£¡");
- printl("[INFO] ʶ±ð½á¹û: " + response.data.data);
- printl("[INFO] ʶ±ðºÄʱ: " + response.data.time + " Ãë");
- printl("========================================");
- } else {
- printl("========================================");
- printl("[FAILED] ʶ±ðʧ°Ü");
- printl("[INFO] ʧ°ÜÔÒò: " + msg);
- printl("========================================");
- }
- } catch (e) {
- printl("[ERROR] ½ØÍ¼Òì³£: " + e.message);
- printl("[ERROR] Òì³£¶ÑÕ»: " + e.stack);
- return;
- }
- }
- // Æô¶¯Ö÷³ÌÐò
- try {
- main();
- } catch (e) {
- printl("[FATAL] ³ÌÐòÖ´ÐÐÒì³£: " + e.message);
- printl("[FATAL] ¶ÑÕ»: " + e.stack);
- }
- printl("[INFO] ³ÌÐòÖ´ÐÐÍê±Ï");
¸´ÖÆ´úÂë
|
|