UNPKG

@aliceplex/core

Version:

[![License][license_badge]][license] [![Pipelines][pipelines_badge]][pipelines] [![Coverage][coverage_badge]][pipelines] [![NPM][npm_badge]][npm] [![semantic-release][semantic_release_badge]][semantic_release]

89 lines 3.92 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()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const url_1 = require("url"); const moment_1 = __importDefault(require("moment")); const lodash_1 = __importDefault(require("lodash")); const utils_1 = require("./utils"); const fetchAuthToken = (credential) => __awaiter(void 0, void 0, void 0, function* () { const url = "https://api.thetvdb.com/login"; const json = yield utils_1.fetchJsonMemorized(url, { method: "POST", headers: { Accept: "application/json", "Content-Type": "application/json" }, body: JSON.stringify(credential) }); const { token } = json; if (!lodash_1.default.isString(token)) { throw new Error("Unable to get TVDB auth token!"); } return token; }); const getAuthHeaders = (authToken, language) => ({ Accept: "application/json", Authorization: `Bearer ${authToken}`, "Accept-Language": language }); const fetchEpisodes = (tvdbId, pageNumber, request) => __awaiter(void 0, void 0, void 0, function* () { const url = new url_1.URL(`https://api.thetvdb.com/series/${tvdbId}/episodes`); url.searchParams.append("page", `${pageNumber}`); const json = yield utils_1.fetchJsonMemorized(url.href, request); const { data, links } = json; const { next } = links; if (next) { const newData = yield fetchEpisodes(tvdbId, next, request); data.push(...newData); } return data; }); const fetchEpisodesMemorized = lodash_1.default.memoize(fetchEpisodes, (tvdbId, pageNumber) => JSON.stringify({ tvdbId, pageNumber })); const fetchEpisode = (context, options) => __awaiter(void 0, void 0, void 0, function* () { const { tvdbId, credential, language = "ja", transformContext = (c) => c } = options; const { episode: airedEpisodeNumber, season: airedSeason } = transformContext(context); const authToken = yield fetchAuthToken(credential); const headers = getAuthHeaders(authToken, language); const episodes = yield fetchEpisodesMemorized(tvdbId, 1, { headers }); const ep = lodash_1.default.find(episodes, { airedSeason, airedEpisodeNumber }); if (!ep) { throw new Error(`Cannot find season ${airedSeason} episode ${airedEpisodeNumber}`); } return ep; }); exports.createTvdbScrapper = (options) => (context) => __awaiter(void 0, void 0, void 0, function* () { const { fields = {} } = options; const { title, aired, summary, thumbnail } = fields; const episode = yield fetchEpisode(context, options); const data = {}; const thumbnails = []; if (title) { data.title = [episode.episodeName]; } if (summary) { data.summary = episode.overview; } if (aired) { const date = moment_1.default(episode.firstAired); data.aired = date.format("YYYY-MM-DD"); } if (thumbnail) { const { filename } = episode; if (filename) { thumbnails.push(`https://www.thetvdb.com/banners/${filename}`); } } return { data, thumbnails }; }); //# sourceMappingURL=tvdb.js.map