UNPKG

wiki-entity

Version:
147 lines (146 loc) 5.38 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getRedirects = exports.getExtract = exports.getExtracts = exports.Api = void 0; const request_1 = require("../request"); const API_URL = "https://$lang.wikipedia.org/w/api.php"; class Api { constructor(qs = { action: "query", format: "json" }, httpTimeout) { this.qs = qs; this.httpTimeout = httpTimeout; this.qs.action = this.qs.action || "query"; this.qs.format = "json"; this.httpTimeout = httpTimeout || 10 * 1000; } query(lang, qs) { return __awaiter(this, void 0, void 0, function* () { if (qs) this.qs = Object.assign({}, this.qs, qs); const data = yield (0, request_1.default)(API_URL.replace("$lang", lang), { params: this.qs, timeout: this.httpTimeout }); if (hasError(data)) throw getError(data); if (data && data.query && data.query.pages) { return Object.keys(data.query.pages) .map((id) => data.query.pages[id]) .map((page) => { const item = { pageid: page.pageid, title: page.title }; if (page["categories"]) { item.categories = page["categories"].map((it) => it.title); } if (page["redirects"]) { item.redirects = page["redirects"].map((it) => it.title); } if (page["extract"]) { item.extract = page["extract"]; } return item; }); } return []; }); } redirects() { this.qs["rdlimit"] = "max"; this.addField("prop", "redirects"); return this; } categories() { this.qs["cllimit"] = "max"; this.qs["clshow"] = "!hidden"; this.addField("prop", "categories"); return this; } extract(sentences = 3) { this.qs["exsentences"] = sentences.toString(); this.qs["explaintext"] = "true"; this.addField("prop", "extracts"); return this; } addField(name, value) { const vals = (this.qs[name] || "").split("|").filter((item) => !!item); vals.push(value); this.qs[name] = vals.join("|"); return this; } } exports.Api = Api; function getExtracts(params) { return __awaiter(this, void 0, void 0, function* () { const qs = { action: "query", titles: params.titles && params.titles.join("|"), exsentences: params.sentences || 3, prop: "extracts", explaintext: true, exintro: true, exlimit: "max", exsectionformat: "plain", format: "json" }; const data = yield (0, request_1.default)(API_URL.replace("$lang", params.lang), { params: qs }); if (hasError(data)) throw getError(data); if (data && data.query && data.query.pages) { return Object.keys(data.query.pages).map((id) => data.query.pages[id]); } return []; }); } exports.getExtracts = getExtracts; const getExtract = (lang, title, sentences) => getExtracts({ lang: lang, titles: [title], sentences: sentences }).then(function (extracts) { if (extracts.length) { return extracts[0]; } return null; }); exports.getExtract = getExtract; function getRedirects(lang, title) { return __awaiter(this, void 0, void 0, function* () { const qs = { action: "query", generator: "redirects", titles: title, grdlimit: "max", format: "json" }; const data = yield (0, request_1.default)(API_URL.replace("$lang", lang), { params: qs }); if (hasError(data)) throw getError(data); if (data && data.query && data.query.pages) { return Object.keys(data.query.pages).map((id) => data.query.pages[id].title); } return []; }); } exports.getRedirects = getRedirects; function getError(data) { return ((data && data.error && new Error(data.error.info || "Wikidata Api Error")) || new Error("NO error")); } function hasError(data) { return !!data.error; }