UNPKG

lingva-scraper-update

Version:
65 lines (64 loc) 2.44 kB
"use strict"; 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;