node-csfd-api 3.3.0 → 4.0.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dto/movie.d.mts +4 -2
- package/dto/movie.d.ts +4 -2
- package/dto/options.d.mts +9 -0
- package/dto/options.d.ts +9 -0
- package/dto/user-ratings.d.mts +2 -2
- package/dto/user-ratings.d.ts +2 -2
- package/helpers/cinema.helper.js.map +1 -1
- package/helpers/cinema.helper.mjs.map +1 -1
- package/helpers/creator.helper.js.map +1 -1
- package/helpers/creator.helper.mjs.map +1 -1
- package/helpers/global.helper.js.map +1 -1
- package/helpers/global.helper.mjs.map +1 -1
- package/helpers/movie.helper.js +57 -0
- package/helpers/movie.helper.js.map +1 -1
- package/helpers/movie.helper.mjs +57 -1
- package/helpers/movie.helper.mjs.map +1 -1
- package/helpers/search.helper.js.map +1 -1
- package/helpers/search.helper.mjs.map +1 -1
- package/helpers/user-ratings.helper.js.map +1 -1
- package/helpers/user-ratings.helper.mjs.map +1 -1
- package/helpers/user-reviews.helper.js.map +1 -1
- package/helpers/user-reviews.helper.mjs.map +1 -1
- package/index.d.mts +15 -15
- package/index.d.ts +15 -15
- package/index.js +23 -16
- package/index.js.map +1 -1
- package/index.mjs +23 -16
- package/index.mjs.map +1 -1
- package/package.json +1 -1
- package/services/cinema.service.d.mts +2 -1
- package/services/cinema.service.d.ts +2 -1
- package/services/cinema.service.js +2 -2
- package/services/cinema.service.js.map +1 -1
- package/services/cinema.service.mjs +2 -2
- package/services/cinema.service.mjs.map +1 -1
- package/services/creator.service.d.mts +2 -1
- package/services/creator.service.d.ts +2 -1
- package/services/creator.service.js +2 -2
- package/services/creator.service.js.map +1 -1
- package/services/creator.service.mjs +2 -2
- package/services/creator.service.mjs.map +1 -1
- package/services/movie.service.d.mts +2 -1
- package/services/movie.service.d.ts +2 -1
- package/services/movie.service.js +15 -15
- package/services/movie.service.js.map +1 -1
- package/services/movie.service.mjs +16 -16
- package/services/movie.service.mjs.map +1 -1
- package/services/search.service.d.mts +2 -1
- package/services/search.service.d.ts +2 -1
- package/services/search.service.js +8 -7
- package/services/search.service.js.map +1 -1
- package/services/search.service.mjs +9 -8
- package/services/search.service.mjs.map +1 -1
- package/services/user-ratings.service.d.mts +2 -1
- package/services/user-ratings.service.d.ts +2 -1
- package/services/user-ratings.service.js +4 -4
- package/services/user-ratings.service.js.map +1 -1
- package/services/user-ratings.service.mjs +4 -4
- package/services/user-ratings.service.mjs.map +1 -1
- package/services/user-reviews.service.d.mts +2 -1
- package/services/user-reviews.service.d.ts +2 -1
- package/services/user-reviews.service.js +4 -4
- package/services/user-reviews.service.js.map +1 -1
- package/services/user-reviews.service.mjs +4 -4
- package/services/user-reviews.service.mjs.map +1 -1
- package/vars.js +17 -7
- package/vars.js.map +1 -1
- package/vars.mjs +17 -8
- package/vars.mjs.map +1 -1
|
@@ -7,17 +7,17 @@ node_html_parser = require_rolldown_runtime.__toESM(node_html_parser);
|
|
|
7
7
|
|
|
8
8
|
//#region src/services/movie.service.ts
|
|
9
9
|
var MovieScraper = class {
|
|
10
|
-
async movie(movieId,
|
|
10
|
+
async movie(movieId, options) {
|
|
11
11
|
const id = Number(movieId);
|
|
12
12
|
if (isNaN(id)) throw new Error("node-csfd-api: movieId must be a valid number");
|
|
13
|
-
const movieHtml = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.movieUrl(id), { ...
|
|
13
|
+
const movieHtml = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.movieUrl(id, { language: options?.language }), { ...options?.request }));
|
|
14
14
|
const pageClasses = movieHtml.querySelector(".page-content").classNames.split(" ");
|
|
15
15
|
const asideNode = movieHtml.querySelector(".aside-movie-profile");
|
|
16
16
|
const movieNode = movieHtml.querySelector(".main-movie-profile");
|
|
17
17
|
const jsonLd = movieHtml.querySelector("script[type=\"application/ld+json\"]").innerText;
|
|
18
|
-
return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd);
|
|
18
|
+
return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd, options);
|
|
19
19
|
}
|
|
20
|
-
buildMovie(movieId, el, asideEl, pageClasses, jsonLd) {
|
|
20
|
+
buildMovie(movieId, el, asideEl, pageClasses, jsonLd, options) {
|
|
21
21
|
return {
|
|
22
22
|
id: movieId,
|
|
23
23
|
title: require_movie_helper.getMovieTitle(el),
|
|
@@ -26,7 +26,7 @@ var MovieScraper = class {
|
|
|
26
26
|
descriptions: require_movie_helper.getMovieDescriptions(el),
|
|
27
27
|
genres: require_movie_helper.getMovieGenres(el),
|
|
28
28
|
type: require_movie_helper.getMovieType(el),
|
|
29
|
-
url: require_vars.movieUrl(movieId),
|
|
29
|
+
url: require_vars.movieUrl(movieId, { language: options?.language }),
|
|
30
30
|
origins: require_movie_helper.getMovieOrigins(el),
|
|
31
31
|
colorRating: require_movie_helper.getMovieColorRating(pageClasses),
|
|
32
32
|
rating: require_movie_helper.getMovieRating(asideEl),
|
|
@@ -36,16 +36,16 @@ var MovieScraper = class {
|
|
|
36
36
|
photo: require_movie_helper.getMovieRandomPhoto(el),
|
|
37
37
|
trivia: require_movie_helper.getMovieTrivia(el),
|
|
38
38
|
creators: {
|
|
39
|
-
directors: require_movie_helper.getMovieGroup(el, "
|
|
40
|
-
writers: require_movie_helper.getMovieGroup(el, "
|
|
41
|
-
cinematography: require_movie_helper.getMovieGroup(el, "
|
|
42
|
-
music: require_movie_helper.getMovieGroup(el, "
|
|
43
|
-
actors: require_movie_helper.getMovieGroup(el, "
|
|
44
|
-
basedOn: require_movie_helper.getMovieGroup(el, "
|
|
45
|
-
producers: require_movie_helper.getMovieGroup(el, "
|
|
46
|
-
filmEditing: require_movie_helper.getMovieGroup(el, "
|
|
47
|
-
costumeDesign: require_movie_helper.getMovieGroup(el, "
|
|
48
|
-
productionDesign: require_movie_helper.getMovieGroup(el, "
|
|
39
|
+
directors: require_movie_helper.getMovieGroup(el, require_movie_helper.getLocalizedCreatorLabel(options?.language, "directors")),
|
|
40
|
+
writers: require_movie_helper.getMovieGroup(el, require_movie_helper.getLocalizedCreatorLabel(options?.language, "writers")),
|
|
41
|
+
cinematography: require_movie_helper.getMovieGroup(el, require_movie_helper.getLocalizedCreatorLabel(options?.language, "cinematography")),
|
|
42
|
+
music: require_movie_helper.getMovieGroup(el, require_movie_helper.getLocalizedCreatorLabel(options?.language, "music")),
|
|
43
|
+
actors: require_movie_helper.getMovieGroup(el, require_movie_helper.getLocalizedCreatorLabel(options?.language, "actors")),
|
|
44
|
+
basedOn: require_movie_helper.getMovieGroup(el, require_movie_helper.getLocalizedCreatorLabel(options?.language, "basedOn")),
|
|
45
|
+
producers: require_movie_helper.getMovieGroup(el, require_movie_helper.getLocalizedCreatorLabel(options?.language, "producers")),
|
|
46
|
+
filmEditing: require_movie_helper.getMovieGroup(el, require_movie_helper.getLocalizedCreatorLabel(options?.language, "filmEditing")),
|
|
47
|
+
costumeDesign: require_movie_helper.getMovieGroup(el, require_movie_helper.getLocalizedCreatorLabel(options?.language, "costumeDesign")),
|
|
48
|
+
productionDesign: require_movie_helper.getMovieGroup(el, require_movie_helper.getLocalizedCreatorLabel(options?.language, "productionDesign"))
|
|
49
49
|
},
|
|
50
50
|
vod: require_movie_helper.getMovieVods(asideEl),
|
|
51
51
|
tags: require_movie_helper.getMovieTags(asideEl),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"movie.service.js","names":["fetchPage","movieUrl","getMovieTitle","getMovieYear","getMovieDuration","getMovieDescriptions","getMovieGenres","getMovieType","getMovieOrigins","getMovieColorRating","getMovieRating","getMovieRatingCount","getMovieTitlesOther","getMoviePoster","getMovieRandomPhoto","getMovieTrivia","getMovieGroup","getMovieVods","getMovieTags","getMoviePremieres","getMovieBoxMovies"],"sources":["../../src/services/movie.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovie } from '../dto/movie';\nimport { fetchPage } from '../fetchers';\nimport {\n getMovieBoxMovies,\n getMovieColorRating,\n getMovieDescriptions,\n getMovieDuration,\n getMovieGenres,\n getMovieGroup,\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} from '../helpers/movie.helper';\nimport { movieUrl } from '../vars';\n\nexport class MovieScraper {\n public async movie(movieId: number,
|
|
1
|
+
{"version":3,"file":"movie.service.js","names":["fetchPage","movieUrl","getMovieTitle","getMovieYear","getMovieDuration","getMovieDescriptions","getMovieGenres","getMovieType","getMovieOrigins","getMovieColorRating","getMovieRating","getMovieRatingCount","getMovieTitlesOther","getMoviePoster","getMovieRandomPhoto","getMovieTrivia","getMovieGroup","getLocalizedCreatorLabel","getMovieVods","getMovieTags","getMoviePremieres","getMovieBoxMovies"],"sources":["../../src/services/movie.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovie } from '../dto/movie';\nimport { fetchPage } from '../fetchers';\nimport {\n getLocalizedCreatorLabel,\n getMovieBoxMovies,\n getMovieColorRating,\n getMovieDescriptions,\n getMovieDuration,\n getMovieGenres,\n getMovieGroup,\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} from '../helpers/movie.helper';\nimport { CSFDOptions } from '../types';\nimport { movieUrl } from '../vars';\n\nexport class MovieScraper {\n public async movie(movieId: number, options?: CSFDOptions): Promise<CSFDMovie> {\n const id = Number(movieId);\n if (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 jsonLd = movieHtml.querySelector('script[type=\"application/ld+json\"]').innerText;\n return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd, options);\n }\n\n private buildMovie(\n movieId: number,\n el: HTMLElement,\n asideEl: HTMLElement,\n pageClasses: string[],\n jsonLd: string,\n options: CSFDOptions\n ): CSFDMovie {\n return {\n id: movieId,\n title: getMovieTitle(el),\n year: getMovieYear(jsonLd),\n duration: getMovieDuration(jsonLd, el),\n descriptions: getMovieDescriptions(el),\n genres: getMovieGenres(el),\n type: getMovieType(el) as CSFDFilmTypes,\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: {\n directors: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'directors')),\n writers: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'writers')),\n cinematography: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'cinematography')),\n music: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'music')),\n actors: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'actors')),\n basedOn: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'basedOn')),\n producers: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'producers')),\n filmEditing: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'filmEditing')),\n costumeDesign: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'costumeDesign')),\n productionDesign: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'productionDesign'))\n },\n vod: getMovieVods(asideEl),\n tags: getMovieTags(asideEl),\n premieres: getMoviePremieres(asideEl),\n related: getMovieBoxMovies(asideEl, 'Související'),\n similar: getMovieBoxMovies(asideEl, 'Podobné')\n };\n }\n}\n"],"mappings":";;;;;;;;AA6BA,IAAa,eAAb,MAA0B;CACxB,MAAa,MAAM,SAAiB,SAA2C;EAC7E,MAAM,KAAK,OAAO,QAAQ;AAC1B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,gDAAgD;EAKlE,MAAM,wCAFW,MAAMA,wBADXC,sBAAS,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACnB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE7B;EAEjC,MAAM,cAAc,UAAU,cAAc,gBAAgB,CAAC,WAAW,MAAM,IAAI;EAClF,MAAM,YAAY,UAAU,cAAc,uBAAuB;EACjE,MAAM,YAAY,UAAU,cAAc,sBAAsB;EAChE,MAAM,SAAS,UAAU,cAAc,uCAAqC,CAAC;AAC7E,SAAO,KAAK,WAAW,CAAC,SAAS,WAAW,WAAW,aAAa,QAAQ,QAAQ;;CAGtF,AAAQ,WACN,SACA,IACA,SACA,aACA,QACA,SACW;AACX,SAAO;GACL,IAAI;GACJ,OAAOC,mCAAc,GAAG;GACxB,MAAMC,kCAAa,OAAO;GAC1B,UAAUC,sCAAiB,QAAQ,GAAG;GACtC,cAAcC,0CAAqB,GAAG;GACtC,QAAQC,oCAAe,GAAG;GAC1B,MAAMC,kCAAa,GAAG;GACtB,KAAKN,sBAAS,SAAS,EAAE,UAAU,SAAS,UAAU,CAAC;GACvD,SAASO,qCAAgB,GAAG;GAC5B,aAAaC,yCAAoB,YAAY;GAC7C,QAAQC,oCAAe,QAAQ;GAC/B,aAAaC,yCAAoB,QAAQ;GACzC,aAAaC,yCAAoB,GAAG;GACpC,QAAQC,oCAAe,GAAG;GAC1B,OAAOC,yCAAoB,GAAG;GAC9B,QAAQC,oCAAe,GAAG;GAC1B,UAAU;IACR,WAAWC,mCAAc,IAAIC,8CAAyB,SAAS,UAAU,YAAY,CAAC;IACtF,SAASD,mCAAc,IAAIC,8CAAyB,SAAS,UAAU,UAAU,CAAC;IAClF,gBAAgBD,mCAAc,IAAIC,8CAAyB,SAAS,UAAU,iBAAiB,CAAC;IAChG,OAAOD,mCAAc,IAAIC,8CAAyB,SAAS,UAAU,QAAQ,CAAC;IAC9E,QAAQD,mCAAc,IAAIC,8CAAyB,SAAS,UAAU,SAAS,CAAC;IAChF,SAASD,mCAAc,IAAIC,8CAAyB,SAAS,UAAU,UAAU,CAAC;IAClF,WAAWD,mCAAc,IAAIC,8CAAyB,SAAS,UAAU,YAAY,CAAC;IACtF,aAAaD,mCAAc,IAAIC,8CAAyB,SAAS,UAAU,cAAc,CAAC;IAC1F,eAAeD,mCAAc,IAAIC,8CAAyB,SAAS,UAAU,gBAAgB,CAAC;IAC9F,kBAAkBD,mCAAc,IAAIC,8CAAyB,SAAS,UAAU,mBAAmB,CAAC;IACrG;GACD,KAAKC,kCAAa,QAAQ;GAC1B,MAAMC,kCAAa,QAAQ;GAC3B,WAAWC,uCAAkB,QAAQ;GACrC,SAASC,uCAAkB,SAAS,cAAc;GAClD,SAASA,uCAAkB,SAAS,UAAU;GAC/C"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { fetchPage } from "../fetchers/index.mjs";
|
|
2
2
|
import { movieUrl } from "../vars.mjs";
|
|
3
|
-
import { getMovieBoxMovies, getMovieColorRating, getMovieDescriptions, getMovieDuration, getMovieGenres, getMovieGroup, getMovieOrigins, getMoviePoster, getMoviePremieres, getMovieRandomPhoto, getMovieRating, getMovieRatingCount, getMovieTags, getMovieTitle, getMovieTitlesOther, getMovieTrivia, getMovieType, getMovieVods, getMovieYear } from "../helpers/movie.helper.mjs";
|
|
3
|
+
import { getLocalizedCreatorLabel, getMovieBoxMovies, getMovieColorRating, getMovieDescriptions, getMovieDuration, getMovieGenres, getMovieGroup, getMovieOrigins, getMoviePoster, getMoviePremieres, getMovieRandomPhoto, getMovieRating, getMovieRatingCount, getMovieTags, getMovieTitle, getMovieTitlesOther, getMovieTrivia, getMovieType, getMovieVods, getMovieYear } from "../helpers/movie.helper.mjs";
|
|
4
4
|
import { parse } from "node-html-parser";
|
|
5
5
|
|
|
6
6
|
//#region src/services/movie.service.ts
|
|
7
7
|
var MovieScraper = class {
|
|
8
|
-
async movie(movieId,
|
|
8
|
+
async movie(movieId, options) {
|
|
9
9
|
const id = Number(movieId);
|
|
10
10
|
if (isNaN(id)) throw new Error("node-csfd-api: movieId must be a valid number");
|
|
11
|
-
const movieHtml = parse(await fetchPage(movieUrl(id), { ...
|
|
11
|
+
const movieHtml = parse(await fetchPage(movieUrl(id, { language: options?.language }), { ...options?.request }));
|
|
12
12
|
const pageClasses = movieHtml.querySelector(".page-content").classNames.split(" ");
|
|
13
13
|
const asideNode = movieHtml.querySelector(".aside-movie-profile");
|
|
14
14
|
const movieNode = movieHtml.querySelector(".main-movie-profile");
|
|
15
15
|
const jsonLd = movieHtml.querySelector("script[type=\"application/ld+json\"]").innerText;
|
|
16
|
-
return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd);
|
|
16
|
+
return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd, options);
|
|
17
17
|
}
|
|
18
|
-
buildMovie(movieId, el, asideEl, pageClasses, jsonLd) {
|
|
18
|
+
buildMovie(movieId, el, asideEl, pageClasses, jsonLd, options) {
|
|
19
19
|
return {
|
|
20
20
|
id: movieId,
|
|
21
21
|
title: getMovieTitle(el),
|
|
@@ -24,7 +24,7 @@ var MovieScraper = class {
|
|
|
24
24
|
descriptions: getMovieDescriptions(el),
|
|
25
25
|
genres: getMovieGenres(el),
|
|
26
26
|
type: getMovieType(el),
|
|
27
|
-
url: movieUrl(movieId),
|
|
27
|
+
url: movieUrl(movieId, { language: options?.language }),
|
|
28
28
|
origins: getMovieOrigins(el),
|
|
29
29
|
colorRating: getMovieColorRating(pageClasses),
|
|
30
30
|
rating: getMovieRating(asideEl),
|
|
@@ -34,16 +34,16 @@ var MovieScraper = class {
|
|
|
34
34
|
photo: getMovieRandomPhoto(el),
|
|
35
35
|
trivia: getMovieTrivia(el),
|
|
36
36
|
creators: {
|
|
37
|
-
directors: getMovieGroup(el, "
|
|
38
|
-
writers: getMovieGroup(el, "
|
|
39
|
-
cinematography: getMovieGroup(el, "
|
|
40
|
-
music: getMovieGroup(el, "
|
|
41
|
-
actors: getMovieGroup(el, "
|
|
42
|
-
basedOn: getMovieGroup(el, "
|
|
43
|
-
producers: getMovieGroup(el, "
|
|
44
|
-
filmEditing: getMovieGroup(el, "
|
|
45
|
-
costumeDesign: getMovieGroup(el, "
|
|
46
|
-
productionDesign: getMovieGroup(el, "
|
|
37
|
+
directors: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, "directors")),
|
|
38
|
+
writers: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, "writers")),
|
|
39
|
+
cinematography: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, "cinematography")),
|
|
40
|
+
music: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, "music")),
|
|
41
|
+
actors: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, "actors")),
|
|
42
|
+
basedOn: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, "basedOn")),
|
|
43
|
+
producers: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, "producers")),
|
|
44
|
+
filmEditing: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, "filmEditing")),
|
|
45
|
+
costumeDesign: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, "costumeDesign")),
|
|
46
|
+
productionDesign: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, "productionDesign"))
|
|
47
47
|
},
|
|
48
48
|
vod: getMovieVods(asideEl),
|
|
49
49
|
tags: getMovieTags(asideEl),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"movie.service.mjs","names":[],"sources":["../../src/services/movie.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovie } from '../dto/movie';\nimport { fetchPage } from '../fetchers';\nimport {\n getMovieBoxMovies,\n getMovieColorRating,\n getMovieDescriptions,\n getMovieDuration,\n getMovieGenres,\n getMovieGroup,\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} from '../helpers/movie.helper';\nimport { movieUrl } from '../vars';\n\nexport class MovieScraper {\n public async movie(movieId: number,
|
|
1
|
+
{"version":3,"file":"movie.service.mjs","names":[],"sources":["../../src/services/movie.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovie } from '../dto/movie';\nimport { fetchPage } from '../fetchers';\nimport {\n getLocalizedCreatorLabel,\n getMovieBoxMovies,\n getMovieColorRating,\n getMovieDescriptions,\n getMovieDuration,\n getMovieGenres,\n getMovieGroup,\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} from '../helpers/movie.helper';\nimport { CSFDOptions } from '../types';\nimport { movieUrl } from '../vars';\n\nexport class MovieScraper {\n public async movie(movieId: number, options?: CSFDOptions): Promise<CSFDMovie> {\n const id = Number(movieId);\n if (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 jsonLd = movieHtml.querySelector('script[type=\"application/ld+json\"]').innerText;\n return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd, options);\n }\n\n private buildMovie(\n movieId: number,\n el: HTMLElement,\n asideEl: HTMLElement,\n pageClasses: string[],\n jsonLd: string,\n options: CSFDOptions\n ): CSFDMovie {\n return {\n id: movieId,\n title: getMovieTitle(el),\n year: getMovieYear(jsonLd),\n duration: getMovieDuration(jsonLd, el),\n descriptions: getMovieDescriptions(el),\n genres: getMovieGenres(el),\n type: getMovieType(el) as CSFDFilmTypes,\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: {\n directors: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'directors')),\n writers: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'writers')),\n cinematography: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'cinematography')),\n music: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'music')),\n actors: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'actors')),\n basedOn: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'basedOn')),\n producers: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'producers')),\n filmEditing: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'filmEditing')),\n costumeDesign: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'costumeDesign')),\n productionDesign: getMovieGroup(el, getLocalizedCreatorLabel(options?.language, 'productionDesign'))\n },\n vod: getMovieVods(asideEl),\n tags: getMovieTags(asideEl),\n premieres: getMoviePremieres(asideEl),\n related: getMovieBoxMovies(asideEl, 'Související'),\n similar: getMovieBoxMovies(asideEl, 'Podobné')\n };\n }\n}\n"],"mappings":";;;;;;AA6BA,IAAa,eAAb,MAA0B;CACxB,MAAa,MAAM,SAAiB,SAA2C;EAC7E,MAAM,KAAK,OAAO,QAAQ;AAC1B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,gDAAgD;EAKlE,MAAM,YAAY,MAFD,MAAM,UADX,SAAS,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACnB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE7B;EAEjC,MAAM,cAAc,UAAU,cAAc,gBAAgB,CAAC,WAAW,MAAM,IAAI;EAClF,MAAM,YAAY,UAAU,cAAc,uBAAuB;EACjE,MAAM,YAAY,UAAU,cAAc,sBAAsB;EAChE,MAAM,SAAS,UAAU,cAAc,uCAAqC,CAAC;AAC7E,SAAO,KAAK,WAAW,CAAC,SAAS,WAAW,WAAW,aAAa,QAAQ,QAAQ;;CAGtF,AAAQ,WACN,SACA,IACA,SACA,aACA,QACA,SACW;AACX,SAAO;GACL,IAAI;GACJ,OAAO,cAAc,GAAG;GACxB,MAAM,aAAa,OAAO;GAC1B,UAAU,iBAAiB,QAAQ,GAAG;GACtC,cAAc,qBAAqB,GAAG;GACtC,QAAQ,eAAe,GAAG;GAC1B,MAAM,aAAa,GAAG;GACtB,KAAK,SAAS,SAAS,EAAE,UAAU,SAAS,UAAU,CAAC;GACvD,SAAS,gBAAgB,GAAG;GAC5B,aAAa,oBAAoB,YAAY;GAC7C,QAAQ,eAAe,QAAQ;GAC/B,aAAa,oBAAoB,QAAQ;GACzC,aAAa,oBAAoB,GAAG;GACpC,QAAQ,eAAe,GAAG;GAC1B,OAAO,oBAAoB,GAAG;GAC9B,QAAQ,eAAe,GAAG;GAC1B,UAAU;IACR,WAAW,cAAc,IAAI,yBAAyB,SAAS,UAAU,YAAY,CAAC;IACtF,SAAS,cAAc,IAAI,yBAAyB,SAAS,UAAU,UAAU,CAAC;IAClF,gBAAgB,cAAc,IAAI,yBAAyB,SAAS,UAAU,iBAAiB,CAAC;IAChG,OAAO,cAAc,IAAI,yBAAyB,SAAS,UAAU,QAAQ,CAAC;IAC9E,QAAQ,cAAc,IAAI,yBAAyB,SAAS,UAAU,SAAS,CAAC;IAChF,SAAS,cAAc,IAAI,yBAAyB,SAAS,UAAU,UAAU,CAAC;IAClF,WAAW,cAAc,IAAI,yBAAyB,SAAS,UAAU,YAAY,CAAC;IACtF,aAAa,cAAc,IAAI,yBAAyB,SAAS,UAAU,cAAc,CAAC;IAC1F,eAAe,cAAc,IAAI,yBAAyB,SAAS,UAAU,gBAAgB,CAAC;IAC9F,kBAAkB,cAAc,IAAI,yBAAyB,SAAS,UAAU,mBAAmB,CAAC;IACrG;GACD,KAAK,aAAa,QAAQ;GAC1B,MAAM,aAAa,QAAQ;GAC3B,WAAW,kBAAkB,QAAQ;GACrC,SAAS,kBAAkB,SAAS,cAAc;GAClD,SAAS,kBAAkB,SAAS,UAAU;GAC/C"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { CSFDSearch } from "../dto/search.mjs";
|
|
2
|
+
import { CSFDOptions } from "../dto/options.mjs";
|
|
2
3
|
|
|
3
4
|
//#region src/services/search.service.d.ts
|
|
4
5
|
declare class SearchScraper {
|
|
5
|
-
search(text: string,
|
|
6
|
+
search(text: string, options?: CSFDOptions): Promise<CSFDSearch>;
|
|
6
7
|
private parseSearch;
|
|
7
8
|
}
|
|
8
9
|
//#endregion
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { CSFDSearch } from "../dto/search.js";
|
|
2
|
+
import { CSFDOptions } from "../dto/options.js";
|
|
2
3
|
|
|
3
4
|
//#region src/services/search.service.d.ts
|
|
4
5
|
declare class SearchScraper {
|
|
5
|
-
search(text: string,
|
|
6
|
+
search(text: string, options?: CSFDOptions): Promise<CSFDSearch>;
|
|
6
7
|
private parseSearch;
|
|
7
8
|
}
|
|
8
9
|
//#endregion
|
|
@@ -9,24 +9,25 @@ node_html_parser = require_rolldown_runtime.__toESM(node_html_parser);
|
|
|
9
9
|
|
|
10
10
|
//#region src/services/search.service.ts
|
|
11
11
|
var SearchScraper = class {
|
|
12
|
-
async search(text,
|
|
13
|
-
const html = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.searchUrl(text), { ...
|
|
12
|
+
async search(text, options) {
|
|
13
|
+
const html = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.searchUrl(text, { language: options?.language }), { ...options?.request }));
|
|
14
14
|
const moviesNode = html.querySelectorAll(".main-movies article");
|
|
15
15
|
const usersNode = html.querySelectorAll(".main-users article");
|
|
16
16
|
const tvSeriesNode = html.querySelectorAll(".main-series article");
|
|
17
|
-
return this.parseSearch(moviesNode, usersNode, tvSeriesNode);
|
|
17
|
+
return this.parseSearch(moviesNode, usersNode, tvSeriesNode, options?.language);
|
|
18
18
|
}
|
|
19
|
-
parseSearch(moviesNode, usersNode, tvSeriesNode) {
|
|
19
|
+
parseSearch(moviesNode, usersNode, tvSeriesNode, language) {
|
|
20
20
|
const movies = [];
|
|
21
21
|
const users = [];
|
|
22
22
|
const tvSeries = [];
|
|
23
|
+
const baseUrl = require_vars.getUrlByLanguage(language);
|
|
23
24
|
moviesNode.forEach((m) => {
|
|
24
25
|
const url = require_search_helper.getSearchUrl(m);
|
|
25
26
|
const movie = {
|
|
26
27
|
id: require_global_helper.parseIdFromUrl(url),
|
|
27
28
|
title: require_search_helper.getSearchTitle(m),
|
|
28
29
|
year: require_search_helper.getSearchYear(m),
|
|
29
|
-
url:
|
|
30
|
+
url: `${baseUrl}${url}`,
|
|
30
31
|
type: require_search_helper.getSearchType(m),
|
|
31
32
|
colorRating: require_search_helper.getSearchColorRating(m),
|
|
32
33
|
poster: require_search_helper.getSearchPoster(m),
|
|
@@ -45,7 +46,7 @@ var SearchScraper = class {
|
|
|
45
46
|
user: require_search_user_helper.getUser(m),
|
|
46
47
|
userRealName: require_search_user_helper.getUserRealName(m),
|
|
47
48
|
avatar: require_search_user_helper.getAvatar(m),
|
|
48
|
-
url:
|
|
49
|
+
url: `${baseUrl}${url}`
|
|
49
50
|
};
|
|
50
51
|
users.push(user);
|
|
51
52
|
});
|
|
@@ -55,7 +56,7 @@ var SearchScraper = class {
|
|
|
55
56
|
id: require_global_helper.parseIdFromUrl(url),
|
|
56
57
|
title: require_search_helper.getSearchTitle(m),
|
|
57
58
|
year: require_search_helper.getSearchYear(m),
|
|
58
|
-
url:
|
|
59
|
+
url: `${baseUrl}${url}`,
|
|
59
60
|
type: require_search_helper.getSearchType(m),
|
|
60
61
|
colorRating: require_search_helper.getSearchColorRating(m),
|
|
61
62
|
poster: require_search_helper.getSearchPoster(m),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.service.js","names":["fetchPage","searchUrl","movies: CSFDSearchMovie[]","users: CSFDSearchUser[]","tvSeries: CSFDSearchMovie[]","getSearchUrl","movie: CSFDSearchMovie","parseIdFromUrl","getSearchTitle","getSearchYear","getSearchType","getSearchColorRating","getSearchPoster","getSearchOrigins","parseSearchPeople","getUserUrl","user: CSFDSearchUser","getUser","getUserRealName","getAvatar","user: CSFDSearchMovie"],"sources":["../../src/services/search.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDSearch, CSFDSearchMovie, CSFDSearchUser } from '../dto/search';\nimport { fetchPage } from '../fetchers';\nimport { parseIdFromUrl } from '../helpers/global.helper';\nimport { getAvatar, getUser, getUserRealName, getUserUrl } from '../helpers/search-user.helper';\nimport {\n getSearchColorRating,\n getSearchOrigins,\n getSearchPoster,\n getSearchTitle,\n getSearchType,\n getSearchUrl,\n getSearchYear,\n parseSearchPeople\n} from '../helpers/search.helper';\nimport { searchUrl } from '../vars';\n\nexport class SearchScraper {\n public async search(text: string,
|
|
1
|
+
{"version":3,"file":"search.service.js","names":["fetchPage","searchUrl","movies: CSFDSearchMovie[]","users: CSFDSearchUser[]","tvSeries: CSFDSearchMovie[]","getUrlByLanguage","getSearchUrl","movie: CSFDSearchMovie","parseIdFromUrl","getSearchTitle","getSearchYear","getSearchType","getSearchColorRating","getSearchPoster","getSearchOrigins","parseSearchPeople","getUserUrl","user: CSFDSearchUser","getUser","getUserRealName","getAvatar","user: CSFDSearchMovie"],"sources":["../../src/services/search.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDSearch, CSFDSearchMovie, CSFDSearchUser } from '../dto/search';\nimport { fetchPage } from '../fetchers';\nimport { parseIdFromUrl } from '../helpers/global.helper';\nimport { getAvatar, getUser, getUserRealName, getUserUrl } from '../helpers/search-user.helper';\nimport {\n getSearchColorRating,\n getSearchOrigins,\n getSearchPoster,\n getSearchTitle,\n getSearchType,\n getSearchUrl,\n getSearchYear,\n parseSearchPeople\n} from '../helpers/search.helper';\nimport { CSFDLanguage, CSFDOptions } from '../types';\nimport { getUrlByLanguage, searchUrl } from '../vars';\n\nexport class SearchScraper {\n public async search(text: string, options?: CSFDOptions): Promise<CSFDSearch> {\n const url = searchUrl(text, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const html = parse(response);\n const moviesNode = html.querySelectorAll('.main-movies article');\n const usersNode = html.querySelectorAll('.main-users article');\n const tvSeriesNode = html.querySelectorAll('.main-series article');\n\n return this.parseSearch(moviesNode, usersNode, tvSeriesNode, options?.language);\n }\n\n private parseSearch(\n moviesNode: HTMLElement[],\n usersNode: HTMLElement[],\n tvSeriesNode: HTMLElement[],\n language?: CSFDLanguage\n ) {\n const movies: CSFDSearchMovie[] = [];\n const users: CSFDSearchUser[] = [];\n const tvSeries: CSFDSearchMovie[] = [];\n const baseUrl = getUrlByLanguage(language);\n\n moviesNode.forEach((m) => {\n const url = getSearchUrl(m);\n\n const movie: CSFDSearchMovie = {\n id: parseIdFromUrl(url),\n title: getSearchTitle(m),\n year: getSearchYear(m),\n url: `${baseUrl}${url}`,\n type: getSearchType(m),\n colorRating: getSearchColorRating(m),\n poster: getSearchPoster(m),\n origins: getSearchOrigins(m),\n creators: {\n directors: parseSearchPeople(m, 'directors'),\n actors: parseSearchPeople(m, 'actors')\n }\n };\n movies.push(movie);\n });\n\n usersNode.forEach((m) => {\n const url = getUserUrl(m);\n\n const user: CSFDSearchUser = {\n id: parseIdFromUrl(url),\n user: getUser(m),\n userRealName: getUserRealName(m),\n avatar: getAvatar(m),\n url: `${baseUrl}${url}`\n };\n users.push(user);\n });\n\n tvSeriesNode.forEach((m) => {\n const url = getSearchUrl(m);\n\n const user: CSFDSearchMovie = {\n id: parseIdFromUrl(url),\n title: getSearchTitle(m),\n year: getSearchYear(m),\n url: `${baseUrl}${url}`,\n type: getSearchType(m),\n colorRating: getSearchColorRating(m),\n poster: getSearchPoster(m),\n origins: getSearchOrigins(m),\n creators: {\n directors: parseSearchPeople(m, 'directors'),\n actors: parseSearchPeople(m, 'actors')\n }\n };\n tvSeries.push(user);\n });\n\n const search: CSFDSearch = {\n movies: movies,\n users: users,\n tvSeries: tvSeries,\n creators: []\n };\n return search;\n }\n}\n"],"mappings":";;;;;;;;;;AAkBA,IAAa,gBAAb,MAA2B;CACzB,MAAa,OAAO,MAAc,SAA4C;EAI5E,MAAM,mCAFW,MAAMA,wBADXC,uBAAU,MAAM,EAAE,UAAU,SAAS,UAAU,CAAC,EACtB,EAAE,GAAG,SAAS,SAAS,CAAC,CAElC;EAC5B,MAAM,aAAa,KAAK,iBAAiB,uBAAuB;EAChE,MAAM,YAAY,KAAK,iBAAiB,sBAAsB;EAC9D,MAAM,eAAe,KAAK,iBAAiB,uBAAuB;AAElE,SAAO,KAAK,YAAY,YAAY,WAAW,cAAc,SAAS,SAAS;;CAGjF,AAAQ,YACN,YACA,WACA,cACA,UACA;EACA,MAAMC,SAA4B,EAAE;EACpC,MAAMC,QAA0B,EAAE;EAClC,MAAMC,WAA8B,EAAE;EACtC,MAAM,UAAUC,8BAAiB,SAAS;AAE1C,aAAW,SAAS,MAAM;GACxB,MAAM,MAAMC,mCAAa,EAAE;GAE3B,MAAMC,QAAyB;IAC7B,IAAIC,qCAAe,IAAI;IACvB,OAAOC,qCAAe,EAAE;IACxB,MAAMC,oCAAc,EAAE;IACtB,KAAK,GAAG,UAAU;IAClB,MAAMC,oCAAc,EAAE;IACtB,aAAaC,2CAAqB,EAAE;IACpC,QAAQC,sCAAgB,EAAE;IAC1B,SAASC,uCAAiB,EAAE;IAC5B,UAAU;KACR,WAAWC,wCAAkB,GAAG,YAAY;KAC5C,QAAQA,wCAAkB,GAAG,SAAS;KACvC;IACF;AACD,UAAO,KAAK,MAAM;IAClB;AAEF,YAAU,SAAS,MAAM;GACvB,MAAM,MAAMC,sCAAW,EAAE;GAEzB,MAAMC,OAAuB;IAC3B,IAAIT,qCAAe,IAAI;IACvB,MAAMU,mCAAQ,EAAE;IAChB,cAAcC,2CAAgB,EAAE;IAChC,QAAQC,qCAAU,EAAE;IACpB,KAAK,GAAG,UAAU;IACnB;AACD,SAAM,KAAK,KAAK;IAChB;AAEF,eAAa,SAAS,MAAM;GAC1B,MAAM,MAAMd,mCAAa,EAAE;GAE3B,MAAMe,OAAwB;IAC5B,IAAIb,qCAAe,IAAI;IACvB,OAAOC,qCAAe,EAAE;IACxB,MAAMC,oCAAc,EAAE;IACtB,KAAK,GAAG,UAAU;IAClB,MAAMC,oCAAc,EAAE;IACtB,aAAaC,2CAAqB,EAAE;IACpC,QAAQC,sCAAgB,EAAE;IAC1B,SAASC,uCAAiB,EAAE;IAC5B,UAAU;KACR,WAAWC,wCAAkB,GAAG,YAAY;KAC5C,QAAQA,wCAAkB,GAAG,SAAS;KACvC;IACF;AACD,YAAS,KAAK,KAAK;IACnB;AAQF,SAN2B;GACjB;GACD;GACG;GACV,UAAU,EAAE;GACb"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { fetchPage } from "../fetchers/index.mjs";
|
|
2
|
-
import { searchUrl } from "../vars.mjs";
|
|
2
|
+
import { getUrlByLanguage, searchUrl } from "../vars.mjs";
|
|
3
3
|
import { parseIdFromUrl } from "../helpers/global.helper.mjs";
|
|
4
4
|
import { getAvatar, getUser, getUserRealName, getUserUrl } from "../helpers/search-user.helper.mjs";
|
|
5
5
|
import { getSearchColorRating, getSearchOrigins, getSearchPoster, getSearchTitle, getSearchType, getSearchUrl, getSearchYear, parseSearchPeople } from "../helpers/search.helper.mjs";
|
|
@@ -7,24 +7,25 @@ import { parse } from "node-html-parser";
|
|
|
7
7
|
|
|
8
8
|
//#region src/services/search.service.ts
|
|
9
9
|
var SearchScraper = class {
|
|
10
|
-
async search(text,
|
|
11
|
-
const html = parse(await fetchPage(searchUrl(text), { ...
|
|
10
|
+
async search(text, options) {
|
|
11
|
+
const html = parse(await fetchPage(searchUrl(text, { language: options?.language }), { ...options?.request }));
|
|
12
12
|
const moviesNode = html.querySelectorAll(".main-movies article");
|
|
13
13
|
const usersNode = html.querySelectorAll(".main-users article");
|
|
14
14
|
const tvSeriesNode = html.querySelectorAll(".main-series article");
|
|
15
|
-
return this.parseSearch(moviesNode, usersNode, tvSeriesNode);
|
|
15
|
+
return this.parseSearch(moviesNode, usersNode, tvSeriesNode, options?.language);
|
|
16
16
|
}
|
|
17
|
-
parseSearch(moviesNode, usersNode, tvSeriesNode) {
|
|
17
|
+
parseSearch(moviesNode, usersNode, tvSeriesNode, language) {
|
|
18
18
|
const movies = [];
|
|
19
19
|
const users = [];
|
|
20
20
|
const tvSeries = [];
|
|
21
|
+
const baseUrl = getUrlByLanguage(language);
|
|
21
22
|
moviesNode.forEach((m) => {
|
|
22
23
|
const url = getSearchUrl(m);
|
|
23
24
|
const movie = {
|
|
24
25
|
id: parseIdFromUrl(url),
|
|
25
26
|
title: getSearchTitle(m),
|
|
26
27
|
year: getSearchYear(m),
|
|
27
|
-
url:
|
|
28
|
+
url: `${baseUrl}${url}`,
|
|
28
29
|
type: getSearchType(m),
|
|
29
30
|
colorRating: getSearchColorRating(m),
|
|
30
31
|
poster: getSearchPoster(m),
|
|
@@ -43,7 +44,7 @@ var SearchScraper = class {
|
|
|
43
44
|
user: getUser(m),
|
|
44
45
|
userRealName: getUserRealName(m),
|
|
45
46
|
avatar: getAvatar(m),
|
|
46
|
-
url:
|
|
47
|
+
url: `${baseUrl}${url}`
|
|
47
48
|
};
|
|
48
49
|
users.push(user);
|
|
49
50
|
});
|
|
@@ -53,7 +54,7 @@ var SearchScraper = class {
|
|
|
53
54
|
id: parseIdFromUrl(url),
|
|
54
55
|
title: getSearchTitle(m),
|
|
55
56
|
year: getSearchYear(m),
|
|
56
|
-
url:
|
|
57
|
+
url: `${baseUrl}${url}`,
|
|
57
58
|
type: getSearchType(m),
|
|
58
59
|
colorRating: getSearchColorRating(m),
|
|
59
60
|
poster: getSearchPoster(m),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.service.mjs","names":["movies: CSFDSearchMovie[]","users: CSFDSearchUser[]","tvSeries: CSFDSearchMovie[]","movie: CSFDSearchMovie","user: CSFDSearchUser","user: CSFDSearchMovie"],"sources":["../../src/services/search.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDSearch, CSFDSearchMovie, CSFDSearchUser } from '../dto/search';\nimport { fetchPage } from '../fetchers';\nimport { parseIdFromUrl } from '../helpers/global.helper';\nimport { getAvatar, getUser, getUserRealName, getUserUrl } from '../helpers/search-user.helper';\nimport {\n getSearchColorRating,\n getSearchOrigins,\n getSearchPoster,\n getSearchTitle,\n getSearchType,\n getSearchUrl,\n getSearchYear,\n parseSearchPeople\n} from '../helpers/search.helper';\nimport { searchUrl } from '../vars';\n\nexport class SearchScraper {\n public async search(text: string,
|
|
1
|
+
{"version":3,"file":"search.service.mjs","names":["movies: CSFDSearchMovie[]","users: CSFDSearchUser[]","tvSeries: CSFDSearchMovie[]","movie: CSFDSearchMovie","user: CSFDSearchUser","user: CSFDSearchMovie"],"sources":["../../src/services/search.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDSearch, CSFDSearchMovie, CSFDSearchUser } from '../dto/search';\nimport { fetchPage } from '../fetchers';\nimport { parseIdFromUrl } from '../helpers/global.helper';\nimport { getAvatar, getUser, getUserRealName, getUserUrl } from '../helpers/search-user.helper';\nimport {\n getSearchColorRating,\n getSearchOrigins,\n getSearchPoster,\n getSearchTitle,\n getSearchType,\n getSearchUrl,\n getSearchYear,\n parseSearchPeople\n} from '../helpers/search.helper';\nimport { CSFDLanguage, CSFDOptions } from '../types';\nimport { getUrlByLanguage, searchUrl } from '../vars';\n\nexport class SearchScraper {\n public async search(text: string, options?: CSFDOptions): Promise<CSFDSearch> {\n const url = searchUrl(text, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const html = parse(response);\n const moviesNode = html.querySelectorAll('.main-movies article');\n const usersNode = html.querySelectorAll('.main-users article');\n const tvSeriesNode = html.querySelectorAll('.main-series article');\n\n return this.parseSearch(moviesNode, usersNode, tvSeriesNode, options?.language);\n }\n\n private parseSearch(\n moviesNode: HTMLElement[],\n usersNode: HTMLElement[],\n tvSeriesNode: HTMLElement[],\n language?: CSFDLanguage\n ) {\n const movies: CSFDSearchMovie[] = [];\n const users: CSFDSearchUser[] = [];\n const tvSeries: CSFDSearchMovie[] = [];\n const baseUrl = getUrlByLanguage(language);\n\n moviesNode.forEach((m) => {\n const url = getSearchUrl(m);\n\n const movie: CSFDSearchMovie = {\n id: parseIdFromUrl(url),\n title: getSearchTitle(m),\n year: getSearchYear(m),\n url: `${baseUrl}${url}`,\n type: getSearchType(m),\n colorRating: getSearchColorRating(m),\n poster: getSearchPoster(m),\n origins: getSearchOrigins(m),\n creators: {\n directors: parseSearchPeople(m, 'directors'),\n actors: parseSearchPeople(m, 'actors')\n }\n };\n movies.push(movie);\n });\n\n usersNode.forEach((m) => {\n const url = getUserUrl(m);\n\n const user: CSFDSearchUser = {\n id: parseIdFromUrl(url),\n user: getUser(m),\n userRealName: getUserRealName(m),\n avatar: getAvatar(m),\n url: `${baseUrl}${url}`\n };\n users.push(user);\n });\n\n tvSeriesNode.forEach((m) => {\n const url = getSearchUrl(m);\n\n const user: CSFDSearchMovie = {\n id: parseIdFromUrl(url),\n title: getSearchTitle(m),\n year: getSearchYear(m),\n url: `${baseUrl}${url}`,\n type: getSearchType(m),\n colorRating: getSearchColorRating(m),\n poster: getSearchPoster(m),\n origins: getSearchOrigins(m),\n creators: {\n directors: parseSearchPeople(m, 'directors'),\n actors: parseSearchPeople(m, 'actors')\n }\n };\n tvSeries.push(user);\n });\n\n const search: CSFDSearch = {\n movies: movies,\n users: users,\n tvSeries: tvSeries,\n creators: []\n };\n return search;\n }\n}\n"],"mappings":";;;;;;;;AAkBA,IAAa,gBAAb,MAA2B;CACzB,MAAa,OAAO,MAAc,SAA4C;EAI5E,MAAM,OAAO,MAFI,MAAM,UADX,UAAU,MAAM,EAAE,UAAU,SAAS,UAAU,CAAC,EACtB,EAAE,GAAG,SAAS,SAAS,CAAC,CAElC;EAC5B,MAAM,aAAa,KAAK,iBAAiB,uBAAuB;EAChE,MAAM,YAAY,KAAK,iBAAiB,sBAAsB;EAC9D,MAAM,eAAe,KAAK,iBAAiB,uBAAuB;AAElE,SAAO,KAAK,YAAY,YAAY,WAAW,cAAc,SAAS,SAAS;;CAGjF,AAAQ,YACN,YACA,WACA,cACA,UACA;EACA,MAAMA,SAA4B,EAAE;EACpC,MAAMC,QAA0B,EAAE;EAClC,MAAMC,WAA8B,EAAE;EACtC,MAAM,UAAU,iBAAiB,SAAS;AAE1C,aAAW,SAAS,MAAM;GACxB,MAAM,MAAM,aAAa,EAAE;GAE3B,MAAMC,QAAyB;IAC7B,IAAI,eAAe,IAAI;IACvB,OAAO,eAAe,EAAE;IACxB,MAAM,cAAc,EAAE;IACtB,KAAK,GAAG,UAAU;IAClB,MAAM,cAAc,EAAE;IACtB,aAAa,qBAAqB,EAAE;IACpC,QAAQ,gBAAgB,EAAE;IAC1B,SAAS,iBAAiB,EAAE;IAC5B,UAAU;KACR,WAAW,kBAAkB,GAAG,YAAY;KAC5C,QAAQ,kBAAkB,GAAG,SAAS;KACvC;IACF;AACD,UAAO,KAAK,MAAM;IAClB;AAEF,YAAU,SAAS,MAAM;GACvB,MAAM,MAAM,WAAW,EAAE;GAEzB,MAAMC,OAAuB;IAC3B,IAAI,eAAe,IAAI;IACvB,MAAM,QAAQ,EAAE;IAChB,cAAc,gBAAgB,EAAE;IAChC,QAAQ,UAAU,EAAE;IACpB,KAAK,GAAG,UAAU;IACnB;AACD,SAAM,KAAK,KAAK;IAChB;AAEF,eAAa,SAAS,MAAM;GAC1B,MAAM,MAAM,aAAa,EAAE;GAE3B,MAAMC,OAAwB;IAC5B,IAAI,eAAe,IAAI;IACvB,OAAO,eAAe,EAAE;IACxB,MAAM,cAAc,EAAE;IACtB,KAAK,GAAG,UAAU;IAClB,MAAM,cAAc,EAAE;IACtB,aAAa,qBAAqB,EAAE;IACpC,QAAQ,gBAAgB,EAAE;IAC1B,SAAS,iBAAiB,EAAE;IAC5B,UAAU;KACR,WAAW,kBAAkB,GAAG,YAAY;KAC5C,QAAQ,kBAAkB,GAAG,SAAS;KACvC;IACF;AACD,YAAS,KAAK,KAAK;IACnB;AAQF,SAN2B;GACjB;GACD;GACG;GACV,UAAU,EAAE;GACb"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { CSFDUserRatingConfig, CSFDUserRatings } from "../dto/user-ratings.mjs";
|
|
2
|
+
import { CSFDOptions } from "../dto/options.mjs";
|
|
2
3
|
|
|
3
4
|
//#region src/services/user-ratings.service.d.ts
|
|
4
5
|
declare class UserRatingsScraper {
|
|
5
|
-
userRatings(user: string | number, config?: CSFDUserRatingConfig,
|
|
6
|
+
userRatings(user: string | number, config?: CSFDUserRatingConfig, options?: CSFDOptions): Promise<CSFDUserRatings[]>;
|
|
6
7
|
private getPage;
|
|
7
8
|
private buildUserRatings;
|
|
8
9
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { CSFDUserRatingConfig, CSFDUserRatings } from "../dto/user-ratings.js";
|
|
2
|
+
import { CSFDOptions } from "../dto/options.js";
|
|
2
3
|
|
|
3
4
|
//#region src/services/user-ratings.service.d.ts
|
|
4
5
|
declare class UserRatingsScraper {
|
|
5
|
-
userRatings(user: string | number, config?: CSFDUserRatingConfig,
|
|
6
|
+
userRatings(user: string | number, config?: CSFDUserRatingConfig, options?: CSFDOptions): Promise<CSFDUserRatings[]>;
|
|
6
7
|
private getPage;
|
|
7
8
|
private buildUserRatings;
|
|
8
9
|
}
|
|
@@ -8,11 +8,11 @@ node_html_parser = require_rolldown_runtime.__toESM(node_html_parser);
|
|
|
8
8
|
|
|
9
9
|
//#region src/services/user-ratings.service.ts
|
|
10
10
|
var UserRatingsScraper = class {
|
|
11
|
-
async userRatings(user, config,
|
|
11
|
+
async userRatings(user, config, options) {
|
|
12
12
|
let allMovies = [];
|
|
13
13
|
const pageToFetch = config?.page || 1;
|
|
14
|
-
const url = require_vars.userRatingsUrl(user, pageToFetch > 1 ? pageToFetch : void 0);
|
|
15
|
-
const items = (0, node_html_parser.parse)(await require_index.fetchPage(url, { ...
|
|
14
|
+
const url = require_vars.userRatingsUrl(user, pageToFetch > 1 ? pageToFetch : void 0, { language: options?.language });
|
|
15
|
+
const items = (0, node_html_parser.parse)(await require_index.fetchPage(url, { ...options?.request }));
|
|
16
16
|
const movies = items.querySelectorAll(".box-user-rating .table-container tbody tr");
|
|
17
17
|
const pagesNode = items.querySelector(".pagination");
|
|
18
18
|
const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;
|
|
@@ -22,7 +22,7 @@ var UserRatingsScraper = class {
|
|
|
22
22
|
console.log("Fetching all pages", pages);
|
|
23
23
|
for (let i = 2; i <= pages; i++) {
|
|
24
24
|
console.log("Fetching page", i, "out of", pages, "...");
|
|
25
|
-
const movies$1 = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.userRatingsUrl(user, i), { ...
|
|
25
|
+
const movies$1 = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.userRatingsUrl(user, i, { language: options?.language }), { ...options?.request })).querySelectorAll(".box-user-rating .table-container tbody tr");
|
|
26
26
|
allMovies = [...allMovies, ...this.getPage(config, movies$1)];
|
|
27
27
|
if (config.allPagesDelay) await require_global_helper.sleep(config.allPagesDelay);
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-ratings.service.js","names":["allMovies: CSFDUserRatings[]","userRatingsUrl","fetchPage","movies","sleep","films: CSFDUserRatings[]","getUserRatingType","getUserRatingId","getUserRatingTitle","getUserRatingYear","getUserRatingUrl","getUserRatingColorRating","getUserRatingDate","getUserRating"],"sources":["../../src/services/user-ratings.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDColorRating, CSFDStars } from '../dto/global';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from '../dto/user-ratings';\nimport { fetchPage } from '../fetchers';\nimport { sleep } from '../helpers/global.helper';\nimport {\n getUserRating,\n getUserRatingColorRating,\n getUserRatingDate,\n getUserRatingId,\n getUserRatingTitle,\n getUserRatingType,\n getUserRatingUrl,\n getUserRatingYear\n} from '../helpers/user-ratings.helper';\nimport { userRatingsUrl } from '../vars';\n\nexport class UserRatingsScraper {\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig,\n
|
|
1
|
+
{"version":3,"file":"user-ratings.service.js","names":["allMovies: CSFDUserRatings[]","userRatingsUrl","fetchPage","movies","sleep","films: CSFDUserRatings[]","getUserRatingType","getUserRatingId","getUserRatingTitle","getUserRatingYear","getUserRatingUrl","getUserRatingColorRating","getUserRatingDate","getUserRating"],"sources":["../../src/services/user-ratings.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDColorRating, CSFDStars } from '../dto/global';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from '../dto/user-ratings';\nimport { fetchPage } from '../fetchers';\nimport { sleep } from '../helpers/global.helper';\nimport {\n getUserRating,\n getUserRatingColorRating,\n getUserRatingDate,\n getUserRatingId,\n getUserRatingTitle,\n getUserRatingType,\n getUserRatingUrl,\n getUserRatingYear\n} from '../helpers/user-ratings.helper';\nimport { CSFDOptions } from '../types';\nimport { userRatingsUrl } from '../vars';\n\nexport class UserRatingsScraper {\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig,\n options?: CSFDOptions\n ): Promise<CSFDUserRatings[]> {\n let allMovies: CSFDUserRatings[] = [];\n const pageToFetch = config?.page || 1;\n const url = userRatingsUrl(user, pageToFetch > 1 ? pageToFetch : undefined, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n const items = parse(response);\n const movies = items.querySelectorAll('.box-user-rating .table-container tbody tr');\n\n // Get number of pages\n const pagesNode = items.querySelector('.pagination');\n const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;\n\n allMovies = this.getPage(config, movies);\n\n if (config?.allPages) {\n console.log('User', user, url);\n console.log('Fetching all pages', pages);\n for (let i = 2; i <= pages; i++) {\n console.log('Fetching page', i, 'out of', pages, '...');\n const url = userRatingsUrl(user, i, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const items = parse(response);\n const movies = items.querySelectorAll('.box-user-rating .table-container tbody tr');\n allMovies = [...allMovies, ...this.getPage(config, movies)];\n\n // Sleep\n if (config.allPagesDelay) {\n await sleep(config.allPagesDelay);\n }\n }\n return allMovies;\n }\n\n return allMovies;\n }\n\n private getPage(config: CSFDUserRatingConfig, movies: HTMLElement[]) {\n const films: CSFDUserRatings[] = [];\n if (config) {\n if (config.includesOnly?.length && config.excludes?.length) {\n console.warn(\n `node-csfd-api:\n You can not use both parameters 'includesOnly' and 'excludes'.\n Parameter 'includesOnly' will be used now:`,\n config.includesOnly\n );\n }\n }\n\n for (const el of movies) {\n const type = getUserRatingType(el);\n\n // Filtering includesOnly\n if (config?.includesOnly?.length) {\n if (config.includesOnly.some((include) => type === include)) {\n films.push(this.buildUserRatings(el));\n }\n // Filter excludes\n } else if (config?.excludes?.length) {\n if (!config.excludes.some((exclude) => type === exclude)) {\n films.push(this.buildUserRatings(el));\n }\n } else {\n // Without filtering\n films.push(this.buildUserRatings(el));\n }\n }\n return films;\n }\n\n private buildUserRatings(el: HTMLElement): CSFDUserRatings {\n return {\n id: getUserRatingId(el),\n title: getUserRatingTitle(el),\n year: getUserRatingYear(el),\n type: getUserRatingType(el),\n url: getUserRatingUrl(el),\n colorRating: getUserRatingColorRating(el) as CSFDColorRating,\n userDate: getUserRatingDate(el),\n userRating: getUserRating(el) as CSFDStars\n };\n }\n}\n"],"mappings":";;;;;;;;;AAkBA,IAAa,qBAAb,MAAgC;CAC9B,MAAa,YACX,MACA,QACA,SAC4B;EAC5B,IAAIA,YAA+B,EAAE;EACrC,MAAM,cAAc,QAAQ,QAAQ;EACpC,MAAM,MAAMC,4BAAe,MAAM,cAAc,IAAI,cAAc,QAAW,EAAE,UAAU,SAAS,UAAU,CAAC;EAE5G,MAAM,oCADW,MAAMC,wBAAU,KAAK,EAAE,GAAG,SAAS,SAAS,CAAC,CACjC;EAC7B,MAAM,SAAS,MAAM,iBAAiB,6CAA6C;EAGnF,MAAM,YAAY,MAAM,cAAc,cAAc;EACpD,MAAM,QAAQ,CAAC,WAAW,WAAW,UAAU,WAAW,SAAS,GAAG,WAAW;AAEjF,cAAY,KAAK,QAAQ,QAAQ,OAAO;AAExC,MAAI,QAAQ,UAAU;AACpB,WAAQ,IAAI,QAAQ,MAAM,IAAI;AAC9B,WAAQ,IAAI,sBAAsB,MAAM;AACxC,QAAK,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;AAC/B,YAAQ,IAAI,iBAAiB,GAAG,UAAU,OAAO,MAAM;IAKvD,MAAMC,uCAHW,MAAMD,wBADXD,4BAAe,MAAM,GAAG,EAAE,UAAU,SAAS,UAAU,CAAC,EAC9B,EAAE,GAAG,SAAS,SAAS,CAAC,CAEjC,CACR,iBAAiB,6CAA6C;AACnF,gBAAY,CAAC,GAAG,WAAW,GAAG,KAAK,QAAQ,QAAQE,SAAO,CAAC;AAG3D,QAAI,OAAO,cACT,OAAMC,4BAAM,OAAO,cAAc;;AAGrC,UAAO;;AAGT,SAAO;;CAGT,AAAQ,QAAQ,QAA8B,QAAuB;EACnE,MAAMC,QAA2B,EAAE;AACnC,MAAI,QACF;OAAI,OAAO,cAAc,UAAU,OAAO,UAAU,OAClD,SAAQ,KACN;;qDAGA,OAAO,aACR;;AAIL,OAAK,MAAM,MAAM,QAAQ;GACvB,MAAM,OAAOC,8CAAkB,GAAG;AAGlC,OAAI,QAAQ,cAAc,QACxB;QAAI,OAAO,aAAa,MAAM,YAAY,SAAS,QAAQ,CACzD,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;cAG9B,QAAQ,UAAU,QAC3B;QAAI,CAAC,OAAO,SAAS,MAAM,YAAY,SAAS,QAAQ,CACtD,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;SAIvC,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;;AAGzC,SAAO;;CAGT,AAAQ,iBAAiB,IAAkC;AACzD,SAAO;GACL,IAAIC,4CAAgB,GAAG;GACvB,OAAOC,+CAAmB,GAAG;GAC7B,MAAMC,8CAAkB,GAAG;GAC3B,MAAMH,8CAAkB,GAAG;GAC3B,KAAKI,6CAAiB,GAAG;GACzB,aAAaC,qDAAyB,GAAG;GACzC,UAAUC,8CAAkB,GAAG;GAC/B,YAAYC,0CAAc,GAAG;GAC9B"}
|
|
@@ -6,11 +6,11 @@ import { parse } from "node-html-parser";
|
|
|
6
6
|
|
|
7
7
|
//#region src/services/user-ratings.service.ts
|
|
8
8
|
var UserRatingsScraper = class {
|
|
9
|
-
async userRatings(user, config,
|
|
9
|
+
async userRatings(user, config, options) {
|
|
10
10
|
let allMovies = [];
|
|
11
11
|
const pageToFetch = config?.page || 1;
|
|
12
|
-
const url = userRatingsUrl(user, pageToFetch > 1 ? pageToFetch : void 0);
|
|
13
|
-
const items = parse(await fetchPage(url, { ...
|
|
12
|
+
const url = userRatingsUrl(user, pageToFetch > 1 ? pageToFetch : void 0, { language: options?.language });
|
|
13
|
+
const items = parse(await fetchPage(url, { ...options?.request }));
|
|
14
14
|
const movies = items.querySelectorAll(".box-user-rating .table-container tbody tr");
|
|
15
15
|
const pagesNode = items.querySelector(".pagination");
|
|
16
16
|
const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;
|
|
@@ -20,7 +20,7 @@ var UserRatingsScraper = class {
|
|
|
20
20
|
console.log("Fetching all pages", pages);
|
|
21
21
|
for (let i = 2; i <= pages; i++) {
|
|
22
22
|
console.log("Fetching page", i, "out of", pages, "...");
|
|
23
|
-
const movies$1 = parse(await fetchPage(userRatingsUrl(user, i), { ...
|
|
23
|
+
const movies$1 = parse(await fetchPage(userRatingsUrl(user, i, { language: options?.language }), { ...options?.request })).querySelectorAll(".box-user-rating .table-container tbody tr");
|
|
24
24
|
allMovies = [...allMovies, ...this.getPage(config, movies$1)];
|
|
25
25
|
if (config.allPagesDelay) await sleep(config.allPagesDelay);
|
|
26
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-ratings.service.mjs","names":["allMovies: CSFDUserRatings[]","movies","films: CSFDUserRatings[]"],"sources":["../../src/services/user-ratings.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDColorRating, CSFDStars } from '../dto/global';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from '../dto/user-ratings';\nimport { fetchPage } from '../fetchers';\nimport { sleep } from '../helpers/global.helper';\nimport {\n getUserRating,\n getUserRatingColorRating,\n getUserRatingDate,\n getUserRatingId,\n getUserRatingTitle,\n getUserRatingType,\n getUserRatingUrl,\n getUserRatingYear\n} from '../helpers/user-ratings.helper';\nimport { userRatingsUrl } from '../vars';\n\nexport class UserRatingsScraper {\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig,\n
|
|
1
|
+
{"version":3,"file":"user-ratings.service.mjs","names":["allMovies: CSFDUserRatings[]","movies","films: CSFDUserRatings[]"],"sources":["../../src/services/user-ratings.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDColorRating, CSFDStars } from '../dto/global';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from '../dto/user-ratings';\nimport { fetchPage } from '../fetchers';\nimport { sleep } from '../helpers/global.helper';\nimport {\n getUserRating,\n getUserRatingColorRating,\n getUserRatingDate,\n getUserRatingId,\n getUserRatingTitle,\n getUserRatingType,\n getUserRatingUrl,\n getUserRatingYear\n} from '../helpers/user-ratings.helper';\nimport { CSFDOptions } from '../types';\nimport { userRatingsUrl } from '../vars';\n\nexport class UserRatingsScraper {\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig,\n options?: CSFDOptions\n ): Promise<CSFDUserRatings[]> {\n let allMovies: CSFDUserRatings[] = [];\n const pageToFetch = config?.page || 1;\n const url = userRatingsUrl(user, pageToFetch > 1 ? pageToFetch : undefined, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n const items = parse(response);\n const movies = items.querySelectorAll('.box-user-rating .table-container tbody tr');\n\n // Get number of pages\n const pagesNode = items.querySelector('.pagination');\n const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;\n\n allMovies = this.getPage(config, movies);\n\n if (config?.allPages) {\n console.log('User', user, url);\n console.log('Fetching all pages', pages);\n for (let i = 2; i <= pages; i++) {\n console.log('Fetching page', i, 'out of', pages, '...');\n const url = userRatingsUrl(user, i, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const items = parse(response);\n const movies = items.querySelectorAll('.box-user-rating .table-container tbody tr');\n allMovies = [...allMovies, ...this.getPage(config, movies)];\n\n // Sleep\n if (config.allPagesDelay) {\n await sleep(config.allPagesDelay);\n }\n }\n return allMovies;\n }\n\n return allMovies;\n }\n\n private getPage(config: CSFDUserRatingConfig, movies: HTMLElement[]) {\n const films: CSFDUserRatings[] = [];\n if (config) {\n if (config.includesOnly?.length && config.excludes?.length) {\n console.warn(\n `node-csfd-api:\n You can not use both parameters 'includesOnly' and 'excludes'.\n Parameter 'includesOnly' will be used now:`,\n config.includesOnly\n );\n }\n }\n\n for (const el of movies) {\n const type = getUserRatingType(el);\n\n // Filtering includesOnly\n if (config?.includesOnly?.length) {\n if (config.includesOnly.some((include) => type === include)) {\n films.push(this.buildUserRatings(el));\n }\n // Filter excludes\n } else if (config?.excludes?.length) {\n if (!config.excludes.some((exclude) => type === exclude)) {\n films.push(this.buildUserRatings(el));\n }\n } else {\n // Without filtering\n films.push(this.buildUserRatings(el));\n }\n }\n return films;\n }\n\n private buildUserRatings(el: HTMLElement): CSFDUserRatings {\n return {\n id: getUserRatingId(el),\n title: getUserRatingTitle(el),\n year: getUserRatingYear(el),\n type: getUserRatingType(el),\n url: getUserRatingUrl(el),\n colorRating: getUserRatingColorRating(el) as CSFDColorRating,\n userDate: getUserRatingDate(el),\n userRating: getUserRating(el) as CSFDStars\n };\n }\n}\n"],"mappings":";;;;;;;AAkBA,IAAa,qBAAb,MAAgC;CAC9B,MAAa,YACX,MACA,QACA,SAC4B;EAC5B,IAAIA,YAA+B,EAAE;EACrC,MAAM,cAAc,QAAQ,QAAQ;EACpC,MAAM,MAAM,eAAe,MAAM,cAAc,IAAI,cAAc,QAAW,EAAE,UAAU,SAAS,UAAU,CAAC;EAE5G,MAAM,QAAQ,MADG,MAAM,UAAU,KAAK,EAAE,GAAG,SAAS,SAAS,CAAC,CACjC;EAC7B,MAAM,SAAS,MAAM,iBAAiB,6CAA6C;EAGnF,MAAM,YAAY,MAAM,cAAc,cAAc;EACpD,MAAM,QAAQ,CAAC,WAAW,WAAW,UAAU,WAAW,SAAS,GAAG,WAAW;AAEjF,cAAY,KAAK,QAAQ,QAAQ,OAAO;AAExC,MAAI,QAAQ,UAAU;AACpB,WAAQ,IAAI,QAAQ,MAAM,IAAI;AAC9B,WAAQ,IAAI,sBAAsB,MAAM;AACxC,QAAK,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;AAC/B,YAAQ,IAAI,iBAAiB,GAAG,UAAU,OAAO,MAAM;IAKvD,MAAMC,WADQ,MAFG,MAAM,UADX,eAAe,MAAM,GAAG,EAAE,UAAU,SAAS,UAAU,CAAC,EAC9B,EAAE,GAAG,SAAS,SAAS,CAAC,CAEjC,CACR,iBAAiB,6CAA6C;AACnF,gBAAY,CAAC,GAAG,WAAW,GAAG,KAAK,QAAQ,QAAQA,SAAO,CAAC;AAG3D,QAAI,OAAO,cACT,OAAM,MAAM,OAAO,cAAc;;AAGrC,UAAO;;AAGT,SAAO;;CAGT,AAAQ,QAAQ,QAA8B,QAAuB;EACnE,MAAMC,QAA2B,EAAE;AACnC,MAAI,QACF;OAAI,OAAO,cAAc,UAAU,OAAO,UAAU,OAClD,SAAQ,KACN;;qDAGA,OAAO,aACR;;AAIL,OAAK,MAAM,MAAM,QAAQ;GACvB,MAAM,OAAO,kBAAkB,GAAG;AAGlC,OAAI,QAAQ,cAAc,QACxB;QAAI,OAAO,aAAa,MAAM,YAAY,SAAS,QAAQ,CACzD,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;cAG9B,QAAQ,UAAU,QAC3B;QAAI,CAAC,OAAO,SAAS,MAAM,YAAY,SAAS,QAAQ,CACtD,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;SAIvC,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;;AAGzC,SAAO;;CAGT,AAAQ,iBAAiB,IAAkC;AACzD,SAAO;GACL,IAAI,gBAAgB,GAAG;GACvB,OAAO,mBAAmB,GAAG;GAC7B,MAAM,kBAAkB,GAAG;GAC3B,MAAM,kBAAkB,GAAG;GAC3B,KAAK,iBAAiB,GAAG;GACzB,aAAa,yBAAyB,GAAG;GACzC,UAAU,kBAAkB,GAAG;GAC/B,YAAY,cAAc,GAAG;GAC9B"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { CSFDUserReviews, CSFDUserReviewsConfig } from "../dto/user-reviews.mjs";
|
|
2
|
+
import { CSFDOptions } from "../dto/options.mjs";
|
|
2
3
|
|
|
3
4
|
//#region src/services/user-reviews.service.d.ts
|
|
4
5
|
declare class UserReviewsScraper {
|
|
5
|
-
userReviews(user: string | number, config?: CSFDUserReviewsConfig,
|
|
6
|
+
userReviews(user: string | number, config?: CSFDUserReviewsConfig, options?: CSFDOptions): Promise<CSFDUserReviews[]>;
|
|
6
7
|
private getPage;
|
|
7
8
|
private buildUserReviews;
|
|
8
9
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { CSFDUserReviews, CSFDUserReviewsConfig } from "../dto/user-reviews.js";
|
|
2
|
+
import { CSFDOptions } from "../dto/options.js";
|
|
2
3
|
|
|
3
4
|
//#region src/services/user-reviews.service.d.ts
|
|
4
5
|
declare class UserReviewsScraper {
|
|
5
|
-
userReviews(user: string | number, config?: CSFDUserReviewsConfig,
|
|
6
|
+
userReviews(user: string | number, config?: CSFDUserReviewsConfig, options?: CSFDOptions): Promise<CSFDUserReviews[]>;
|
|
6
7
|
private getPage;
|
|
7
8
|
private buildUserReviews;
|
|
8
9
|
}
|
|
@@ -8,11 +8,11 @@ node_html_parser = require_rolldown_runtime.__toESM(node_html_parser);
|
|
|
8
8
|
|
|
9
9
|
//#region src/services/user-reviews.service.ts
|
|
10
10
|
var UserReviewsScraper = class {
|
|
11
|
-
async userReviews(user, config,
|
|
11
|
+
async userReviews(user, config, options) {
|
|
12
12
|
let allReviews = [];
|
|
13
13
|
const pageToFetch = config?.page || 1;
|
|
14
|
-
const url = require_vars.userReviewsUrl(user, pageToFetch > 1 ? pageToFetch : void 0);
|
|
15
|
-
const items = (0, node_html_parser.parse)(await require_index.fetchPage(url, { ...
|
|
14
|
+
const url = require_vars.userReviewsUrl(user, pageToFetch > 1 ? pageToFetch : void 0, { language: options?.language });
|
|
15
|
+
const items = (0, node_html_parser.parse)(await require_index.fetchPage(url, { ...options?.request }));
|
|
16
16
|
const reviews = items.querySelectorAll(".user-reviews .article");
|
|
17
17
|
const pagesNode = items.querySelector(".pagination");
|
|
18
18
|
const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;
|
|
@@ -22,7 +22,7 @@ var UserReviewsScraper = class {
|
|
|
22
22
|
console.log("Fetching all pages", pages);
|
|
23
23
|
for (let i = 2; i <= pages; i++) {
|
|
24
24
|
console.log("Fetching page", i, "out of", pages, "...");
|
|
25
|
-
const reviews$1 = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.userReviewsUrl(user, i), { ...
|
|
25
|
+
const reviews$1 = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.userReviewsUrl(user, i, { language: options?.language }), { ...options?.request })).querySelectorAll(".user-reviews .article");
|
|
26
26
|
allReviews = [...allReviews, ...this.getPage(config, reviews$1)];
|
|
27
27
|
if (config.allPagesDelay) await require_global_helper.sleep(config.allPagesDelay);
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-reviews.service.js","names":["allReviews: CSFDUserReviews[]","userReviewsUrl","fetchPage","reviews","sleep","films: CSFDUserReviews[]","getUserReviewType","getUserReviewId","getUserReviewTitle","getUserReviewYear","getUserReviewUrl","getUserReviewColorRating","getUserReviewDate","getUserReviewRating","getUserReviewText","getUserReviewPoster"],"sources":["../../src/services/user-reviews.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDColorRating, CSFDStars } from '../dto/global';\nimport { CSFDUserReviews, CSFDUserReviewsConfig } from '../dto/user-reviews';\nimport { fetchPage } from '../fetchers';\nimport { sleep } from '../helpers/global.helper';\nimport {\n getUserReviewColorRating,\n getUserReviewDate,\n getUserReviewId,\n getUserReviewPoster,\n getUserReviewRating,\n getUserReviewText,\n getUserReviewTitle,\n getUserReviewType,\n getUserReviewUrl,\n getUserReviewYear\n} from '../helpers/user-reviews.helper';\nimport { userReviewsUrl } from '../vars';\n\nexport class UserReviewsScraper {\n public async userReviews(\n user: string | number,\n config?: CSFDUserReviewsConfig,\n
|
|
1
|
+
{"version":3,"file":"user-reviews.service.js","names":["allReviews: CSFDUserReviews[]","userReviewsUrl","fetchPage","reviews","sleep","films: CSFDUserReviews[]","getUserReviewType","getUserReviewId","getUserReviewTitle","getUserReviewYear","getUserReviewUrl","getUserReviewColorRating","getUserReviewDate","getUserReviewRating","getUserReviewText","getUserReviewPoster"],"sources":["../../src/services/user-reviews.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDColorRating, CSFDStars } from '../dto/global';\nimport { CSFDUserReviews, CSFDUserReviewsConfig } from '../dto/user-reviews';\nimport { fetchPage } from '../fetchers';\nimport { sleep } from '../helpers/global.helper';\nimport {\n getUserReviewColorRating,\n getUserReviewDate,\n getUserReviewId,\n getUserReviewPoster,\n getUserReviewRating,\n getUserReviewText,\n getUserReviewTitle,\n getUserReviewType,\n getUserReviewUrl,\n getUserReviewYear\n} from '../helpers/user-reviews.helper';\nimport { CSFDOptions } from '../types';\nimport { userReviewsUrl } from '../vars';\n\nexport class UserReviewsScraper {\n public async userReviews(\n user: string | number,\n config?: CSFDUserReviewsConfig,\n options?: CSFDOptions\n ): Promise<CSFDUserReviews[]> {\n let allReviews: CSFDUserReviews[] = [];\n const pageToFetch = config?.page || 1;\n const url = userReviewsUrl(user, pageToFetch > 1 ? pageToFetch : undefined, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n const items = parse(response);\n const reviews = items.querySelectorAll('.user-reviews .article');\n\n // Get number of pages\n const pagesNode = items.querySelector('.pagination');\n const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;\n\n allReviews = this.getPage(config, reviews);\n\n if (config?.allPages) {\n console.log('User', user, url);\n console.log('Fetching all pages', pages);\n for (let i = 2; i <= pages; i++) {\n console.log('Fetching page', i, 'out of', pages, '...');\n const url = userReviewsUrl(user, i, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const items = parse(response);\n const reviews = items.querySelectorAll('.user-reviews .article');\n allReviews = [...allReviews, ...this.getPage(config, reviews)];\n\n // Sleep\n if (config.allPagesDelay) {\n await sleep(config.allPagesDelay);\n }\n }\n return allReviews;\n }\n\n return allReviews;\n }\n\n private getPage(config: CSFDUserReviewsConfig, reviews: HTMLElement[]) {\n const films: CSFDUserReviews[] = [];\n if (config) {\n if (config.includesOnly?.length && config.excludes?.length) {\n console.warn(\n `node-csfd-api:\n You can not use both parameters 'includesOnly' and 'excludes'.\n Parameter 'includesOnly' will be used now:`,\n config.includesOnly\n );\n }\n }\n\n for (const el of reviews) {\n const type = getUserReviewType(el);\n\n // Filtering includesOnly\n if (config?.includesOnly?.length) {\n if (config.includesOnly.some((include) => type === include)) {\n films.push(this.buildUserReviews(el));\n }\n // Filter excludes\n } else if (config?.excludes?.length) {\n if (!config.excludes.some((exclude) => type === exclude)) {\n films.push(this.buildUserReviews(el));\n }\n } else {\n // Without filtering\n films.push(this.buildUserReviews(el));\n }\n }\n return films;\n }\n\n private buildUserReviews(el: HTMLElement): CSFDUserReviews {\n return {\n id: getUserReviewId(el),\n title: getUserReviewTitle(el),\n year: getUserReviewYear(el),\n type: getUserReviewType(el),\n url: getUserReviewUrl(el),\n colorRating: getUserReviewColorRating(el) as CSFDColorRating,\n userDate: getUserReviewDate(el),\n userRating: getUserReviewRating(el) as CSFDStars,\n text: getUserReviewText(el),\n poster: getUserReviewPoster(el)\n };\n }\n}\n"],"mappings":";;;;;;;;;AAoBA,IAAa,qBAAb,MAAgC;CAC9B,MAAa,YACX,MACA,QACA,SAC4B;EAC5B,IAAIA,aAAgC,EAAE;EACtC,MAAM,cAAc,QAAQ,QAAQ;EACpC,MAAM,MAAMC,4BAAe,MAAM,cAAc,IAAI,cAAc,QAAW,EAAE,UAAU,SAAS,UAAU,CAAC;EAE5G,MAAM,oCADW,MAAMC,wBAAU,KAAK,EAAE,GAAG,SAAS,SAAS,CAAC,CACjC;EAC7B,MAAM,UAAU,MAAM,iBAAiB,yBAAyB;EAGhE,MAAM,YAAY,MAAM,cAAc,cAAc;EACpD,MAAM,QAAQ,CAAC,WAAW,WAAW,UAAU,WAAW,SAAS,GAAG,WAAW;AAEjF,eAAa,KAAK,QAAQ,QAAQ,QAAQ;AAE1C,MAAI,QAAQ,UAAU;AACpB,WAAQ,IAAI,QAAQ,MAAM,IAAI;AAC9B,WAAQ,IAAI,sBAAsB,MAAM;AACxC,QAAK,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;AAC/B,YAAQ,IAAI,iBAAiB,GAAG,UAAU,OAAO,MAAM;IAKvD,MAAMC,wCAHW,MAAMD,wBADXD,4BAAe,MAAM,GAAG,EAAE,UAAU,SAAS,UAAU,CAAC,EAC9B,EAAE,GAAG,SAAS,SAAS,CAAC,CAEjC,CACP,iBAAiB,yBAAyB;AAChE,iBAAa,CAAC,GAAG,YAAY,GAAG,KAAK,QAAQ,QAAQE,UAAQ,CAAC;AAG9D,QAAI,OAAO,cACT,OAAMC,4BAAM,OAAO,cAAc;;AAGrC,UAAO;;AAGT,SAAO;;CAGT,AAAQ,QAAQ,QAA+B,SAAwB;EACrE,MAAMC,QAA2B,EAAE;AACnC,MAAI,QACF;OAAI,OAAO,cAAc,UAAU,OAAO,UAAU,OAClD,SAAQ,KACN;;qDAGA,OAAO,aACR;;AAIL,OAAK,MAAM,MAAM,SAAS;GACxB,MAAM,OAAOC,8CAAkB,GAAG;AAGlC,OAAI,QAAQ,cAAc,QACxB;QAAI,OAAO,aAAa,MAAM,YAAY,SAAS,QAAQ,CACzD,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;cAG9B,QAAQ,UAAU,QAC3B;QAAI,CAAC,OAAO,SAAS,MAAM,YAAY,SAAS,QAAQ,CACtD,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;SAIvC,OAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;;AAGzC,SAAO;;CAGT,AAAQ,iBAAiB,IAAkC;AACzD,SAAO;GACL,IAAIC,4CAAgB,GAAG;GACvB,OAAOC,+CAAmB,GAAG;GAC7B,MAAMC,8CAAkB,GAAG;GAC3B,MAAMH,8CAAkB,GAAG;GAC3B,KAAKI,6CAAiB,GAAG;GACzB,aAAaC,qDAAyB,GAAG;GACzC,UAAUC,8CAAkB,GAAG;GAC/B,YAAYC,gDAAoB,GAAG;GACnC,MAAMC,8CAAkB,GAAG;GAC3B,QAAQC,gDAAoB,GAAG;GAChC"}
|