吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2719|回复: 32
收起左侧

[其他转载] 【js】谷歌翻译批量接口

  [复制链接]
梦汐 发表于 2023-4-16 08:19
async function translation(array) {
    var splicing = []
    if (!(array instanceof Array)) {
        array = [array]
    }
    for (let i = 0; i < array.length; i++) {
        splicing.push(
            {
                "originalText": array[i],
                "translatedText": null,
                "detectedLanguage": null,
                "status": "translating",
                "waitTranlate": {}
            }
        )
    }
    return await makeRequest("auto", "zh-CN", splicing)//无并发限制接口
    async function makeRequest(sourceLanguage, targetLanguage, requests) {
        return await new Promise((resolve, reject) => {
            const xhr = new XMLHttpRequest();
            xhr.open(
                "POST",
                "https://translate.googleapis.com/translate_a/t?anno=3&client=te&v=1.0&format=html" + GetExtraParameters(sourceLanguage, targetLanguage, requests)
            );
            xhr.setRequestHeader(
                "Content-Type",
                "application/x-www-form-urlencoded"
            );
            xhr.responseType = "json";

            xhr.onload = (event) => {
                resolve(xhr.response);
            };

            xhr.onerror = xhr.onabort = xhr.ontimeout = (event) => { console.error(event); reject(); };

            xhr.send(getRequestBody(sourceLanguage, targetLanguage, requests));
        });
        function getRequestBody(sourceLanguage, targetLanguage, requests) {
            return requests
                .map((info) => `&q=${encodeURIComponent(info.originalText)}`)
                .join("");
        }
        function GetExtraParameters(sourceLanguage, targetLanguage, requests) {
            return `&sl=${sourceLanguage}&tl=${targetLanguage}&tk=${calcHash(requests.map((info) => info.originalText).join(""))}`
            function calcHash(query) {
                const windowTkk = "448487.932609646";
                const tkkSplited = windowTkk.split(".");
                const tkkIndex = Number(tkkSplited[0]) || 0;
                const tkkKey = Number(tkkSplited[1]) || 0;

                const bytesArray = transformQuery(query);

                let encondingRound = tkkIndex;
                for (const item of bytesArray) {
                    encondingRound += item;
                    encondingRound = shiftLeftOrRightThenSumOrXor(
                        encondingRound,
                        "+-a^+6"
                    );
                }
                encondingRound = shiftLeftOrRightThenSumOrXor(
                    encondingRound,
                    "+-3^+b+-f"
                );

                encondingRound ^= tkkKey;
                if (encondingRound <= 0) {
                    encondingRound = (encondingRound & 2147483647) + 2147483648;
                }

                const normalizedResult = encondingRound % 1000000;
                return normalizedResult.toString() + "." + (normalizedResult ^ tkkIndex);
                function transformQuery(query) {
                    /** @type {Array<number>} */
                    const bytesArray = [];
                    let idx = 0;
                    for (let i = 0; i < query.length; i++) {
                        let charCode = query.charCodeAt(i);

                        if (128 > charCode) {
                            bytesArray[idx++] = charCode;
                        } else {
                            if (2048 > charCode) {
                                bytesArray[idx++] = (charCode >> 6) | 192;
                            } else {
                                if (
                                    55296 == (charCode & 64512) &&
                                    i + 1 < query.length &&
                                    56320 == (query.charCodeAt(i + 1) & 64512)
                                ) {
                                    charCode =
                                        65536 +
                                        ((charCode & 1023) << 10) +
                                        (query.charCodeAt(++i) & 1023);
                                    bytesArray[idx++] = (charCode >> 18) | 240;
                                    bytesArray[idx++] = ((charCode >> 12) & 63) | 128;
                                } else {
                                    bytesArray[idx++] = (charCode >> 12) | 224;
                                }
                                bytesArray[idx++] = ((charCode >> 6) & 63) | 128;
                            }
                            bytesArray[idx++] = (charCode & 63) | 128;
                        }
                    }
                    return bytesArray;
                }
                function shiftLeftOrRightThenSumOrXor(num, optString) {
                    for (let i = 0; i < optString.length - 2; i += 3) {
                        /** @type {string|number} */
                        let acc = optString.charAt(i + 2);
                        if ("a" <= acc) {
                            acc = acc.charCodeAt(0) - 87;
                        } else {
                            acc = Number(acc);
                        }
                        if (optString.charAt(i + 1) == "+") {
                            acc = num >>> acc;
                        } else {
                            acc = num << acc;
                        }
                        if (optString.charAt(i) == "+") {
                            num += acc & 4294967295;
                        } else {
                            num ^= acc;
                        }
                    }
                    return num;
                }
            }
        }
    }
}
console.log(await translation(['hi', 'omg', 'yes']));

免费评分

参与人数 6吾爱币 +5 热心值 +6 收起 理由
52gomu + 1 + 1 谢谢@Thanks!
yzmb8456 + 1 用心讨论,共获提升!
lingyiling + 1 + 1 我很赞同!
我是一个外星人 + 1 + 1 用心讨论,共获提升!
寻找乐趣 + 1 + 1 谢谢@Thanks!
Duke0910 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

清水有香 发表于 2023-4-16 08:35
感谢楼主的分享
7R903 发表于 2023-4-16 08:45
cgscs 发表于 2023-4-16 09:12
yu520 发表于 2023-4-16 09:54
感谢楼主分享,很实用。
alingwin 发表于 2023-4-16 10:06
如何食用呢,小白不懂
头像被屏蔽
feiyu361 发表于 2023-4-16 10:13
提示: 该帖被管理员或版主屏蔽
pathol 发表于 2023-4-16 10:48
编程小白,复制到写字本上 如何运行呢?
ysjd22 发表于 2023-4-16 10:50
pathol 发表于 2023-4-16 10:48
编程小白,复制到写字本上 如何运行呢?

需要安装java吧
lbh3925695 发表于 2023-4-16 11:10
怎么使用呢?需要爬篱笆吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表