UNPKG

node-csfd-api

Version:

ČSFD API in JavaScript. Amazing NPM library for scrapping csfd.cz :)

62 lines (61 loc) 3.22 kB
import { LIB_PREFIX, movieUrl } from "../vars.js"; import { fetchPage } from "../fetchers/index.js"; import { extractId } from "../helpers/global.helper.js"; import { detectSeasonOrEpisodeListType, getEpisodeCode, getMovieBoxMovies, getMovieColorRating, getMovieCreators, getMovieDescriptions, getMovieDuration, getMovieGenres, getMovieOrigins, getMoviePoster, getMoviePremieres, getMovieRandomPhoto, getMovieRating, getMovieRatingCount, getMovieTags, getMovieTitle, getMovieTitlesOther, getMovieTrivia, getMovieType, getMovieVods, getMovieYear, getSeasonOrEpisodeParent, getSeasonsOrEpisodes, getSeriesAndSeasonTitle } from "../helpers/movie.helper.js"; import { parse } from "node-html-parser"; //#region src/services/movie.service.ts var MovieScraper = class { async movie(movieId, options) { const id = extractId(movieId); if (id === null || isNaN(id)) throw new Error("node-csfd-api: movieId must be a valid number"); const movieHtml = parse(await fetchPage(movieUrl(id, { language: options?.language }), { ...options?.request })); const pageClasses = movieHtml.querySelector(".page-content").classNames.split(" "); const asideNode = movieHtml.querySelector(".aside-movie-profile"); const movieNode = movieHtml.querySelector(".main-movie-profile"); const jsonLdString = movieHtml.querySelector("script[type=\"application/ld+json\"]")?.textContent; let jsonLd = null; try { jsonLd = JSON.parse(jsonLdString); } catch (e) { console.error(LIB_PREFIX + " Error parsing JSON-LD", e); } return this.buildMovie(id, movieHtml, movieNode, asideNode, pageClasses, jsonLd, options); } buildMovie(movieId, movieHtml, el, asideEl, pageClasses, jsonLd, options) { const type = getMovieType(el); const { seriesName = null, seasonName = null } = type === "season" ? getSeriesAndSeasonTitle(el) : {}; const seasonOrEpisodeListType = detectSeasonOrEpisodeListType(movieHtml); return { id: movieId, title: type === "season" && seriesName ? seriesName : getMovieTitle(el), year: getMovieYear(jsonLd), duration: getMovieDuration(jsonLd, el), descriptions: getMovieDescriptions(el), genres: getMovieGenres(el), type, url: movieUrl(movieId, { language: options?.language }), origins: getMovieOrigins(el), colorRating: getMovieColorRating(pageClasses), rating: getMovieRating(asideEl), ratingCount: getMovieRatingCount(asideEl), titlesOther: getMovieTitlesOther(el), poster: getMoviePoster(el), photo: getMovieRandomPhoto(el), trivia: getMovieTrivia(el), creators: getMovieCreators(el, options), vod: getMovieVods(el), tags: getMovieTags(asideEl), premieres: getMoviePremieres(asideEl), related: getMovieBoxMovies(asideEl, "Související"), similar: getMovieBoxMovies(asideEl, "Podobné"), seasons: seasonOrEpisodeListType === "seasons" ? getSeasonsOrEpisodes(movieHtml) : null, episodes: seasonOrEpisodeListType === "episodes" ? getSeasonsOrEpisodes(movieHtml) : null, parent: type === "season" || type === "episode" ? getSeasonOrEpisodeParent(el) : null, episodeCode: type === "episode" ? getEpisodeCode(el) : null, seasonName }; } }; //#endregion export { MovieScraper }; //# sourceMappingURL=movie.service.js.map