node-csfd-api 2.14.4 → 3.0.0-alpha.1
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/LICENSE +21 -0
- package/_virtual/rolldown_runtime.js +25 -0
- package/dto/cinema.d.mts +28 -0
- package/dto/cinema.d.ts +28 -0
- package/dto/creator.d.mts +17 -0
- package/dto/creator.d.ts +17 -0
- package/dto/global.d.mts +26 -0
- package/dto/global.d.ts +26 -0
- package/dto/movie.d.mts +71 -0
- package/dto/movie.d.ts +71 -0
- package/dto/search.d.mts +32 -0
- package/dto/search.d.ts +32 -0
- package/dto/user-ratings.d.mts +23 -0
- package/dto/user-ratings.d.ts +23 -0
- package/fetchers/fetch.polyfill.js +10 -9
- package/fetchers/fetch.polyfill.js.map +1 -0
- package/fetchers/fetch.polyfill.mjs +8 -0
- package/fetchers/fetch.polyfill.mjs.map +1 -0
- package/fetchers/fetchers.js +24 -0
- package/fetchers/fetchers.js.map +1 -0
- package/fetchers/fetchers.mjs +24 -0
- package/fetchers/fetchers.mjs.map +1 -0
- package/helpers/cinema.helper.js +70 -91
- package/helpers/cinema.helper.js.map +1 -0
- package/helpers/cinema.helper.mjs +80 -0
- package/helpers/cinema.helper.mjs.map +1 -0
- package/helpers/creator.helper.js +64 -78
- package/helpers/creator.helper.js.map +1 -0
- package/helpers/creator.helper.mjs +69 -0
- package/helpers/creator.helper.mjs.map +1 -0
- package/helpers/global.helper.js +37 -55
- package/helpers/global.helper.js.map +1 -0
- package/helpers/global.helper.mjs +45 -0
- package/helpers/global.helper.mjs.map +1 -0
- package/helpers/movie.helper.js +161 -252
- package/helpers/movie.helper.js.map +1 -0
- package/helpers/movie.helper.mjs +144 -0
- package/helpers/movie.helper.mjs.map +1 -0
- package/helpers/search-user.helper.js +20 -18
- package/helpers/search-user.helper.js.map +1 -0
- package/helpers/search-user.helper.mjs +24 -0
- package/helpers/search-user.helper.mjs.map +1 -0
- package/helpers/search.helper.js +52 -62
- package/helpers/search.helper.js.map +1 -0
- package/helpers/search.helper.mjs +45 -0
- package/helpers/search.helper.mjs.map +1 -0
- package/helpers/user-ratings.helper.js +47 -56
- package/helpers/user-ratings.helper.js.map +1 -0
- package/helpers/user-ratings.helper.mjs +44 -0
- package/helpers/user-ratings.helper.mjs.map +1 -0
- package/index.d.mts +30 -0
- package/index.d.ts +29 -23
- package/index.js +41 -38
- package/index.js.map +1 -0
- package/index.mjs +41 -0
- package/index.mjs.map +1 -0
- package/package.json +11 -25
- package/services/cinema.service.d.mts +11 -0
- package/services/cinema.service.d.ts +10 -5
- package/services/cinema.service.js +34 -33
- package/services/cinema.service.js.map +1 -0
- package/services/cinema.service.mjs +33 -0
- package/services/cinema.service.mjs.map +1 -0
- package/services/creator.service.d.mts +11 -0
- package/services/creator.service.d.ts +10 -5
- package/services/creator.service.js +34 -35
- package/services/creator.service.js.map +1 -0
- package/services/creator.service.mjs +33 -0
- package/services/creator.service.mjs.map +1 -0
- package/services/movie.service.d.mts +11 -0
- package/services/movie.service.d.ts +10 -5
- package/services/movie.service.js +61 -61
- package/services/movie.service.js.map +1 -0
- package/services/movie.service.mjs +60 -0
- package/services/movie.service.mjs.map +1 -0
- package/services/search.service.d.mts +10 -0
- package/services/search.service.d.ts +9 -4
- package/services/search.service.js +80 -79
- package/services/search.service.js.map +1 -0
- package/services/search.service.mjs +79 -0
- package/services/search.service.mjs.map +1 -0
- package/services/user-ratings.service.d.mts +12 -0
- package/services/user-ratings.service.d.ts +11 -6
- package/services/user-ratings.service.js +63 -81
- package/services/user-ratings.service.js.map +1 -0
- package/services/user-ratings.service.mjs +64 -0
- package/services/user-ratings.service.mjs.map +1 -0
- package/vars.js +11 -9
- package/vars.js.map +1 -0
- package/vars.mjs +12 -0
- package/vars.mjs.map +1 -0
- package/fetchers/fetch.polyfill.d.ts +0 -1
- package/fetchers/index.d.ts +0 -1
- package/fetchers/index.js +0 -27
- package/helpers/cinema.helper.d.ts +0 -18
- package/helpers/creator.helper.d.ts +0 -17
- package/helpers/global.helper.d.ts +0 -17
- package/helpers/movie.helper.d.ts +0 -25
- package/helpers/search-user.helper.d.ts +0 -5
- package/helpers/search.helper.d.ts +0 -11
- package/helpers/user-ratings.helper.d.ts +0 -13
- package/interfaces/cinema.interface.d.ts +0 -23
- package/interfaces/cinema.interface.js +0 -2
- package/interfaces/creator.interface.d.ts +0 -12
- package/interfaces/creator.interface.js +0 -2
- package/interfaces/global.d.ts +0 -22
- package/interfaces/global.js +0 -2
- package/interfaces/movie.interface.d.ts +0 -66
- package/interfaces/movie.interface.js +0 -2
- package/interfaces/search.interface.d.ts +0 -27
- package/interfaces/search.interface.js +0 -2
- package/interfaces/user-ratings.interface.d.ts +0 -18
- package/interfaces/user-ratings.interface.js +0 -2
- package/vars.d.ts +0 -6
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
2
|
+
const require_fetchers = require('../fetchers/fetchers.js');
|
|
3
|
+
const require_vars = require('../vars.js');
|
|
4
|
+
const require_movie_helper = require('../helpers/movie.helper.js');
|
|
5
|
+
let node_html_parser = require("node-html-parser");
|
|
6
|
+
node_html_parser = require_rolldown_runtime.__toESM(node_html_parser);
|
|
7
|
+
|
|
8
|
+
//#region src/services/movie.service.ts
|
|
9
|
+
var MovieScraper = class {
|
|
10
|
+
async movie(movieId) {
|
|
11
|
+
const id = Number(movieId);
|
|
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_fetchers.fetchPage(require_vars.movieUrl(id)));
|
|
14
|
+
const pageClasses = movieHtml.querySelector(".page-content").classNames.split(" ");
|
|
15
|
+
const asideNode = movieHtml.querySelector(".aside-movie-profile");
|
|
16
|
+
const movieNode = movieHtml.querySelector(".main-movie-profile");
|
|
17
|
+
const jsonLd = movieHtml.querySelector("script[type=\"application/ld+json\"]").innerText;
|
|
18
|
+
this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd);
|
|
19
|
+
return this.film;
|
|
20
|
+
}
|
|
21
|
+
buildMovie(movieId, el, asideEl, pageClasses, jsonLd) {
|
|
22
|
+
this.film = {
|
|
23
|
+
id: movieId,
|
|
24
|
+
title: require_movie_helper.getMovieTitle(el),
|
|
25
|
+
year: require_movie_helper.getMovieYear(jsonLd),
|
|
26
|
+
duration: require_movie_helper.getMovieDuration(jsonLd, el),
|
|
27
|
+
descriptions: require_movie_helper.getMovieDescriptions(el),
|
|
28
|
+
genres: require_movie_helper.getMovieGenres(el),
|
|
29
|
+
type: require_movie_helper.getMovieType(el),
|
|
30
|
+
url: require_vars.movieUrl(movieId),
|
|
31
|
+
origins: require_movie_helper.getMovieOrigins(el),
|
|
32
|
+
colorRating: require_movie_helper.getMovieColorRating(pageClasses),
|
|
33
|
+
rating: require_movie_helper.getMovieRating(asideEl),
|
|
34
|
+
ratingCount: require_movie_helper.getMovieRatingCount(asideEl),
|
|
35
|
+
titlesOther: require_movie_helper.getMovieTitlesOther(el),
|
|
36
|
+
poster: require_movie_helper.getMoviePoster(el),
|
|
37
|
+
photo: require_movie_helper.getMovieRandomPhoto(el),
|
|
38
|
+
trivia: require_movie_helper.getMovieTrivia(el),
|
|
39
|
+
creators: {
|
|
40
|
+
directors: require_movie_helper.getMovieGroup(el, "Režie"),
|
|
41
|
+
writers: require_movie_helper.getMovieGroup(el, "Scénář"),
|
|
42
|
+
cinematography: require_movie_helper.getMovieGroup(el, "Kamera"),
|
|
43
|
+
music: require_movie_helper.getMovieGroup(el, "Hudba"),
|
|
44
|
+
actors: require_movie_helper.getMovieGroup(el, "Hrají"),
|
|
45
|
+
basedOn: require_movie_helper.getMovieGroup(el, "Předloha"),
|
|
46
|
+
producers: require_movie_helper.getMovieGroup(el, "Produkce"),
|
|
47
|
+
filmEditing: require_movie_helper.getMovieGroup(el, "Střih"),
|
|
48
|
+
costumeDesign: require_movie_helper.getMovieGroup(el, "Kostýmy"),
|
|
49
|
+
productionDesign: require_movie_helper.getMovieGroup(el, "Scénografie")
|
|
50
|
+
},
|
|
51
|
+
vod: require_movie_helper.getMovieVods(asideEl),
|
|
52
|
+
tags: require_movie_helper.getMovieTags(asideEl),
|
|
53
|
+
premieres: require_movie_helper.getMoviePremieres(asideEl),
|
|
54
|
+
related: require_movie_helper.getMovieBoxMovies(asideEl, "Související"),
|
|
55
|
+
similar: require_movie_helper.getMovieBoxMovies(asideEl, "Podobné")
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
//#endregion
|
|
62
61
|
exports.MovieScraper = MovieScraper;
|
|
62
|
+
//# sourceMappingURL=movie.service.js.map
|
|
@@ -0,0 +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/fetchers.js';\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.js';\nimport { movieUrl } from '../vars.js';\n\nexport class MovieScraper {\n private film: CSFDMovie;\n\n public async movie(movieId: number): 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);\n const response = await fetchPage(url);\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 this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd);\n return this.film;\n }\n\n private buildMovie(\n movieId: number,\n el: HTMLElement,\n asideEl: HTMLElement,\n pageClasses: string[],\n jsonLd: string\n ) {\n this.film = {\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),\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, 'Režie'),\n writers: getMovieGroup(el, 'Scénář'),\n cinematography: getMovieGroup(el, 'Kamera'),\n music: getMovieGroup(el, 'Hudba'),\n actors: getMovieGroup(el, 'Hrají'),\n basedOn: getMovieGroup(el, 'Předloha'),\n producers: getMovieGroup(el, 'Produkce'),\n filmEditing: getMovieGroup(el, 'Střih'),\n costumeDesign: getMovieGroup(el, 'Kostýmy'),\n productionDesign: getMovieGroup(el, 'Scénografie')\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":";;;;;;;;AA2BA,IAAa,eAAb,MAA0B;CAGxB,MAAa,MAAM,SAAqC;EACtD,MAAM,KAAK,OAAO,QAAQ;AAC1B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,gDAAgD;EAKlE,MAAM,wCAFW,MAAMA,2BADXC,sBAAS,GAAG,CACa,CAEJ;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,OAAK,WAAW,CAAC,SAAS,WAAW,WAAW,aAAa,OAAO;AACpE,SAAO,KAAK;;CAGd,AAAQ,WACN,SACA,IACA,SACA,aACA,QACA;AACA,OAAK,OAAO;GACV,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,QAAQ;GACtB,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,IAAI,QAAQ;IACrC,SAASA,mCAAc,IAAI,SAAS;IACpC,gBAAgBA,mCAAc,IAAI,SAAS;IAC3C,OAAOA,mCAAc,IAAI,QAAQ;IACjC,QAAQA,mCAAc,IAAI,QAAQ;IAClC,SAASA,mCAAc,IAAI,WAAW;IACtC,WAAWA,mCAAc,IAAI,WAAW;IACxC,aAAaA,mCAAc,IAAI,QAAQ;IACvC,eAAeA,mCAAc,IAAI,UAAU;IAC3C,kBAAkBA,mCAAc,IAAI,cAAc;IACnD;GACD,KAAKC,kCAAa,QAAQ;GAC1B,MAAMC,kCAAa,QAAQ;GAC3B,WAAWC,uCAAkB,QAAQ;GACrC,SAASC,uCAAkB,SAAS,cAAc;GAClD,SAASA,uCAAkB,SAAS,UAAU;GAC/C"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { fetchPage } from "../fetchers/fetchers.mjs";
|
|
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";
|
|
4
|
+
import { parse } from "node-html-parser";
|
|
5
|
+
|
|
6
|
+
//#region src/services/movie.service.ts
|
|
7
|
+
var MovieScraper = class {
|
|
8
|
+
async movie(movieId) {
|
|
9
|
+
const id = Number(movieId);
|
|
10
|
+
if (isNaN(id)) throw new Error("node-csfd-api: movieId must be a valid number");
|
|
11
|
+
const movieHtml = parse(await fetchPage(movieUrl(id)));
|
|
12
|
+
const pageClasses = movieHtml.querySelector(".page-content").classNames.split(" ");
|
|
13
|
+
const asideNode = movieHtml.querySelector(".aside-movie-profile");
|
|
14
|
+
const movieNode = movieHtml.querySelector(".main-movie-profile");
|
|
15
|
+
const jsonLd = movieHtml.querySelector("script[type=\"application/ld+json\"]").innerText;
|
|
16
|
+
this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd);
|
|
17
|
+
return this.film;
|
|
18
|
+
}
|
|
19
|
+
buildMovie(movieId, el, asideEl, pageClasses, jsonLd) {
|
|
20
|
+
this.film = {
|
|
21
|
+
id: movieId,
|
|
22
|
+
title: getMovieTitle(el),
|
|
23
|
+
year: getMovieYear(jsonLd),
|
|
24
|
+
duration: getMovieDuration(jsonLd, el),
|
|
25
|
+
descriptions: getMovieDescriptions(el),
|
|
26
|
+
genres: getMovieGenres(el),
|
|
27
|
+
type: getMovieType(el),
|
|
28
|
+
url: movieUrl(movieId),
|
|
29
|
+
origins: getMovieOrigins(el),
|
|
30
|
+
colorRating: getMovieColorRating(pageClasses),
|
|
31
|
+
rating: getMovieRating(asideEl),
|
|
32
|
+
ratingCount: getMovieRatingCount(asideEl),
|
|
33
|
+
titlesOther: getMovieTitlesOther(el),
|
|
34
|
+
poster: getMoviePoster(el),
|
|
35
|
+
photo: getMovieRandomPhoto(el),
|
|
36
|
+
trivia: getMovieTrivia(el),
|
|
37
|
+
creators: {
|
|
38
|
+
directors: getMovieGroup(el, "Režie"),
|
|
39
|
+
writers: getMovieGroup(el, "Scénář"),
|
|
40
|
+
cinematography: getMovieGroup(el, "Kamera"),
|
|
41
|
+
music: getMovieGroup(el, "Hudba"),
|
|
42
|
+
actors: getMovieGroup(el, "Hrají"),
|
|
43
|
+
basedOn: getMovieGroup(el, "Předloha"),
|
|
44
|
+
producers: getMovieGroup(el, "Produkce"),
|
|
45
|
+
filmEditing: getMovieGroup(el, "Střih"),
|
|
46
|
+
costumeDesign: getMovieGroup(el, "Kostýmy"),
|
|
47
|
+
productionDesign: getMovieGroup(el, "Scénografie")
|
|
48
|
+
},
|
|
49
|
+
vod: getMovieVods(asideEl),
|
|
50
|
+
tags: getMovieTags(asideEl),
|
|
51
|
+
premieres: getMoviePremieres(asideEl),
|
|
52
|
+
related: getMovieBoxMovies(asideEl, "Související"),
|
|
53
|
+
similar: getMovieBoxMovies(asideEl, "Podobné")
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
//#endregion
|
|
59
|
+
export { MovieScraper };
|
|
60
|
+
//# sourceMappingURL=movie.service.mjs.map
|
|
@@ -0,0 +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/fetchers.js';\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.js';\nimport { movieUrl } from '../vars.js';\n\nexport class MovieScraper {\n private film: CSFDMovie;\n\n public async movie(movieId: number): 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);\n const response = await fetchPage(url);\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 this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd);\n return this.film;\n }\n\n private buildMovie(\n movieId: number,\n el: HTMLElement,\n asideEl: HTMLElement,\n pageClasses: string[],\n jsonLd: string\n ) {\n this.film = {\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),\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, 'Režie'),\n writers: getMovieGroup(el, 'Scénář'),\n cinematography: getMovieGroup(el, 'Kamera'),\n music: getMovieGroup(el, 'Hudba'),\n actors: getMovieGroup(el, 'Hrají'),\n basedOn: getMovieGroup(el, 'Předloha'),\n producers: getMovieGroup(el, 'Produkce'),\n filmEditing: getMovieGroup(el, 'Střih'),\n costumeDesign: getMovieGroup(el, 'Kostýmy'),\n productionDesign: getMovieGroup(el, 'Scénografie')\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":";;;;;;AA2BA,IAAa,eAAb,MAA0B;CAGxB,MAAa,MAAM,SAAqC;EACtD,MAAM,KAAK,OAAO,QAAQ;AAC1B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,gDAAgD;EAKlE,MAAM,YAAY,MAFD,MAAM,UADX,SAAS,GAAG,CACa,CAEJ;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,OAAK,WAAW,CAAC,SAAS,WAAW,WAAW,aAAa,OAAO;AACpE,SAAO,KAAK;;CAGd,AAAQ,WACN,SACA,IACA,SACA,aACA,QACA;AACA,OAAK,OAAO;GACV,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,QAAQ;GACtB,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,QAAQ;IACrC,SAAS,cAAc,IAAI,SAAS;IACpC,gBAAgB,cAAc,IAAI,SAAS;IAC3C,OAAO,cAAc,IAAI,QAAQ;IACjC,QAAQ,cAAc,IAAI,QAAQ;IAClC,SAAS,cAAc,IAAI,WAAW;IACtC,WAAW,cAAc,IAAI,WAAW;IACxC,aAAa,cAAc,IAAI,QAAQ;IACvC,eAAe,cAAc,IAAI,UAAU;IAC3C,kBAAkB,cAAc,IAAI,cAAc;IACnD;GACD,KAAK,aAAa,QAAQ;GAC1B,MAAM,aAAa,QAAQ;GAC3B,WAAW,kBAAkB,QAAQ;GACrC,SAAS,kBAAkB,SAAS,cAAc;GAClD,SAAS,kBAAkB,SAAS,UAAU;GAC/C"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { CSFDSearch } from "../dto/search.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/services/search.service.d.ts
|
|
4
|
+
declare class SearchScraper {
|
|
5
|
+
search(text: string): Promise<CSFDSearch>;
|
|
6
|
+
private parseSearch;
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { SearchScraper };
|
|
10
|
+
//# sourceMappingURL=search.service.d.mts.map
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import { CSFDSearch } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { CSFDSearch } from "../dto/search.js";
|
|
2
|
+
|
|
3
|
+
//#region src/services/search.service.d.ts
|
|
4
|
+
declare class SearchScraper {
|
|
5
|
+
search(text: string): Promise<CSFDSearch>;
|
|
6
|
+
private parseSearch;
|
|
5
7
|
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { SearchScraper };
|
|
10
|
+
//# sourceMappingURL=search.service.d.ts.map
|
|
@@ -1,80 +1,81 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
2
|
+
const require_fetchers = require('../fetchers/fetchers.js');
|
|
3
|
+
const require_vars = require('../vars.js');
|
|
4
|
+
const require_global_helper = require('../helpers/global.helper.js');
|
|
5
|
+
const require_search_user_helper = require('../helpers/search-user.helper.js');
|
|
6
|
+
const require_search_helper = require('../helpers/search.helper.js');
|
|
7
|
+
let node_html_parser = require("node-html-parser");
|
|
8
|
+
node_html_parser = require_rolldown_runtime.__toESM(node_html_parser);
|
|
9
|
+
|
|
10
|
+
//#region src/services/search.service.ts
|
|
11
|
+
var SearchScraper = class {
|
|
12
|
+
async search(text) {
|
|
13
|
+
const html = (0, node_html_parser.parse)(await require_fetchers.fetchPage(require_vars.searchUrl(text)));
|
|
14
|
+
const moviesNode = html.querySelectorAll(".main-movies article");
|
|
15
|
+
const usersNode = html.querySelectorAll(".main-users article");
|
|
16
|
+
const tvSeriesNode = html.querySelectorAll(".main-series article");
|
|
17
|
+
return this.parseSearch(moviesNode, usersNode, tvSeriesNode);
|
|
18
|
+
}
|
|
19
|
+
parseSearch(moviesNode, usersNode, tvSeriesNode) {
|
|
20
|
+
const movies = [];
|
|
21
|
+
const users = [];
|
|
22
|
+
const tvSeries = [];
|
|
23
|
+
moviesNode.forEach((m) => {
|
|
24
|
+
const url = require_search_helper.getSearchUrl(m);
|
|
25
|
+
const movie = {
|
|
26
|
+
id: require_global_helper.parseIdFromUrl(url),
|
|
27
|
+
title: require_search_helper.getSearchTitle(m),
|
|
28
|
+
year: require_search_helper.getSearchYear(m),
|
|
29
|
+
url: `https://www.csfd.cz${url}`,
|
|
30
|
+
type: require_search_helper.getSearchType(m),
|
|
31
|
+
colorRating: require_search_helper.getSearchColorRating(m),
|
|
32
|
+
poster: require_search_helper.getSearchPoster(m),
|
|
33
|
+
origins: require_search_helper.getSearchOrigins(m),
|
|
34
|
+
creators: {
|
|
35
|
+
directors: require_search_helper.parseSearchPeople(m, "directors"),
|
|
36
|
+
actors: require_search_helper.parseSearchPeople(m, "actors")
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
movies.push(movie);
|
|
40
|
+
});
|
|
41
|
+
usersNode.forEach((m) => {
|
|
42
|
+
const url = require_search_user_helper.getUserUrl(m);
|
|
43
|
+
const user = {
|
|
44
|
+
id: require_global_helper.parseIdFromUrl(url),
|
|
45
|
+
user: require_search_user_helper.getUser(m),
|
|
46
|
+
userRealName: require_search_user_helper.getUserRealName(m),
|
|
47
|
+
avatar: require_search_user_helper.getAvatar(m),
|
|
48
|
+
url: `https://www.csfd.cz${url}`
|
|
49
|
+
};
|
|
50
|
+
users.push(user);
|
|
51
|
+
});
|
|
52
|
+
tvSeriesNode.forEach((m) => {
|
|
53
|
+
const url = require_search_helper.getSearchUrl(m);
|
|
54
|
+
const user = {
|
|
55
|
+
id: require_global_helper.parseIdFromUrl(url),
|
|
56
|
+
title: require_search_helper.getSearchTitle(m),
|
|
57
|
+
year: require_search_helper.getSearchYear(m),
|
|
58
|
+
url: `https://www.csfd.cz${url}`,
|
|
59
|
+
type: require_search_helper.getSearchType(m),
|
|
60
|
+
colorRating: require_search_helper.getSearchColorRating(m),
|
|
61
|
+
poster: require_search_helper.getSearchPoster(m),
|
|
62
|
+
origins: require_search_helper.getSearchOrigins(m),
|
|
63
|
+
creators: {
|
|
64
|
+
directors: require_search_helper.parseSearchPeople(m, "directors"),
|
|
65
|
+
actors: require_search_helper.parseSearchPeople(m, "actors")
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
tvSeries.push(user);
|
|
69
|
+
});
|
|
70
|
+
return {
|
|
71
|
+
movies,
|
|
72
|
+
users,
|
|
73
|
+
tvSeries,
|
|
74
|
+
creators: []
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
//#endregion
|
|
80
80
|
exports.SearchScraper = SearchScraper;
|
|
81
|
+
//# sourceMappingURL=search.service.js.map
|
|
@@ -0,0 +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/fetchers.js';\nimport { parseIdFromUrl } from '../helpers/global.helper.js';\nimport { getAvatar, getUser, getUserRealName, getUserUrl } from '../helpers/search-user.helper.js';\nimport {\n getSearchColorRating,\n getSearchOrigins,\n getSearchPoster,\n getSearchTitle,\n getSearchType,\n getSearchUrl,\n getSearchYear,\n parseSearchPeople\n} from '../helpers/search.helper.js';\nimport { searchUrl } from '../vars.js';\n\nexport class SearchScraper {\n public async search(text: string): Promise<CSFDSearch> {\n const url = searchUrl(text);\n const response = await fetchPage(url);\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);\n }\n\n private parseSearch(\n moviesNode: HTMLElement[],\n usersNode: HTMLElement[],\n tvSeriesNode: HTMLElement[]\n ) {\n const movies: CSFDSearchMovie[] = [];\n const users: CSFDSearchUser[] = [];\n const tvSeries: CSFDSearchMovie[] = [];\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: `https://www.csfd.cz${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: `https://www.csfd.cz${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: `https://www.csfd.cz${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":";;;;;;;;;;AAiBA,IAAa,gBAAb,MAA2B;CACzB,MAAa,OAAO,MAAmC;EAIrD,MAAM,mCAFW,MAAMA,2BADXC,uBAAU,KAAK,CACU,CAET;EAC5B,MAAM,aAAa,KAAK,iBAAiB,uBAAuB;EAChE,MAAM,YAAY,KAAK,iBAAiB,sBAAsB;EAC9D,MAAM,eAAe,KAAK,iBAAiB,uBAAuB;AAElE,SAAO,KAAK,YAAY,YAAY,WAAW,aAAa;;CAG9D,AAAQ,YACN,YACA,WACA,cACA;EACA,MAAMC,SAA4B,EAAE;EACpC,MAAMC,QAA0B,EAAE;EAClC,MAAMC,WAA8B,EAAE;AAEtC,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,sBAAsB;IAC3B,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,sBAAsB;IAC5B;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,sBAAsB;IAC3B,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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { fetchPage } from "../fetchers/fetchers.mjs";
|
|
2
|
+
import { searchUrl } from "../vars.mjs";
|
|
3
|
+
import { parseIdFromUrl } from "../helpers/global.helper.mjs";
|
|
4
|
+
import { getAvatar, getUser, getUserRealName, getUserUrl } from "../helpers/search-user.helper.mjs";
|
|
5
|
+
import { getSearchColorRating, getSearchOrigins, getSearchPoster, getSearchTitle, getSearchType, getSearchUrl, getSearchYear, parseSearchPeople } from "../helpers/search.helper.mjs";
|
|
6
|
+
import { parse } from "node-html-parser";
|
|
7
|
+
|
|
8
|
+
//#region src/services/search.service.ts
|
|
9
|
+
var SearchScraper = class {
|
|
10
|
+
async search(text) {
|
|
11
|
+
const html = parse(await fetchPage(searchUrl(text)));
|
|
12
|
+
const moviesNode = html.querySelectorAll(".main-movies article");
|
|
13
|
+
const usersNode = html.querySelectorAll(".main-users article");
|
|
14
|
+
const tvSeriesNode = html.querySelectorAll(".main-series article");
|
|
15
|
+
return this.parseSearch(moviesNode, usersNode, tvSeriesNode);
|
|
16
|
+
}
|
|
17
|
+
parseSearch(moviesNode, usersNode, tvSeriesNode) {
|
|
18
|
+
const movies = [];
|
|
19
|
+
const users = [];
|
|
20
|
+
const tvSeries = [];
|
|
21
|
+
moviesNode.forEach((m) => {
|
|
22
|
+
const url = getSearchUrl(m);
|
|
23
|
+
const movie = {
|
|
24
|
+
id: parseIdFromUrl(url),
|
|
25
|
+
title: getSearchTitle(m),
|
|
26
|
+
year: getSearchYear(m),
|
|
27
|
+
url: `https://www.csfd.cz${url}`,
|
|
28
|
+
type: getSearchType(m),
|
|
29
|
+
colorRating: getSearchColorRating(m),
|
|
30
|
+
poster: getSearchPoster(m),
|
|
31
|
+
origins: getSearchOrigins(m),
|
|
32
|
+
creators: {
|
|
33
|
+
directors: parseSearchPeople(m, "directors"),
|
|
34
|
+
actors: parseSearchPeople(m, "actors")
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
movies.push(movie);
|
|
38
|
+
});
|
|
39
|
+
usersNode.forEach((m) => {
|
|
40
|
+
const url = getUserUrl(m);
|
|
41
|
+
const user = {
|
|
42
|
+
id: parseIdFromUrl(url),
|
|
43
|
+
user: getUser(m),
|
|
44
|
+
userRealName: getUserRealName(m),
|
|
45
|
+
avatar: getAvatar(m),
|
|
46
|
+
url: `https://www.csfd.cz${url}`
|
|
47
|
+
};
|
|
48
|
+
users.push(user);
|
|
49
|
+
});
|
|
50
|
+
tvSeriesNode.forEach((m) => {
|
|
51
|
+
const url = getSearchUrl(m);
|
|
52
|
+
const user = {
|
|
53
|
+
id: parseIdFromUrl(url),
|
|
54
|
+
title: getSearchTitle(m),
|
|
55
|
+
year: getSearchYear(m),
|
|
56
|
+
url: `https://www.csfd.cz${url}`,
|
|
57
|
+
type: getSearchType(m),
|
|
58
|
+
colorRating: getSearchColorRating(m),
|
|
59
|
+
poster: getSearchPoster(m),
|
|
60
|
+
origins: getSearchOrigins(m),
|
|
61
|
+
creators: {
|
|
62
|
+
directors: parseSearchPeople(m, "directors"),
|
|
63
|
+
actors: parseSearchPeople(m, "actors")
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
tvSeries.push(user);
|
|
67
|
+
});
|
|
68
|
+
return {
|
|
69
|
+
movies,
|
|
70
|
+
users,
|
|
71
|
+
tvSeries,
|
|
72
|
+
creators: []
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
//#endregion
|
|
78
|
+
export { SearchScraper };
|
|
79
|
+
//# sourceMappingURL=search.service.mjs.map
|
|
@@ -0,0 +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/fetchers.js';\nimport { parseIdFromUrl } from '../helpers/global.helper.js';\nimport { getAvatar, getUser, getUserRealName, getUserUrl } from '../helpers/search-user.helper.js';\nimport {\n getSearchColorRating,\n getSearchOrigins,\n getSearchPoster,\n getSearchTitle,\n getSearchType,\n getSearchUrl,\n getSearchYear,\n parseSearchPeople\n} from '../helpers/search.helper.js';\nimport { searchUrl } from '../vars.js';\n\nexport class SearchScraper {\n public async search(text: string): Promise<CSFDSearch> {\n const url = searchUrl(text);\n const response = await fetchPage(url);\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);\n }\n\n private parseSearch(\n moviesNode: HTMLElement[],\n usersNode: HTMLElement[],\n tvSeriesNode: HTMLElement[]\n ) {\n const movies: CSFDSearchMovie[] = [];\n const users: CSFDSearchUser[] = [];\n const tvSeries: CSFDSearchMovie[] = [];\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: `https://www.csfd.cz${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: `https://www.csfd.cz${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: `https://www.csfd.cz${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":";;;;;;;;AAiBA,IAAa,gBAAb,MAA2B;CACzB,MAAa,OAAO,MAAmC;EAIrD,MAAM,OAAO,MAFI,MAAM,UADX,UAAU,KAAK,CACU,CAET;EAC5B,MAAM,aAAa,KAAK,iBAAiB,uBAAuB;EAChE,MAAM,YAAY,KAAK,iBAAiB,sBAAsB;EAC9D,MAAM,eAAe,KAAK,iBAAiB,uBAAuB;AAElE,SAAO,KAAK,YAAY,YAAY,WAAW,aAAa;;CAG9D,AAAQ,YACN,YACA,WACA,cACA;EACA,MAAMA,SAA4B,EAAE;EACpC,MAAMC,QAA0B,EAAE;EAClC,MAAMC,WAA8B,EAAE;AAEtC,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,sBAAsB;IAC3B,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,sBAAsB;IAC5B;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,sBAAsB;IAC3B,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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CSFDUserRatingConfig, CSFDUserRatings } from "../dto/user-ratings.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/services/user-ratings.service.d.ts
|
|
4
|
+
declare class UserRatingsScraper {
|
|
5
|
+
private films;
|
|
6
|
+
userRatings(user: string | number, config?: CSFDUserRatingConfig): Promise<CSFDUserRatings[]>;
|
|
7
|
+
private getPage;
|
|
8
|
+
private buildUserRatings;
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { UserRatingsScraper };
|
|
12
|
+
//# sourceMappingURL=user-ratings.service.d.mts.map
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import { CSFDUserRatingConfig, CSFDUserRatings } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { CSFDUserRatingConfig, CSFDUserRatings } from "../dto/user-ratings.js";
|
|
2
|
+
|
|
3
|
+
//#region src/services/user-ratings.service.d.ts
|
|
4
|
+
declare class UserRatingsScraper {
|
|
5
|
+
private films;
|
|
6
|
+
userRatings(user: string | number, config?: CSFDUserRatingConfig): Promise<CSFDUserRatings[]>;
|
|
7
|
+
private getPage;
|
|
8
|
+
private buildUserRatings;
|
|
7
9
|
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { UserRatingsScraper };
|
|
12
|
+
//# sourceMappingURL=user-ratings.service.d.ts.map
|