UNPKG

node-csfd-api

Version:

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

1 lines 6.25 kB
{"version":3,"file":"movie.service.cjs","names":["extractId","fetchPage","movieUrl","LIB_PREFIX","getMovieType","getSeriesAndSeasonTitle","detectSeasonOrEpisodeListType","getMovieTitle","getMovieYear","getMovieDuration","getMovieDescriptions","getMovieGenres","getMovieOrigins","getMovieColorRating","getMovieRating","getMovieRatingCount","getMovieTitlesOther","getMoviePoster","getMovieRandomPhoto","getMovieTrivia","getMovieCreators","getMovieVods","getMovieTags","getMoviePremieres","getMovieBoxMovies","getSeasonsOrEpisodes","getSeasonOrEpisodeParent","getEpisodeCode"],"sources":["../../src/services/movie.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovie, MovieJsonLd } from '../dto/movie';\nimport { fetchPage } from '../fetchers';\nimport { extractId } from '../helpers/global.helper';\nimport {\n detectSeasonOrEpisodeListType,\n getEpisodeCode,\n getMovieBoxMovies,\n getMovieColorRating,\n getMovieCreators,\n getMovieDescriptions,\n getMovieDuration,\n getMovieGenres,\n getMovieOrigins,\n getMoviePoster,\n getMoviePremieres,\n getMovieRandomPhoto,\n getMovieRating,\n getMovieRatingCount,\n getMovieTags,\n getMovieTitle,\n getMovieTitlesOther,\n getMovieTrivia,\n getMovieType,\n getMovieVods,\n getMovieYear,\n getSeasonOrEpisodeParent,\n getSeasonsOrEpisodes,\n getSeriesAndSeasonTitle\n} from '../helpers/movie.helper';\nimport { CSFDOptions } from '../types';\nimport { LIB_PREFIX, movieUrl } from '../vars';\n\nexport class MovieScraper {\n public async movie(movieId: number | string, options?: CSFDOptions): Promise<CSFDMovie> {\n const id = extractId(movieId);\n if (id === null || isNaN(id)) {\n throw new Error('node-csfd-api: movieId must be a valid number');\n }\n const url = movieUrl(id, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const movieHtml = parse(response);\n\n const pageClasses = movieHtml.querySelector('.page-content').classNames.split(' ');\n const asideNode = movieHtml.querySelector('.aside-movie-profile');\n const movieNode = movieHtml.querySelector('.main-movie-profile');\n const jsonLdString = movieHtml.querySelector('script[type=\"application/ld+json\"]')?.textContent;\n let jsonLd: MovieJsonLd | null = null;\n try {\n jsonLd = JSON.parse(jsonLdString);\n } catch (e) {\n console.error(LIB_PREFIX + ' Error parsing JSON-LD', e);\n }\n return this.buildMovie(id, movieHtml, movieNode as HTMLElement, asideNode as HTMLElement, pageClasses, jsonLd, options);\n }\n\n private buildMovie(\n movieId: number,\n movieHtml: HTMLElement,\n el: HTMLElement,\n asideEl: HTMLElement,\n pageClasses: string[],\n jsonLd: MovieJsonLd | null,\n options: CSFDOptions\n ) {\n const type = getMovieType(el) as CSFDFilmTypes;\n const { seriesName = null, seasonName = null } =\n type === 'season' ? getSeriesAndSeasonTitle(el) : {};\n const seasonOrEpisodeListType = detectSeasonOrEpisodeListType(movieHtml);\n\n const title = type === 'season' && seriesName ? seriesName : getMovieTitle(el);\n return {\n id: movieId,\n title,\n year: getMovieYear(jsonLd),\n duration: getMovieDuration(jsonLd, el),\n descriptions: getMovieDescriptions(el),\n genres: getMovieGenres(el),\n type,\n url: movieUrl(movieId, { language: options?.language }),\n origins: getMovieOrigins(el),\n colorRating: getMovieColorRating(pageClasses),\n rating: getMovieRating(asideEl),\n ratingCount: getMovieRatingCount(asideEl),\n titlesOther: getMovieTitlesOther(el),\n poster: getMoviePoster(el),\n photo: getMovieRandomPhoto(el),\n trivia: getMovieTrivia(el),\n creators: getMovieCreators(el, options),\n vod: getMovieVods(el),\n tags: getMovieTags(asideEl),\n premieres: getMoviePremieres(asideEl),\n related: getMovieBoxMovies(asideEl, 'Související'),\n similar: getMovieBoxMovies(asideEl, 'Podobné'),\n seasons: seasonOrEpisodeListType === 'seasons' ? getSeasonsOrEpisodes(movieHtml) : null,\n episodes: seasonOrEpisodeListType === 'episodes' ? getSeasonsOrEpisodes(movieHtml) : null,\n parent: type === 'season' || type === 'episode' ? getSeasonOrEpisodeParent(el) : null,\n episodeCode: type === 'episode' ? getEpisodeCode(el) : null,\n seasonName\n };\n }\n}\n"],"mappings":";;;;;;AAkCA,IAAa,eAAb,MAA0B;CACxB,MAAa,MAAM,SAA0B,SAA2C;EACtF,MAAM,KAAKA,sBAAAA,UAAU,OAAO;EAC5B,IAAI,OAAO,QAAQ,MAAM,EAAE,GACzB,MAAM,IAAI,MAAM,+CAA+C;EAKjE,MAAM,aAAA,GAAA,iBAAA,MAAA,CAAkB,MAFDC,cAAAA,UADXC,aAAAA,SAAS,IAAI,EAAE,UAAU,SAAS,SAAS,CACpB,GAAG,EAAE,GAAG,SAAS,QAAQ,CAAC,CAE7B;EAEhC,MAAM,cAAc,UAAU,cAAc,eAAe,CAAC,CAAC,WAAW,MAAM,GAAG;EACjF,MAAM,YAAY,UAAU,cAAc,sBAAsB;EAChE,MAAM,YAAY,UAAU,cAAc,qBAAqB;EAC/D,MAAM,eAAe,UAAU,cAAc,sCAAoC,CAAC,EAAE;EACpF,IAAI,SAA6B;EACjC,IAAI;GACF,SAAS,KAAK,MAAM,YAAY;EAClC,SAAS,GAAG;GACV,QAAQ,MAAMC,aAAAA,aAAa,0BAA0B,CAAC;EACxD;EACA,OAAO,KAAK,WAAW,IAAI,WAAW,WAA0B,WAA0B,aAAa,QAAQ,OAAO;CACxH;CAEA,WACE,SACA,WACA,IACA,SACA,aACA,QACA,SACA;EACA,MAAM,OAAOC,qBAAAA,aAAa,EAAE;EAC5B,MAAM,EAAE,aAAa,MAAM,aAAa,SACtC,SAAS,WAAWC,qBAAAA,wBAAwB,EAAE,IAAI,CAAC;EACrD,MAAM,0BAA0BC,qBAAAA,8BAA8B,SAAS;EAGvE,OAAO;GACL,IAAI;GACJ,OAHY,SAAS,YAAY,aAAa,aAAaC,qBAAAA,cAAc,EAAE;GAI3E,MAAMC,qBAAAA,aAAa,MAAM;GACzB,UAAUC,qBAAAA,iBAAiB,QAAQ,EAAE;GACrC,cAAcC,qBAAAA,qBAAqB,EAAE;GACrC,QAAQC,qBAAAA,eAAe,EAAE;GACzB;GACA,KAAKT,aAAAA,SAAS,SAAS,EAAE,UAAU,SAAS,SAAS,CAAC;GACtD,SAASU,qBAAAA,gBAAgB,EAAE;GAC3B,aAAaC,qBAAAA,oBAAoB,WAAW;GAC5C,QAAQC,qBAAAA,eAAe,OAAO;GAC9B,aAAaC,qBAAAA,oBAAoB,OAAO;GACxC,aAAaC,qBAAAA,oBAAoB,EAAE;GACnC,QAAQC,qBAAAA,eAAe,EAAE;GACzB,OAAOC,qBAAAA,oBAAoB,EAAE;GAC7B,QAAQC,qBAAAA,eAAe,EAAE;GACzB,UAAUC,qBAAAA,iBAAiB,IAAI,OAAO;GACtC,KAAKC,qBAAAA,aAAa,EAAE;GACpB,MAAMC,qBAAAA,aAAa,OAAO;GAC1B,WAAWC,qBAAAA,kBAAkB,OAAO;GACpC,SAASC,qBAAAA,kBAAkB,SAAS,aAAa;GACjD,SAASA,qBAAAA,kBAAkB,SAAS,SAAS;GAC7C,SAAS,4BAA4B,YAAYC,qBAAAA,qBAAqB,SAAS,IAAI;GACnF,UAAU,4BAA4B,aAAaA,qBAAAA,qBAAqB,SAAS,IAAI;GACrF,QAAQ,SAAS,YAAY,SAAS,YAAYC,qBAAAA,yBAAyB,EAAE,IAAI;GACjF,aAAa,SAAS,YAAYC,qBAAAA,eAAe,EAAE,IAAI;GACvD;EACF;CACF;AACF"}