UNPKG

@subtitles/providers

Version:

Providers are the core of applications, where the subtitles are collected. Each provider exports a unique strategy for gathering data. From legendastv's web scraping from opensubtitle API usage, you can collect subtitles from your favorite tv shows and mo

54 lines (53 loc) 2.7 kB
"use strict"; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var _LegendasTvProvider_scraper; Object.defineProperty(exports, "__esModule", { value: true }); const url_1 = require("url"); const puppeteer_1 = __importDefault(require("puppeteer")); const scraper_1 = __importDefault(require("./scraper")); const BASE_URL = 'http://legendas.tv'; const SEARCH_PATH = '/busca'; class LegendasTvProvider { constructor() { _LegendasTvProvider_scraper.set(this, void 0); __classPrivateFieldSet(this, _LegendasTvProvider_scraper, (0, scraper_1.default)(), "f"); } async search({ keyword }) { const url = new url_1.URL(SEARCH_PATH + '/' + keyword, BASE_URL); let browser = null; let subtitles = []; try { browser = await puppeteer_1.default.launch(); const page = await browser.newPage(); await page.goto('' + url); const handlers = await page.$$('#resultado_busca > .list_element > article > div'); if (handlers.length === 0) { console.info(`No results found`); await browser.close(); } else { const scrapers = handlers.map(__classPrivateFieldGet(this, _LegendasTvProvider_scraper, "f")); subtitles = await Promise.all(scrapers); } } finally { await browser?.close(); } return subtitles; } } exports.default = LegendasTvProvider; _LegendasTvProvider_scraper = new WeakMap();