lingva-scraper-update
Version:
Google Translate scraper for Lingva Translate
65 lines (64 loc) • 2.44 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Endpoint = void 0;
const axios_1 = __importDefault(require("axios"));
const user_agents_1 = __importDefault(require("user-agents"));
exports.Endpoint = {
INFO: "info",
TEXT: "text",
AUDIO: "audio",
};
const request = (endpoint, retry = 0) => ({
with: (params) => {
const promise = retrieve(endpoint, params);
return {
promise,
doing: (callback) => promise
.then(callback)
.catch((error) => {
console.error("Axios Error: ", error);
return undefined;
})
.then((result) => isEmpty(result) && retry < 3
? request(endpoint, retry + 1)
.with(params)
.doing(callback)
: result ?? null),
};
},
});
const isEmpty = (item) => !item || (typeof item === "object" && "length" in item && item.length <= 0);
const retrieve = (endpoint, params) => {
const userAgent = new user_agents_1.default().toString(); // Reuse UserAgent for all requests
if (endpoint === exports.Endpoint.INFO) {
const { body } = params;
return axios_1.default.post("https://translate.google.com/_/TranslateWebserverUi/data/batchexecute?rpcids=MkEWBc&rt=c", body, {
headers: {
"User-Agent": userAgent,
"Content-Type": "application/x-www-form-urlencoded",
},
});
}
if (endpoint === exports.Endpoint.TEXT) {
const { source, target, query } = params;
return axios_1.default.get(`https://translate.google.com/m?sl=${source}&tl=${target}&q=${query}`, {
headers: {
"User-Agent": userAgent,
},
});
}
if (endpoint === exports.Endpoint.AUDIO) {
const { lang, text, textLength, speed } = params;
return axios_1.default.get(`https://translate.google.com/translate_tts?tl=${lang}&q=${text}&textlen=${textLength}&speed=${speed}&client=tw-ob`, {
responseType: "arraybuffer",
headers: {
"User-Agent": userAgent,
},
});
}
throw new Error("Invalid endpoint");
};
exports.default = request;