lingva-scraper-update
Version:
Google Translate scraper for Lingva Translate
78 lines (77 loc) • 3.44 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTranslationInfo = void 0;
const language_1 = require("./utils/language");
const request_1 = __importStar(require("./utils/request"));
const parse = __importStar(require("./utils/parse"));
/**
* Retrieves the full translation information given a pair of languages and a query
* @param source - The code of the language to translate from
* @param target - The code of the language to translate to
* @param query - The text to be translated
* @returns An element with all the information, as defined in {@link TranslationInfo}
*/
const getTranslationInfo = async (source, target, query) => {
const parsedSource = (0, language_1.mapGoogleCode)(source);
const parsedTarget = (0, language_1.mapGoogleCode)(target);
const reqData = JSON.stringify([
[query, parsedSource, parsedTarget, true],
[null],
]);
const reqBoilerplate = JSON.stringify([
[["MkEWBc", reqData, null, "generic"]],
]);
const body = "f.req=" + encodeURIComponent(reqBoilerplate);
return (0, request_1.default)(request_1.Endpoint.INFO)
.with({ body })
.doing(({ data }) => {
if (typeof data === "string") {
const resBoilerplate = JSON.parse(data.split("\n")?.[3] || "");
const resData = JSON.parse(resBoilerplate?.[0]?.[2]);
if (!resData)
return null;
// Add extraTranslations field here (with a fallback if necessary)
return parse.undefinedFields({
detectedSource: source === "auto" ? parse.detected(resData) : undefined,
typo: parse.typo(resData),
pronunciation: {
query: parse.pronunciation.query(resData),
translation: parse.pronunciation.translation(resData),
},
definitions: parse.list.definitions(resData),
examples: parse.list.examples(resData),
similar: parse.list.similar(resData),
extraTranslations: parse.list.extraTranslations?.(resData) || [],
});
}
return null; // Handle the case when `data` isn't a string.
})
.catch((error) => {
console.error("Error fetching translation info:", error);
return null;
});
};
exports.getTranslationInfo = getTranslationInfo;