node-csfd-api 5.4.0 → 5.5.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/bin/{export-ratings.mjs → export-ratings.js} +1 -1
- package/bin/{mcp-server.mjs → mcp-server.js} +2 -2
- package/bin/{server.mjs → server.js} +2 -2
- package/{cli.mjs → cli.js} +3 -3
- package/dto/{cinema.d.mts → cinema.d.cts} +2 -2
- package/dto/{creator.d.mts → creator.d.cts} +2 -2
- package/dto/{global.d.mts → global.d.cts} +1 -1
- package/dto/{movie.d.mts → movie.d.cts} +2 -2
- package/dto/{options.d.mts → options.d.cts} +1 -1
- package/dto/{search.d.mts → search.d.cts} +3 -3
- package/dto/{user-ratings.d.mts → user-ratings.d.cts} +2 -2
- package/dto/{user-reviews.d.mts → user-reviews.d.cts} +2 -2
- package/fetchers/{fetch.polyfill.mjs → fetch.polyfill.cjs} +3 -4
- package/fetchers/fetch.polyfill.cjs.map +1 -0
- package/fetchers/fetch.polyfill.js +2 -3
- package/fetchers/fetch.polyfill.js.map +1 -1
- package/fetchers/{index.mjs → index.cjs} +4 -4
- package/fetchers/index.cjs.map +1 -0
- package/fetchers/index.js +3 -3
- package/fetchers/index.js.map +1 -1
- package/helpers/{cinema.helper.mjs → cinema.helper.cjs} +9 -5
- package/helpers/cinema.helper.cjs.map +1 -0
- package/helpers/cinema.helper.js +4 -8
- package/helpers/cinema.helper.js.map +1 -1
- package/helpers/{creator.helper.mjs → creator.helper.cjs} +11 -7
- package/helpers/creator.helper.cjs.map +1 -0
- package/helpers/creator.helper.js +6 -10
- package/helpers/creator.helper.js.map +1 -1
- package/helpers/{global.helper.mjs → global.helper.cjs} +10 -2
- package/helpers/{global.helper.mjs.map → global.helper.cjs.map} +1 -1
- package/helpers/global.helper.js +1 -9
- package/helpers/{movie.helper.mjs → movie.helper.cjs} +36 -13
- package/helpers/movie.helper.cjs.map +1 -0
- package/helpers/movie.helper.js +12 -35
- package/helpers/movie.helper.js.map +1 -1
- package/helpers/{search-creator.helper.mjs → search-creator.helper.cjs} +6 -4
- package/helpers/search-creator.helper.cjs.map +1 -0
- package/helpers/search-creator.helper.js +3 -5
- package/helpers/search-creator.helper.js.map +1 -1
- package/helpers/{search-user.helper.mjs → search-user.helper.cjs} +9 -6
- package/helpers/search-user.helper.cjs.map +1 -0
- package/helpers/search-user.helper.js +5 -8
- package/helpers/search-user.helper.js.map +1 -1
- package/helpers/{search.helper.mjs → search.helper.cjs} +14 -7
- package/helpers/search.helper.cjs.map +1 -0
- package/helpers/search.helper.js +6 -13
- package/helpers/search.helper.js.map +1 -1
- package/helpers/{user-ratings.helper.mjs → user-ratings.helper.cjs} +14 -7
- package/helpers/user-ratings.helper.cjs.map +1 -0
- package/helpers/user-ratings.helper.js +6 -13
- package/helpers/user-ratings.helper.js.map +1 -1
- package/helpers/{user-reviews.helper.mjs → user-reviews.helper.cjs} +16 -7
- package/helpers/user-reviews.helper.cjs.map +1 -0
- package/helpers/user-reviews.helper.js +6 -15
- package/helpers/user-reviews.helper.js.map +1 -1
- package/{index.mjs → index.cjs} +16 -13
- package/index.cjs.map +1 -0
- package/{index.d.mts → index.d.cts} +15 -15
- package/index.js +13 -14
- package/index.js.map +1 -1
- package/{package.mjs → package.js} +1 -1
- package/package.json +13 -7
- package/services/cinema.service.cjs +31 -0
- package/services/cinema.service.cjs.map +1 -0
- package/services/{cinema.service.d.mts → cinema.service.d.cts} +3 -3
- package/services/cinema.service.js +11 -11
- package/services/cinema.service.js.map +1 -1
- package/services/creator.service.cjs +32 -0
- package/services/creator.service.cjs.map +1 -0
- package/services/{creator.service.d.mts → creator.service.d.cts} +3 -3
- package/services/creator.service.js +11 -11
- package/services/creator.service.js.map +1 -1
- package/services/movie.service.cjs +61 -0
- package/services/movie.service.cjs.map +1 -0
- package/services/{movie.service.d.mts → movie.service.d.cts} +3 -3
- package/services/movie.service.js +33 -33
- package/services/movie.service.js.map +1 -1
- package/services/search.service.cjs +75 -0
- package/services/search.service.cjs.map +1 -0
- package/services/{search.service.d.mts → search.service.d.cts} +3 -3
- package/services/search.service.js +29 -29
- package/services/search.service.js.map +1 -1
- package/services/{user-ratings.service.mjs → user-ratings.service.cjs} +19 -19
- package/services/user-ratings.service.cjs.map +1 -0
- package/services/{user-ratings.service.d.mts → user-ratings.service.d.cts} +3 -3
- package/services/user-ratings.service.js +18 -18
- package/services/user-ratings.service.js.map +1 -1
- package/services/{user-reviews.service.mjs → user-reviews.service.cjs} +21 -21
- package/services/user-reviews.service.cjs.map +1 -0
- package/services/{user-reviews.service.d.mts → user-reviews.service.d.cts} +3 -3
- package/services/user-reviews.service.js +20 -20
- package/services/user-reviews.service.js.map +1 -1
- package/src/fetchers/{fetch.polyfill.mjs → fetch.polyfill.js} +1 -3
- package/src/fetchers/{index.mjs → index.js} +1 -1
- package/src/helpers/{cinema.helper.mjs → cinema.helper.js} +1 -1
- package/src/helpers/{creator.helper.mjs → creator.helper.js} +1 -1
- package/src/helpers/{movie.helper.mjs → movie.helper.js} +1 -1
- package/src/helpers/{search-creator.helper.mjs → search-creator.helper.js} +1 -1
- package/src/helpers/{search-user.helper.mjs → search-user.helper.js} +1 -1
- package/src/helpers/{search.helper.mjs → search.helper.js} +1 -1
- package/src/helpers/{user-ratings.helper.mjs → user-ratings.helper.js} +1 -1
- package/src/helpers/{user-reviews.helper.mjs → user-reviews.helper.js} +1 -1
- package/src/{index.mjs → index.js} +7 -6
- package/src/services/{cinema.service.mjs → cinema.service.js} +3 -3
- package/src/services/{creator.service.mjs → creator.service.js} +3 -3
- package/src/services/{movie.service.mjs → movie.service.js} +3 -3
- package/src/services/{search.service.mjs → search.service.js} +6 -6
- package/src/services/{user-ratings.service.mjs → user-ratings.service.js} +4 -4
- package/src/services/{user-reviews.service.mjs → user-reviews.service.js} +4 -4
- package/{vars.mjs → vars.cjs} +8 -2
- package/{vars.mjs.map → vars.cjs.map} +1 -1
- package/vars.js +1 -7
- package/fetchers/fetch.polyfill.mjs.map +0 -1
- package/fetchers/index.mjs.map +0 -1
- package/helpers/cinema.helper.mjs.map +0 -1
- package/helpers/creator.helper.mjs.map +0 -1
- package/helpers/movie.helper.mjs.map +0 -1
- package/helpers/search-creator.helper.mjs.map +0 -1
- package/helpers/search-user.helper.mjs.map +0 -1
- package/helpers/search.helper.mjs.map +0 -1
- package/helpers/user-ratings.helper.mjs.map +0 -1
- package/helpers/user-reviews.helper.mjs.map +0 -1
- package/index.mjs.map +0 -1
- package/services/cinema.service.mjs +0 -31
- package/services/cinema.service.mjs.map +0 -1
- package/services/creator.service.mjs +0 -32
- package/services/creator.service.mjs.map +0 -1
- package/services/movie.service.mjs +0 -61
- package/services/movie.service.mjs.map +0 -1
- package/services/search.service.mjs +0 -75
- package/services/search.service.mjs.map +0 -1
- package/services/user-ratings.service.mjs.map +0 -1
- package/services/user-reviews.service.mjs.map +0 -1
- /package/src/helpers/{global.helper.mjs → global.helper.js} +0 -0
- /package/src/{vars.mjs → vars.js} +0 -0
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { fetchPage } from "../fetchers/index.js";
|
|
2
|
+
import { cinemasUrl } from "../vars.js";
|
|
3
|
+
import { getCinemaCoords, getCinemaId, getCinemaUrl, getGroupedFilmsByDate, parseCinema } from "../helpers/cinema.helper.js";
|
|
4
|
+
import { parse } from "node-html-parser";
|
|
5
5
|
//#region src/services/cinema.service.ts
|
|
6
6
|
var CinemaScraper = class {
|
|
7
7
|
async cinemas(district = 1, period = "today", options) {
|
|
8
|
-
const contentNode =
|
|
8
|
+
const contentNode = parse(await fetchPage(cinemasUrl(district, period, { language: options?.language }), { ...options?.request })).querySelectorAll("#snippet--cinemas section[id*=\"cinema-\"]");
|
|
9
9
|
return this.buildCinemas(contentNode);
|
|
10
10
|
}
|
|
11
11
|
buildCinemas(contentNode) {
|
|
12
12
|
const cinemas = [];
|
|
13
13
|
contentNode.forEach((x) => {
|
|
14
|
-
const cinemaInfo =
|
|
14
|
+
const cinemaInfo = parseCinema(x);
|
|
15
15
|
const cinema = {
|
|
16
|
-
id:
|
|
16
|
+
id: getCinemaId(x),
|
|
17
17
|
name: cinemaInfo?.name,
|
|
18
18
|
city: cinemaInfo?.city,
|
|
19
|
-
url:
|
|
20
|
-
coords:
|
|
21
|
-
screenings:
|
|
19
|
+
url: getCinemaUrl(x),
|
|
20
|
+
coords: getCinemaCoords(x),
|
|
21
|
+
screenings: getGroupedFilmsByDate(x)
|
|
22
22
|
};
|
|
23
23
|
cinemas.push(cinema);
|
|
24
24
|
});
|
|
@@ -26,6 +26,6 @@ var CinemaScraper = class {
|
|
|
26
26
|
}
|
|
27
27
|
};
|
|
28
28
|
//#endregion
|
|
29
|
-
|
|
29
|
+
export { CinemaScraper };
|
|
30
30
|
|
|
31
31
|
//# sourceMappingURL=cinema.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cinema.service.js","names":[
|
|
1
|
+
{"version":3,"file":"cinema.service.js","names":[],"sources":["../../src/services/cinema.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDCinema, CSFDCinemaPeriod } from '../dto/cinema';\nimport { fetchPage } from '../fetchers';\nimport { CSFDOptions } from '../types';\nimport { cinemasUrl } from '../vars';\nimport {\n getCinemaCoords,\n getCinemaId,\n getCinemaUrl,\n getGroupedFilmsByDate,\n parseCinema\n} from './../helpers/cinema.helper';\n\nexport class CinemaScraper {\n public async cinemas(\n district: number = 1,\n period: CSFDCinemaPeriod = 'today',\n options?: CSFDOptions\n ): Promise<CSFDCinema[]> {\n const url = cinemasUrl(district, period, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n const cinemasHtml = parse(response);\n\n const contentNode = cinemasHtml.querySelectorAll('#snippet--cinemas section[id*=\"cinema-\"]');\n\n return this.buildCinemas(contentNode);\n }\n\n private buildCinemas(contentNode: HTMLElement[]): CSFDCinema[] {\n const cinemas: CSFDCinema[] = [];\n\n contentNode.forEach((x) => {\n const cinemaInfo = parseCinema(x);\n const cinema: CSFDCinema = {\n id: getCinemaId(x),\n name: cinemaInfo?.name,\n city: cinemaInfo?.city,\n url: getCinemaUrl(x),\n coords: getCinemaCoords(x),\n screenings: getGroupedFilmsByDate(x)\n };\n cinemas.push(cinema);\n });\n\n return cinemas;\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,gBAAb,MAA2B;CACzB,MAAa,QACX,WAAmB,GACnB,SAA2B,SAC3B,SACuB;EAKvB,MAAM,cAFc,MADH,MAAM,UADX,WAAW,UAAU,QAAQ,EAAE,UAAU,SAAS,UAAU,CAAC,EACnC,EAAE,GAAG,SAAS,SAAS,CAAC,CAC3B,CAEH,iBAAiB,6CAA2C;AAE5F,SAAO,KAAK,aAAa,YAAY;;CAGvC,aAAqB,aAA0C;EAC7D,MAAM,UAAwB,EAAE;AAEhC,cAAY,SAAS,MAAM;GACzB,MAAM,aAAa,YAAY,EAAE;GACjC,MAAM,SAAqB;IACzB,IAAI,YAAY,EAAE;IAClB,MAAM,YAAY;IAClB,MAAM,YAAY;IAClB,KAAK,aAAa,EAAE;IACpB,QAAQ,gBAAgB,EAAE;IAC1B,YAAY,sBAAsB,EAAE;IACrC;AACD,WAAQ,KAAK,OAAO;IACpB;AAEF,SAAO"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const require_index = require("../fetchers/index.cjs");
|
|
2
|
+
const require_vars = require("../vars.cjs");
|
|
3
|
+
const require_creator_helper = require("../helpers/creator.helper.cjs");
|
|
4
|
+
let node_html_parser = require("node-html-parser");
|
|
5
|
+
//#region src/services/creator.service.ts
|
|
6
|
+
var CreatorScraper = class {
|
|
7
|
+
async creator(creatorId, options) {
|
|
8
|
+
const id = Number(creatorId);
|
|
9
|
+
if (isNaN(id)) throw new Error("node-csfd-api: creatorId must be a valid number");
|
|
10
|
+
const creatorHtml = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.creatorUrl(id, { language: options?.language }), { ...options?.request }));
|
|
11
|
+
const asideNode = creatorHtml.querySelector(".creator-about");
|
|
12
|
+
const filmsNode = creatorHtml.querySelector(".creator-filmography");
|
|
13
|
+
return this.buildCreator(+creatorId, asideNode, filmsNode);
|
|
14
|
+
}
|
|
15
|
+
buildCreator(id, asideEl, filmsNode) {
|
|
16
|
+
const birthdayInfo = require_creator_helper.getCreatorBirthdayInfo(asideEl);
|
|
17
|
+
return {
|
|
18
|
+
id,
|
|
19
|
+
name: require_creator_helper.getCreatorName(asideEl),
|
|
20
|
+
birthday: birthdayInfo?.birthday,
|
|
21
|
+
birthplace: birthdayInfo?.birthPlace,
|
|
22
|
+
photo: require_creator_helper.getCreatorPhoto(asideEl),
|
|
23
|
+
age: birthdayInfo?.age || null,
|
|
24
|
+
bio: require_creator_helper.getCreatorBio(asideEl),
|
|
25
|
+
films: require_creator_helper.getCreatorFilms(filmsNode)
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
//#endregion
|
|
30
|
+
exports.CreatorScraper = CreatorScraper;
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=creator.service.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"creator.service.cjs","names":["fetchPage","creatorUrl","getCreatorBirthdayInfo","getCreatorName","getCreatorPhoto","getCreatorBio","getCreatorFilms"],"sources":["../../src/services/creator.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDCreator } from '../dto/creator';\nimport { fetchPage } from '../fetchers';\nimport {\n getCreatorBio,\n getCreatorBirthdayInfo,\n getCreatorFilms,\n getCreatorName,\n getCreatorPhoto\n} from '../helpers/creator.helper';\nimport { CSFDOptions } from '../types';\nimport { creatorUrl } from '../vars';\n\nexport class CreatorScraper {\n public async creator(creatorId: number, options?: CSFDOptions): Promise<CSFDCreator> {\n const id = Number(creatorId);\n if (isNaN(id)) {\n throw new Error('node-csfd-api: creatorId must be a valid number');\n }\n const url = creatorUrl(id, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const creatorHtml = parse(response);\n\n const asideNode = creatorHtml.querySelector('.creator-about');\n const filmsNode = creatorHtml.querySelector('.creator-filmography');\n return this.buildCreator(+creatorId, asideNode, filmsNode);\n }\n\n private buildCreator(id: number, asideEl: HTMLElement, filmsNode: HTMLElement): CSFDCreator {\n const birthdayInfo = getCreatorBirthdayInfo(asideEl);\n return {\n id,\n name: getCreatorName(asideEl),\n birthday: birthdayInfo?.birthday,\n birthplace: birthdayInfo?.birthPlace,\n photo: getCreatorPhoto(asideEl),\n age: birthdayInfo?.age || null,\n bio: getCreatorBio(asideEl),\n films: getCreatorFilms(filmsNode)\n };\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,iBAAb,MAA4B;CAC1B,MAAa,QAAQ,WAAmB,SAA6C;EACnF,MAAM,KAAK,OAAO,UAAU;AAC5B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,kDAAkD;EAKpE,MAAM,eAAA,GAAA,iBAAA,OAFW,MAAMA,cAAAA,UADXC,aAAAA,WAAW,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACrB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE3B;EAEnC,MAAM,YAAY,YAAY,cAAc,iBAAiB;EAC7D,MAAM,YAAY,YAAY,cAAc,uBAAuB;AACnE,SAAO,KAAK,aAAa,CAAC,WAAW,WAAW,UAAU;;CAG5D,aAAqB,IAAY,SAAsB,WAAqC;EAC1F,MAAM,eAAeC,uBAAAA,uBAAuB,QAAQ;AACpD,SAAO;GACL;GACA,MAAMC,uBAAAA,eAAe,QAAQ;GAC7B,UAAU,cAAc;GACxB,YAAY,cAAc;GAC1B,OAAOC,uBAAAA,gBAAgB,QAAQ;GAC/B,KAAK,cAAc,OAAO;GAC1B,KAAKC,uBAAAA,cAAc,QAAQ;GAC3B,OAAOC,uBAAAA,gBAAgB,UAAU;GAClC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CSFDCreator } from "../dto/creator.
|
|
2
|
-
import { CSFDOptions } from "../dto/options.
|
|
1
|
+
import { CSFDCreator } from "../dto/creator.cjs";
|
|
2
|
+
import { CSFDOptions } from "../dto/options.cjs";
|
|
3
3
|
|
|
4
4
|
//#region src/services/creator.service.d.ts
|
|
5
5
|
declare class CreatorScraper {
|
|
@@ -8,4 +8,4 @@ declare class CreatorScraper {
|
|
|
8
8
|
}
|
|
9
9
|
//#endregion
|
|
10
10
|
export { CreatorScraper };
|
|
11
|
-
//# sourceMappingURL=creator.service.d.
|
|
11
|
+
//# sourceMappingURL=creator.service.d.cts.map
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { fetchPage } from "../fetchers/index.js";
|
|
2
|
+
import { creatorUrl } from "../vars.js";
|
|
3
|
+
import { getCreatorBio, getCreatorBirthdayInfo, getCreatorFilms, getCreatorName, getCreatorPhoto } from "../helpers/creator.helper.js";
|
|
4
|
+
import { parse } from "node-html-parser";
|
|
5
5
|
//#region src/services/creator.service.ts
|
|
6
6
|
var CreatorScraper = class {
|
|
7
7
|
async creator(creatorId, options) {
|
|
8
8
|
const id = Number(creatorId);
|
|
9
9
|
if (isNaN(id)) throw new Error("node-csfd-api: creatorId must be a valid number");
|
|
10
|
-
const creatorHtml =
|
|
10
|
+
const creatorHtml = parse(await fetchPage(creatorUrl(id, { language: options?.language }), { ...options?.request }));
|
|
11
11
|
const asideNode = creatorHtml.querySelector(".creator-about");
|
|
12
12
|
const filmsNode = creatorHtml.querySelector(".creator-filmography");
|
|
13
13
|
return this.buildCreator(+creatorId, asideNode, filmsNode);
|
|
14
14
|
}
|
|
15
15
|
buildCreator(id, asideEl, filmsNode) {
|
|
16
|
-
const birthdayInfo =
|
|
16
|
+
const birthdayInfo = getCreatorBirthdayInfo(asideEl);
|
|
17
17
|
return {
|
|
18
18
|
id,
|
|
19
|
-
name:
|
|
19
|
+
name: getCreatorName(asideEl),
|
|
20
20
|
birthday: birthdayInfo?.birthday,
|
|
21
21
|
birthplace: birthdayInfo?.birthPlace,
|
|
22
|
-
photo:
|
|
22
|
+
photo: getCreatorPhoto(asideEl),
|
|
23
23
|
age: birthdayInfo?.age || null,
|
|
24
|
-
bio:
|
|
25
|
-
films:
|
|
24
|
+
bio: getCreatorBio(asideEl),
|
|
25
|
+
films: getCreatorFilms(filmsNode)
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
29
|
//#endregion
|
|
30
|
-
|
|
30
|
+
export { CreatorScraper };
|
|
31
31
|
|
|
32
32
|
//# sourceMappingURL=creator.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"creator.service.js","names":[
|
|
1
|
+
{"version":3,"file":"creator.service.js","names":[],"sources":["../../src/services/creator.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDCreator } from '../dto/creator';\nimport { fetchPage } from '../fetchers';\nimport {\n getCreatorBio,\n getCreatorBirthdayInfo,\n getCreatorFilms,\n getCreatorName,\n getCreatorPhoto\n} from '../helpers/creator.helper';\nimport { CSFDOptions } from '../types';\nimport { creatorUrl } from '../vars';\n\nexport class CreatorScraper {\n public async creator(creatorId: number, options?: CSFDOptions): Promise<CSFDCreator> {\n const id = Number(creatorId);\n if (isNaN(id)) {\n throw new Error('node-csfd-api: creatorId must be a valid number');\n }\n const url = creatorUrl(id, { language: options?.language });\n const response = await fetchPage(url, { ...options?.request });\n\n const creatorHtml = parse(response);\n\n const asideNode = creatorHtml.querySelector('.creator-about');\n const filmsNode = creatorHtml.querySelector('.creator-filmography');\n return this.buildCreator(+creatorId, asideNode, filmsNode);\n }\n\n private buildCreator(id: number, asideEl: HTMLElement, filmsNode: HTMLElement): CSFDCreator {\n const birthdayInfo = getCreatorBirthdayInfo(asideEl);\n return {\n id,\n name: getCreatorName(asideEl),\n birthday: birthdayInfo?.birthday,\n birthplace: birthdayInfo?.birthPlace,\n photo: getCreatorPhoto(asideEl),\n age: birthdayInfo?.age || null,\n bio: getCreatorBio(asideEl),\n films: getCreatorFilms(filmsNode)\n };\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,iBAAb,MAA4B;CAC1B,MAAa,QAAQ,WAAmB,SAA6C;EACnF,MAAM,KAAK,OAAO,UAAU;AAC5B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,kDAAkD;EAKpE,MAAM,cAAc,MAFH,MAAM,UADX,WAAW,IAAI,EAAE,UAAU,SAAS,UAAU,CAAC,EACrB,EAAE,GAAG,SAAS,SAAS,CAAC,CAE3B;EAEnC,MAAM,YAAY,YAAY,cAAc,iBAAiB;EAC7D,MAAM,YAAY,YAAY,cAAc,uBAAuB;AACnE,SAAO,KAAK,aAAa,CAAC,WAAW,WAAW,UAAU;;CAG5D,aAAqB,IAAY,SAAsB,WAAqC;EAC1F,MAAM,eAAe,uBAAuB,QAAQ;AACpD,SAAO;GACL;GACA,MAAM,eAAe,QAAQ;GAC7B,UAAU,cAAc;GACxB,YAAY,cAAc;GAC1B,OAAO,gBAAgB,QAAQ;GAC/B,KAAK,cAAc,OAAO;GAC1B,KAAK,cAAc,QAAQ;GAC3B,OAAO,gBAAgB,UAAU;GAClC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
const require_index = require("../fetchers/index.cjs");
|
|
2
|
+
const require_vars = require("../vars.cjs");
|
|
3
|
+
const require_movie_helper = require("../helpers/movie.helper.cjs");
|
|
4
|
+
let node_html_parser = require("node-html-parser");
|
|
5
|
+
//#region src/services/movie.service.ts
|
|
6
|
+
var MovieScraper = class {
|
|
7
|
+
async movie(movieId, options) {
|
|
8
|
+
const id = Number(movieId);
|
|
9
|
+
if (isNaN(id)) throw new Error("node-csfd-api: movieId must be a valid number");
|
|
10
|
+
const movieHtml = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.movieUrl(id, { language: options?.language }), { ...options?.request }));
|
|
11
|
+
const pageClasses = movieHtml.querySelector(".page-content").classNames.split(" ");
|
|
12
|
+
const asideNode = movieHtml.querySelector(".aside-movie-profile");
|
|
13
|
+
const movieNode = movieHtml.querySelector(".main-movie-profile");
|
|
14
|
+
const jsonLdString = movieHtml.querySelector("script[type=\"application/ld+json\"]").innerText;
|
|
15
|
+
let jsonLd = null;
|
|
16
|
+
try {
|
|
17
|
+
jsonLd = JSON.parse(jsonLdString);
|
|
18
|
+
} catch (e) {
|
|
19
|
+
console.error("node-csfd-api: Error parsing JSON-LD", e);
|
|
20
|
+
}
|
|
21
|
+
return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd, options);
|
|
22
|
+
}
|
|
23
|
+
buildMovie(movieId, el, asideEl, pageClasses, jsonLd, options) {
|
|
24
|
+
const type = require_movie_helper.getMovieType(el);
|
|
25
|
+
const { seriesName = null, seasonName = null } = type === "season" ? require_movie_helper.getSeriesAndSeasonTitle(el) : {};
|
|
26
|
+
const seasonOrEpisodeListType = require_movie_helper.detectSeasonOrEpisodeListType(el);
|
|
27
|
+
return {
|
|
28
|
+
id: movieId,
|
|
29
|
+
title: type === "season" && seriesName ? seriesName : require_movie_helper.getMovieTitle(el),
|
|
30
|
+
year: require_movie_helper.getMovieYear(jsonLd),
|
|
31
|
+
duration: require_movie_helper.getMovieDuration(jsonLd, el),
|
|
32
|
+
descriptions: require_movie_helper.getMovieDescriptions(el),
|
|
33
|
+
genres: require_movie_helper.getMovieGenres(el),
|
|
34
|
+
type,
|
|
35
|
+
url: require_vars.movieUrl(movieId, { language: options?.language }),
|
|
36
|
+
origins: require_movie_helper.getMovieOrigins(el),
|
|
37
|
+
colorRating: require_movie_helper.getMovieColorRating(pageClasses),
|
|
38
|
+
rating: require_movie_helper.getMovieRating(asideEl),
|
|
39
|
+
ratingCount: require_movie_helper.getMovieRatingCount(asideEl),
|
|
40
|
+
titlesOther: require_movie_helper.getMovieTitlesOther(el),
|
|
41
|
+
poster: require_movie_helper.getMoviePoster(el),
|
|
42
|
+
photo: require_movie_helper.getMovieRandomPhoto(el),
|
|
43
|
+
trivia: require_movie_helper.getMovieTrivia(el),
|
|
44
|
+
creators: require_movie_helper.getMovieCreators(el, options),
|
|
45
|
+
vod: require_movie_helper.getMovieVods(asideEl),
|
|
46
|
+
tags: require_movie_helper.getMovieTags(asideEl),
|
|
47
|
+
premieres: require_movie_helper.getMoviePremieres(asideEl),
|
|
48
|
+
related: require_movie_helper.getMovieBoxMovies(asideEl, "Související"),
|
|
49
|
+
similar: require_movie_helper.getMovieBoxMovies(asideEl, "Podobné"),
|
|
50
|
+
seasons: seasonOrEpisodeListType === "seasons" ? require_movie_helper.getSeasonsOrEpisodes(el) : null,
|
|
51
|
+
episodes: seasonOrEpisodeListType === "episodes" ? require_movie_helper.getSeasonsOrEpisodes(el) : null,
|
|
52
|
+
parent: type === "season" || type === "episode" ? require_movie_helper.getSeasonOrEpisodeParent(el) : null,
|
|
53
|
+
episodeCode: type === "episode" ? require_movie_helper.getEpisodeCode(el) : null,
|
|
54
|
+
seasonName
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
//#endregion
|
|
59
|
+
exports.MovieScraper = MovieScraper;
|
|
60
|
+
|
|
61
|
+
//# sourceMappingURL=movie.service.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"movie.service.cjs","names":["fetchPage","movieUrl","getMovieType","getSeriesAndSeasonTitle","detectSeasonOrEpisodeListType","getMovieTitle","getMovieYear","getMovieDuration","getMovieDescriptions","getMovieGenres","getMovieOrigins","getMovieColorRating","getMovieRating","getMovieRatingCount","getMovieTitlesOther","getMoviePoster","getMovieRandomPhoto","getMovieTrivia","getMovieCreators","getMovieVods","getMovieTags","getMoviePremieres","getMovieBoxMovies","getSeasonsOrEpisodes","getSeasonOrEpisodeParent","getEpisodeCode"],"sources":["../../src/services/movie.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovie, MovieJsonLd } from '../dto/movie';\nimport { fetchPage } from '../fetchers';\nimport {\n detectSeasonOrEpisodeListType,\n getEpisodeCode,\n getMovieBoxMovies,\n getMovieColorRating,\n getMovieCreators,\n getMovieDescriptions,\n getMovieDuration,\n getMovieGenres,\n getMovieOrigins,\n getMoviePoster,\n getMoviePremieres,\n getMovieRandomPhoto,\n getMovieRating,\n getMovieRatingCount,\n getMovieTags,\n getMovieTitle,\n getMovieTitlesOther,\n getMovieTrivia,\n getMovieType,\n getMovieVods,\n getMovieYear,\n getSeasonOrEpisodeParent,\n getSeasonsOrEpisodes,\n getSeriesAndSeasonTitle\n} from '../helpers/movie.helper';\nimport { CSFDOptions } from '../types';\nimport { 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 jsonLdString = movieHtml.querySelector('script[type=\"application/ld+json\"]').innerText;\n let jsonLd: MovieJsonLd | null = null;\n try {\n jsonLd = JSON.parse(jsonLdString);\n } catch (e) {\n console.error('node-csfd-api: Error parsing JSON-LD', e);\n }\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: MovieJsonLd | null,\n options: CSFDOptions\n ) {\n const type = getMovieType(el) as CSFDFilmTypes;\n const { seriesName = null, seasonName = null } =\n type === 'season' ? getSeriesAndSeasonTitle(el) : {};\n const seasonOrEpisodeListType = detectSeasonOrEpisodeListType(el);\n\n const title = type === 'season' && seriesName ? seriesName : getMovieTitle(el);\n return {\n id: movieId,\n title,\n year: getMovieYear(jsonLd),\n duration: getMovieDuration(jsonLd, el),\n descriptions: getMovieDescriptions(el),\n genres: getMovieGenres(el),\n type,\n url: movieUrl(movieId, { language: options?.language }),\n origins: getMovieOrigins(el),\n colorRating: getMovieColorRating(pageClasses),\n rating: getMovieRating(asideEl),\n ratingCount: getMovieRatingCount(asideEl),\n titlesOther: getMovieTitlesOther(el),\n poster: getMoviePoster(el),\n photo: getMovieRandomPhoto(el),\n trivia: getMovieTrivia(el),\n creators: getMovieCreators(el, options),\n vod: getMovieVods(asideEl),\n tags: getMovieTags(asideEl),\n premieres: getMoviePremieres(asideEl),\n related: getMovieBoxMovies(asideEl, 'Související'),\n similar: getMovieBoxMovies(asideEl, 'Podobné'),\n seasons: seasonOrEpisodeListType === 'seasons' ? getSeasonsOrEpisodes(el) : null,\n episodes: seasonOrEpisodeListType === 'episodes' ? getSeasonsOrEpisodes(el) : null,\n parent: type === 'season' || type === 'episode' ? getSeasonOrEpisodeParent(el) : null,\n episodeCode: type === 'episode' ? getEpisodeCode(el) : null,\n seasonName\n };\n }\n}\n"],"mappings":";;;;;AAiCA,IAAa,eAAb,MAA0B;CACxB,MAAa,MAAM,SAAiB,SAA2C;EAC7E,MAAM,KAAK,OAAO,QAAQ;AAC1B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,gDAAgD;EAKlE,MAAM,aAAA,GAAA,iBAAA,OAFW,MAAMA,cAAAA,UADXC,aAAAA,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,eAAe,UAAU,cAAc,uCAAqC,CAAC;EACnF,IAAI,SAA6B;AACjC,MAAI;AACF,YAAS,KAAK,MAAM,aAAa;WAC1B,GAAG;AACV,WAAQ,MAAM,wCAAwC,EAAE;;AAE1D,SAAO,KAAK,WAAW,CAAC,SAAS,WAAW,WAAW,aAAa,QAAQ,QAAQ;;CAGtF,WACE,SACA,IACA,SACA,aACA,QACA,SACA;EACA,MAAM,OAAOC,qBAAAA,aAAa,GAAG;EAC7B,MAAM,EAAE,aAAa,MAAM,aAAa,SACtC,SAAS,WAAWC,qBAAAA,wBAAwB,GAAG,GAAG,EAAE;EACtD,MAAM,0BAA0BC,qBAAAA,8BAA8B,GAAG;AAGjE,SAAO;GACL,IAAI;GACJ,OAHY,SAAS,YAAY,aAAa,aAAaC,qBAAAA,cAAc,GAAG;GAI5E,MAAMC,qBAAAA,aAAa,OAAO;GAC1B,UAAUC,qBAAAA,iBAAiB,QAAQ,GAAG;GACtC,cAAcC,qBAAAA,qBAAqB,GAAG;GACtC,QAAQC,qBAAAA,eAAe,GAAG;GAC1B;GACA,KAAKR,aAAAA,SAAS,SAAS,EAAE,UAAU,SAAS,UAAU,CAAC;GACvD,SAASS,qBAAAA,gBAAgB,GAAG;GAC5B,aAAaC,qBAAAA,oBAAoB,YAAY;GAC7C,QAAQC,qBAAAA,eAAe,QAAQ;GAC/B,aAAaC,qBAAAA,oBAAoB,QAAQ;GACzC,aAAaC,qBAAAA,oBAAoB,GAAG;GACpC,QAAQC,qBAAAA,eAAe,GAAG;GAC1B,OAAOC,qBAAAA,oBAAoB,GAAG;GAC9B,QAAQC,qBAAAA,eAAe,GAAG;GAC1B,UAAUC,qBAAAA,iBAAiB,IAAI,QAAQ;GACvC,KAAKC,qBAAAA,aAAa,QAAQ;GAC1B,MAAMC,qBAAAA,aAAa,QAAQ;GAC3B,WAAWC,qBAAAA,kBAAkB,QAAQ;GACrC,SAASC,qBAAAA,kBAAkB,SAAS,cAAc;GAClD,SAASA,qBAAAA,kBAAkB,SAAS,UAAU;GAC9C,SAAS,4BAA4B,YAAYC,qBAAAA,qBAAqB,GAAG,GAAG;GAC5E,UAAU,4BAA4B,aAAaA,qBAAAA,qBAAqB,GAAG,GAAG;GAC9E,QAAQ,SAAS,YAAY,SAAS,YAAYC,qBAAAA,yBAAyB,GAAG,GAAG;GACjF,aAAa,SAAS,YAAYC,qBAAAA,eAAe,GAAG,GAAG;GACvD;GACD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CSFDMovie } from "../dto/movie.
|
|
2
|
-
import { CSFDOptions } from "../dto/options.
|
|
1
|
+
import { CSFDMovie } from "../dto/movie.cjs";
|
|
2
|
+
import { CSFDOptions } from "../dto/options.cjs";
|
|
3
3
|
|
|
4
4
|
//#region src/services/movie.service.d.ts
|
|
5
5
|
declare class MovieScraper {
|
|
@@ -8,4 +8,4 @@ declare class MovieScraper {
|
|
|
8
8
|
}
|
|
9
9
|
//#endregion
|
|
10
10
|
export { MovieScraper };
|
|
11
|
-
//# sourceMappingURL=movie.service.d.
|
|
11
|
+
//# sourceMappingURL=movie.service.d.cts.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { fetchPage } from "../fetchers/index.js";
|
|
2
|
+
import { movieUrl } from "../vars.js";
|
|
3
|
+
import { detectSeasonOrEpisodeListType, getEpisodeCode, getMovieBoxMovies, getMovieColorRating, getMovieCreators, getMovieDescriptions, getMovieDuration, getMovieGenres, getMovieOrigins, getMoviePoster, getMoviePremieres, getMovieRandomPhoto, getMovieRating, getMovieRatingCount, getMovieTags, getMovieTitle, getMovieTitlesOther, getMovieTrivia, getMovieType, getMovieVods, getMovieYear, getSeasonOrEpisodeParent, getSeasonsOrEpisodes, getSeriesAndSeasonTitle } from "../helpers/movie.helper.js";
|
|
4
|
+
import { parse } from "node-html-parser";
|
|
5
5
|
//#region src/services/movie.service.ts
|
|
6
6
|
var MovieScraper = class {
|
|
7
7
|
async movie(movieId, options) {
|
|
8
8
|
const id = Number(movieId);
|
|
9
9
|
if (isNaN(id)) throw new Error("node-csfd-api: movieId must be a valid number");
|
|
10
|
-
const movieHtml =
|
|
10
|
+
const movieHtml = parse(await fetchPage(movieUrl(id, { language: options?.language }), { ...options?.request }));
|
|
11
11
|
const pageClasses = movieHtml.querySelector(".page-content").classNames.split(" ");
|
|
12
12
|
const asideNode = movieHtml.querySelector(".aside-movie-profile");
|
|
13
13
|
const movieNode = movieHtml.querySelector(".main-movie-profile");
|
|
@@ -21,41 +21,41 @@ var MovieScraper = class {
|
|
|
21
21
|
return this.buildMovie(+movieId, movieNode, asideNode, pageClasses, jsonLd, options);
|
|
22
22
|
}
|
|
23
23
|
buildMovie(movieId, el, asideEl, pageClasses, jsonLd, options) {
|
|
24
|
-
const type =
|
|
25
|
-
const { seriesName = null, seasonName = null } = type === "season" ?
|
|
26
|
-
const seasonOrEpisodeListType =
|
|
24
|
+
const type = getMovieType(el);
|
|
25
|
+
const { seriesName = null, seasonName = null } = type === "season" ? getSeriesAndSeasonTitle(el) : {};
|
|
26
|
+
const seasonOrEpisodeListType = detectSeasonOrEpisodeListType(el);
|
|
27
27
|
return {
|
|
28
28
|
id: movieId,
|
|
29
|
-
title: type === "season" && seriesName ? seriesName :
|
|
30
|
-
year:
|
|
31
|
-
duration:
|
|
32
|
-
descriptions:
|
|
33
|
-
genres:
|
|
29
|
+
title: type === "season" && seriesName ? seriesName : getMovieTitle(el),
|
|
30
|
+
year: getMovieYear(jsonLd),
|
|
31
|
+
duration: getMovieDuration(jsonLd, el),
|
|
32
|
+
descriptions: getMovieDescriptions(el),
|
|
33
|
+
genres: getMovieGenres(el),
|
|
34
34
|
type,
|
|
35
|
-
url:
|
|
36
|
-
origins:
|
|
37
|
-
colorRating:
|
|
38
|
-
rating:
|
|
39
|
-
ratingCount:
|
|
40
|
-
titlesOther:
|
|
41
|
-
poster:
|
|
42
|
-
photo:
|
|
43
|
-
trivia:
|
|
44
|
-
creators:
|
|
45
|
-
vod:
|
|
46
|
-
tags:
|
|
47
|
-
premieres:
|
|
48
|
-
related:
|
|
49
|
-
similar:
|
|
50
|
-
seasons: seasonOrEpisodeListType === "seasons" ?
|
|
51
|
-
episodes: seasonOrEpisodeListType === "episodes" ?
|
|
52
|
-
parent: type === "season" || type === "episode" ?
|
|
53
|
-
episodeCode: type === "episode" ?
|
|
35
|
+
url: movieUrl(movieId, { language: options?.language }),
|
|
36
|
+
origins: getMovieOrigins(el),
|
|
37
|
+
colorRating: getMovieColorRating(pageClasses),
|
|
38
|
+
rating: getMovieRating(asideEl),
|
|
39
|
+
ratingCount: getMovieRatingCount(asideEl),
|
|
40
|
+
titlesOther: getMovieTitlesOther(el),
|
|
41
|
+
poster: getMoviePoster(el),
|
|
42
|
+
photo: getMovieRandomPhoto(el),
|
|
43
|
+
trivia: getMovieTrivia(el),
|
|
44
|
+
creators: getMovieCreators(el, options),
|
|
45
|
+
vod: getMovieVods(asideEl),
|
|
46
|
+
tags: getMovieTags(asideEl),
|
|
47
|
+
premieres: getMoviePremieres(asideEl),
|
|
48
|
+
related: getMovieBoxMovies(asideEl, "Související"),
|
|
49
|
+
similar: getMovieBoxMovies(asideEl, "Podobné"),
|
|
50
|
+
seasons: seasonOrEpisodeListType === "seasons" ? getSeasonsOrEpisodes(el) : null,
|
|
51
|
+
episodes: seasonOrEpisodeListType === "episodes" ? getSeasonsOrEpisodes(el) : null,
|
|
52
|
+
parent: type === "season" || type === "episode" ? getSeasonOrEpisodeParent(el) : null,
|
|
53
|
+
episodeCode: type === "episode" ? getEpisodeCode(el) : null,
|
|
54
54
|
seasonName
|
|
55
55
|
};
|
|
56
56
|
}
|
|
57
57
|
};
|
|
58
58
|
//#endregion
|
|
59
|
-
|
|
59
|
+
export { MovieScraper };
|
|
60
60
|
|
|
61
61
|
//# sourceMappingURL=movie.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"movie.service.js","names":[
|
|
1
|
+
{"version":3,"file":"movie.service.js","names":[],"sources":["../../src/services/movie.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovie, MovieJsonLd } from '../dto/movie';\nimport { fetchPage } from '../fetchers';\nimport {\n detectSeasonOrEpisodeListType,\n getEpisodeCode,\n getMovieBoxMovies,\n getMovieColorRating,\n getMovieCreators,\n getMovieDescriptions,\n getMovieDuration,\n getMovieGenres,\n getMovieOrigins,\n getMoviePoster,\n getMoviePremieres,\n getMovieRandomPhoto,\n getMovieRating,\n getMovieRatingCount,\n getMovieTags,\n getMovieTitle,\n getMovieTitlesOther,\n getMovieTrivia,\n getMovieType,\n getMovieVods,\n getMovieYear,\n getSeasonOrEpisodeParent,\n getSeasonsOrEpisodes,\n getSeriesAndSeasonTitle\n} from '../helpers/movie.helper';\nimport { CSFDOptions } from '../types';\nimport { 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 jsonLdString = movieHtml.querySelector('script[type=\"application/ld+json\"]').innerText;\n let jsonLd: MovieJsonLd | null = null;\n try {\n jsonLd = JSON.parse(jsonLdString);\n } catch (e) {\n console.error('node-csfd-api: Error parsing JSON-LD', e);\n }\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: MovieJsonLd | null,\n options: CSFDOptions\n ) {\n const type = getMovieType(el) as CSFDFilmTypes;\n const { seriesName = null, seasonName = null } =\n type === 'season' ? getSeriesAndSeasonTitle(el) : {};\n const seasonOrEpisodeListType = detectSeasonOrEpisodeListType(el);\n\n const title = type === 'season' && seriesName ? seriesName : getMovieTitle(el);\n return {\n id: movieId,\n title,\n year: getMovieYear(jsonLd),\n duration: getMovieDuration(jsonLd, el),\n descriptions: getMovieDescriptions(el),\n genres: getMovieGenres(el),\n type,\n url: movieUrl(movieId, { language: options?.language }),\n origins: getMovieOrigins(el),\n colorRating: getMovieColorRating(pageClasses),\n rating: getMovieRating(asideEl),\n ratingCount: getMovieRatingCount(asideEl),\n titlesOther: getMovieTitlesOther(el),\n poster: getMoviePoster(el),\n photo: getMovieRandomPhoto(el),\n trivia: getMovieTrivia(el),\n creators: getMovieCreators(el, options),\n vod: getMovieVods(asideEl),\n tags: getMovieTags(asideEl),\n premieres: getMoviePremieres(asideEl),\n related: getMovieBoxMovies(asideEl, 'Související'),\n similar: getMovieBoxMovies(asideEl, 'Podobné'),\n seasons: seasonOrEpisodeListType === 'seasons' ? getSeasonsOrEpisodes(el) : null,\n episodes: seasonOrEpisodeListType === 'episodes' ? getSeasonsOrEpisodes(el) : null,\n parent: type === 'season' || type === 'episode' ? getSeasonOrEpisodeParent(el) : null,\n episodeCode: type === 'episode' ? getEpisodeCode(el) : null,\n seasonName\n };\n }\n}\n"],"mappings":";;;;;AAiCA,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,eAAe,UAAU,cAAc,uCAAqC,CAAC;EACnF,IAAI,SAA6B;AACjC,MAAI;AACF,YAAS,KAAK,MAAM,aAAa;WAC1B,GAAG;AACV,WAAQ,MAAM,wCAAwC,EAAE;;AAE1D,SAAO,KAAK,WAAW,CAAC,SAAS,WAAW,WAAW,aAAa,QAAQ,QAAQ;;CAGtF,WACE,SACA,IACA,SACA,aACA,QACA,SACA;EACA,MAAM,OAAO,aAAa,GAAG;EAC7B,MAAM,EAAE,aAAa,MAAM,aAAa,SACtC,SAAS,WAAW,wBAAwB,GAAG,GAAG,EAAE;EACtD,MAAM,0BAA0B,8BAA8B,GAAG;AAGjE,SAAO;GACL,IAAI;GACJ,OAHY,SAAS,YAAY,aAAa,aAAa,cAAc,GAAG;GAI5E,MAAM,aAAa,OAAO;GAC1B,UAAU,iBAAiB,QAAQ,GAAG;GACtC,cAAc,qBAAqB,GAAG;GACtC,QAAQ,eAAe,GAAG;GAC1B;GACA,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,iBAAiB,IAAI,QAAQ;GACvC,KAAK,aAAa,QAAQ;GAC1B,MAAM,aAAa,QAAQ;GAC3B,WAAW,kBAAkB,QAAQ;GACrC,SAAS,kBAAkB,SAAS,cAAc;GAClD,SAAS,kBAAkB,SAAS,UAAU;GAC9C,SAAS,4BAA4B,YAAY,qBAAqB,GAAG,GAAG;GAC5E,UAAU,4BAA4B,aAAa,qBAAqB,GAAG,GAAG;GAC9E,QAAQ,SAAS,YAAY,SAAS,YAAY,yBAAyB,GAAG,GAAG;GACjF,aAAa,SAAS,YAAY,eAAe,GAAG,GAAG;GACvD;GACD"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
const require_index = require("../fetchers/index.cjs");
|
|
2
|
+
const require_vars = require("../vars.cjs");
|
|
3
|
+
const require_global_helper = require("../helpers/global.helper.cjs");
|
|
4
|
+
const require_search_creator_helper = require("../helpers/search-creator.helper.cjs");
|
|
5
|
+
const require_search_user_helper = require("../helpers/search-user.helper.cjs");
|
|
6
|
+
const require_search_helper = require("../helpers/search.helper.cjs");
|
|
7
|
+
let node_html_parser = require("node-html-parser");
|
|
8
|
+
//#region src/services/search.service.ts
|
|
9
|
+
var SearchScraper = class {
|
|
10
|
+
async search(text, options) {
|
|
11
|
+
const html = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.searchUrl(text, { language: options?.language }), { ...options?.request }));
|
|
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
|
+
const creatorsNode = html.querySelectorAll(".main-authors article");
|
|
16
|
+
return this.parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, options?.language);
|
|
17
|
+
}
|
|
18
|
+
parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, language) {
|
|
19
|
+
const baseUrl = require_vars.getUrlByLanguage(language);
|
|
20
|
+
const movies = [];
|
|
21
|
+
const users = [];
|
|
22
|
+
const tvSeries = [];
|
|
23
|
+
const creators = [];
|
|
24
|
+
const movieMapper = (m) => {
|
|
25
|
+
const url = require_search_helper.getSearchUrl(m);
|
|
26
|
+
return {
|
|
27
|
+
id: require_global_helper.parseIdFromUrl(url),
|
|
28
|
+
title: require_search_helper.getSearchTitle(m),
|
|
29
|
+
year: require_search_helper.getSearchYear(m),
|
|
30
|
+
url: `${baseUrl}${url}`,
|
|
31
|
+
type: require_search_helper.getSearchType(m),
|
|
32
|
+
colorRating: require_search_helper.getSearchColorRating(m),
|
|
33
|
+
poster: require_search_helper.getSearchPoster(m),
|
|
34
|
+
origins: require_search_helper.getSearchOrigins(m),
|
|
35
|
+
creators: {
|
|
36
|
+
directors: require_search_helper.parseSearchPeople(m, "directors"),
|
|
37
|
+
actors: require_search_helper.parseSearchPeople(m, "actors")
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
const userMapper = (m) => {
|
|
42
|
+
const url = require_search_user_helper.getUserUrl(m);
|
|
43
|
+
return {
|
|
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: `${baseUrl}${url}`
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
const creatorMapper = (m) => {
|
|
52
|
+
const url = require_search_creator_helper.getCreatorUrl(m);
|
|
53
|
+
return {
|
|
54
|
+
id: require_global_helper.parseIdFromUrl(url),
|
|
55
|
+
name: require_search_creator_helper.getCreatorName(m),
|
|
56
|
+
image: require_search_creator_helper.getCreatorImage(m),
|
|
57
|
+
url: `${baseUrl}${url}`
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
movies.push(...moviesNode.map(movieMapper));
|
|
61
|
+
users.push(...usersNode.map(userMapper));
|
|
62
|
+
tvSeries.push(...tvSeriesNode.map(movieMapper));
|
|
63
|
+
creators.push(...creatorsNode.map(creatorMapper));
|
|
64
|
+
return {
|
|
65
|
+
movies,
|
|
66
|
+
users,
|
|
67
|
+
tvSeries,
|
|
68
|
+
creators
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
//#endregion
|
|
73
|
+
exports.SearchScraper = SearchScraper;
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=search.service.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.service.cjs","names":["fetchPage","searchUrl","getUrlByLanguage","getSearchUrl","parseIdFromUrl","getSearchTitle","getSearchYear","getSearchType","getSearchColorRating","getSearchPoster","getSearchOrigins","parseSearchPeople","getUserUrl","getUser","getUserRealName","getAvatar","getCreatorUrl","getCreatorName","getCreatorImage"],"sources":["../../src/services/search.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDSearch, CSFDSearchCreator, CSFDSearchMovie, CSFDSearchUser } from '../dto/search';\nimport { fetchPage } from '../fetchers';\nimport { parseIdFromUrl } from '../helpers/global.helper';\nimport { getCreatorImage, getCreatorName, getCreatorUrl } from '../helpers/search-creator.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 const creatorsNode = html.querySelectorAll('.main-authors article');\n\n return this.parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, options?.language);\n }\n\n private parseSearch(\n moviesNode: HTMLElement[],\n usersNode: HTMLElement[],\n tvSeriesNode: HTMLElement[],\n creatorsNode: HTMLElement[],\n language?: CSFDLanguage\n ) {\n const baseUrl = getUrlByLanguage(language);\n\n const movies: CSFDSearchMovie[] = [];\n const users: CSFDSearchUser[] = [];\n const tvSeries: CSFDSearchMovie[] = [];\n const creators: CSFDSearchCreator[] = [];\n\n const movieMapper = (m: HTMLElement): CSFDSearchMovie => {\n const url = getSearchUrl(m);\n return {\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 };\n\n const userMapper = (m: HTMLElement): CSFDSearchUser => {\n const url = getUserUrl(m);\n return {\n id: parseIdFromUrl(url),\n user: getUser(m),\n userRealName: getUserRealName(m),\n avatar: getAvatar(m),\n url: `${baseUrl}${url}`\n };\n };\n\n const creatorMapper = (m: HTMLElement): CSFDSearchCreator => {\n const url = getCreatorUrl(m);\n return {\n id: parseIdFromUrl(url),\n name: getCreatorName(m),\n image: getCreatorImage(m),\n url: `${baseUrl}${url}`\n };\n };\n\n movies.push(...moviesNode.map(movieMapper));\n users.push(...usersNode.map(userMapper));\n tvSeries.push(...tvSeriesNode.map(movieMapper));\n creators.push(...creatorsNode.map(creatorMapper));\n\n const search: CSFDSearch = {\n movies,\n users,\n tvSeries,\n creators\n };\n return search;\n }\n}\n"],"mappings":";;;;;;;;AAmBA,IAAa,gBAAb,MAA2B;CACzB,MAAa,OAAO,MAAc,SAA4C;EAI5E,MAAM,QAAA,GAAA,iBAAA,OAFW,MAAMA,cAAAA,UADXC,aAAAA,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;EAClE,MAAM,eAAe,KAAK,iBAAiB,wBAAwB;AAEnE,SAAO,KAAK,YAAY,YAAY,WAAW,cAAc,cAAc,SAAS,SAAS;;CAG/F,YACE,YACA,WACA,cACA,cACA,UACA;EACA,MAAM,UAAUC,aAAAA,iBAAiB,SAAS;EAE1C,MAAM,SAA4B,EAAE;EACpC,MAAM,QAA0B,EAAE;EAClC,MAAM,WAA8B,EAAE;EACtC,MAAM,WAAgC,EAAE;EAExC,MAAM,eAAe,MAAoC;GACvD,MAAM,MAAMC,sBAAAA,aAAa,EAAE;AAC3B,UAAO;IACL,IAAIC,sBAAAA,eAAe,IAAI;IACvB,OAAOC,sBAAAA,eAAe,EAAE;IACxB,MAAMC,sBAAAA,cAAc,EAAE;IACtB,KAAK,GAAG,UAAU;IAClB,MAAMC,sBAAAA,cAAc,EAAE;IACtB,aAAaC,sBAAAA,qBAAqB,EAAE;IACpC,QAAQC,sBAAAA,gBAAgB,EAAE;IAC1B,SAASC,sBAAAA,iBAAiB,EAAE;IAC5B,UAAU;KACR,WAAWC,sBAAAA,kBAAkB,GAAG,YAAY;KAC5C,QAAQA,sBAAAA,kBAAkB,GAAG,SAAS;KACvC;IACF;;EAGH,MAAM,cAAc,MAAmC;GACrD,MAAM,MAAMC,2BAAAA,WAAW,EAAE;AACzB,UAAO;IACL,IAAIR,sBAAAA,eAAe,IAAI;IACvB,MAAMS,2BAAAA,QAAQ,EAAE;IAChB,cAAcC,2BAAAA,gBAAgB,EAAE;IAChC,QAAQC,2BAAAA,UAAU,EAAE;IACpB,KAAK,GAAG,UAAU;IACnB;;EAGH,MAAM,iBAAiB,MAAsC;GAC3D,MAAM,MAAMC,8BAAAA,cAAc,EAAE;AAC5B,UAAO;IACL,IAAIZ,sBAAAA,eAAe,IAAI;IACvB,MAAMa,8BAAAA,eAAe,EAAE;IACvB,OAAOC,8BAAAA,gBAAgB,EAAE;IACzB,KAAK,GAAG,UAAU;IACnB;;AAGH,SAAO,KAAK,GAAG,WAAW,IAAI,YAAY,CAAC;AAC3C,QAAM,KAAK,GAAG,UAAU,IAAI,WAAW,CAAC;AACxC,WAAS,KAAK,GAAG,aAAa,IAAI,YAAY,CAAC;AAC/C,WAAS,KAAK,GAAG,aAAa,IAAI,cAAc,CAAC;AAQjD,SAN2B;GACzB;GACA;GACA;GACA;GACD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CSFDSearch } from "../dto/search.
|
|
2
|
-
import { CSFDOptions } from "../dto/options.
|
|
1
|
+
import { CSFDSearch } from "../dto/search.cjs";
|
|
2
|
+
import { CSFDOptions } from "../dto/options.cjs";
|
|
3
3
|
|
|
4
4
|
//#region src/services/search.service.d.ts
|
|
5
5
|
declare class SearchScraper {
|
|
@@ -8,4 +8,4 @@ declare class SearchScraper {
|
|
|
8
8
|
}
|
|
9
9
|
//#endregion
|
|
10
10
|
export { SearchScraper };
|
|
11
|
-
//# sourceMappingURL=search.service.d.
|
|
11
|
+
//# sourceMappingURL=search.service.d.cts.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { fetchPage } from "../fetchers/index.js";
|
|
2
|
+
import { getUrlByLanguage, searchUrl } from "../vars.js";
|
|
3
|
+
import { parseIdFromUrl } from "../helpers/global.helper.js";
|
|
4
|
+
import { getCreatorImage, getCreatorName, getCreatorUrl } from "../helpers/search-creator.helper.js";
|
|
5
|
+
import { getAvatar, getUser, getUserRealName, getUserUrl } from "../helpers/search-user.helper.js";
|
|
6
|
+
import { getSearchColorRating, getSearchOrigins, getSearchPoster, getSearchTitle, getSearchType, getSearchUrl, getSearchYear, parseSearchPeople } from "../helpers/search.helper.js";
|
|
7
|
+
import { parse } from "node-html-parser";
|
|
8
8
|
//#region src/services/search.service.ts
|
|
9
9
|
var SearchScraper = class {
|
|
10
10
|
async search(text, options) {
|
|
11
|
-
const html =
|
|
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");
|
|
@@ -16,44 +16,44 @@ var SearchScraper = class {
|
|
|
16
16
|
return this.parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, options?.language);
|
|
17
17
|
}
|
|
18
18
|
parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, language) {
|
|
19
|
-
const baseUrl =
|
|
19
|
+
const baseUrl = getUrlByLanguage(language);
|
|
20
20
|
const movies = [];
|
|
21
21
|
const users = [];
|
|
22
22
|
const tvSeries = [];
|
|
23
23
|
const creators = [];
|
|
24
24
|
const movieMapper = (m) => {
|
|
25
|
-
const url =
|
|
25
|
+
const url = getSearchUrl(m);
|
|
26
26
|
return {
|
|
27
|
-
id:
|
|
28
|
-
title:
|
|
29
|
-
year:
|
|
27
|
+
id: parseIdFromUrl(url),
|
|
28
|
+
title: getSearchTitle(m),
|
|
29
|
+
year: getSearchYear(m),
|
|
30
30
|
url: `${baseUrl}${url}`,
|
|
31
|
-
type:
|
|
32
|
-
colorRating:
|
|
33
|
-
poster:
|
|
34
|
-
origins:
|
|
31
|
+
type: getSearchType(m),
|
|
32
|
+
colorRating: getSearchColorRating(m),
|
|
33
|
+
poster: getSearchPoster(m),
|
|
34
|
+
origins: getSearchOrigins(m),
|
|
35
35
|
creators: {
|
|
36
|
-
directors:
|
|
37
|
-
actors:
|
|
36
|
+
directors: parseSearchPeople(m, "directors"),
|
|
37
|
+
actors: parseSearchPeople(m, "actors")
|
|
38
38
|
}
|
|
39
39
|
};
|
|
40
40
|
};
|
|
41
41
|
const userMapper = (m) => {
|
|
42
|
-
const url =
|
|
42
|
+
const url = getUserUrl(m);
|
|
43
43
|
return {
|
|
44
|
-
id:
|
|
45
|
-
user:
|
|
46
|
-
userRealName:
|
|
47
|
-
avatar:
|
|
44
|
+
id: parseIdFromUrl(url),
|
|
45
|
+
user: getUser(m),
|
|
46
|
+
userRealName: getUserRealName(m),
|
|
47
|
+
avatar: getAvatar(m),
|
|
48
48
|
url: `${baseUrl}${url}`
|
|
49
49
|
};
|
|
50
50
|
};
|
|
51
51
|
const creatorMapper = (m) => {
|
|
52
|
-
const url =
|
|
52
|
+
const url = getCreatorUrl(m);
|
|
53
53
|
return {
|
|
54
|
-
id:
|
|
55
|
-
name:
|
|
56
|
-
image:
|
|
54
|
+
id: parseIdFromUrl(url),
|
|
55
|
+
name: getCreatorName(m),
|
|
56
|
+
image: getCreatorImage(m),
|
|
57
57
|
url: `${baseUrl}${url}`
|
|
58
58
|
};
|
|
59
59
|
};
|
|
@@ -70,6 +70,6 @@ var SearchScraper = class {
|
|
|
70
70
|
}
|
|
71
71
|
};
|
|
72
72
|
//#endregion
|
|
73
|
-
|
|
73
|
+
export { SearchScraper };
|
|
74
74
|
|
|
75
75
|
//# sourceMappingURL=search.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.service.js","names":[
|
|
1
|
+
{"version":3,"file":"search.service.js","names":[],"sources":["../../src/services/search.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDSearch, CSFDSearchCreator, CSFDSearchMovie, CSFDSearchUser } from '../dto/search';\nimport { fetchPage } from '../fetchers';\nimport { parseIdFromUrl } from '../helpers/global.helper';\nimport { getCreatorImage, getCreatorName, getCreatorUrl } from '../helpers/search-creator.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 const creatorsNode = html.querySelectorAll('.main-authors article');\n\n return this.parseSearch(moviesNode, usersNode, tvSeriesNode, creatorsNode, options?.language);\n }\n\n private parseSearch(\n moviesNode: HTMLElement[],\n usersNode: HTMLElement[],\n tvSeriesNode: HTMLElement[],\n creatorsNode: HTMLElement[],\n language?: CSFDLanguage\n ) {\n const baseUrl = getUrlByLanguage(language);\n\n const movies: CSFDSearchMovie[] = [];\n const users: CSFDSearchUser[] = [];\n const tvSeries: CSFDSearchMovie[] = [];\n const creators: CSFDSearchCreator[] = [];\n\n const movieMapper = (m: HTMLElement): CSFDSearchMovie => {\n const url = getSearchUrl(m);\n return {\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 };\n\n const userMapper = (m: HTMLElement): CSFDSearchUser => {\n const url = getUserUrl(m);\n return {\n id: parseIdFromUrl(url),\n user: getUser(m),\n userRealName: getUserRealName(m),\n avatar: getAvatar(m),\n url: `${baseUrl}${url}`\n };\n };\n\n const creatorMapper = (m: HTMLElement): CSFDSearchCreator => {\n const url = getCreatorUrl(m);\n return {\n id: parseIdFromUrl(url),\n name: getCreatorName(m),\n image: getCreatorImage(m),\n url: `${baseUrl}${url}`\n };\n };\n\n movies.push(...moviesNode.map(movieMapper));\n users.push(...usersNode.map(userMapper));\n tvSeries.push(...tvSeriesNode.map(movieMapper));\n creators.push(...creatorsNode.map(creatorMapper));\n\n const search: CSFDSearch = {\n movies,\n users,\n tvSeries,\n creators\n };\n return search;\n }\n}\n"],"mappings":";;;;;;;;AAmBA,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;EAClE,MAAM,eAAe,KAAK,iBAAiB,wBAAwB;AAEnE,SAAO,KAAK,YAAY,YAAY,WAAW,cAAc,cAAc,SAAS,SAAS;;CAG/F,YACE,YACA,WACA,cACA,cACA,UACA;EACA,MAAM,UAAU,iBAAiB,SAAS;EAE1C,MAAM,SAA4B,EAAE;EACpC,MAAM,QAA0B,EAAE;EAClC,MAAM,WAA8B,EAAE;EACtC,MAAM,WAAgC,EAAE;EAExC,MAAM,eAAe,MAAoC;GACvD,MAAM,MAAM,aAAa,EAAE;AAC3B,UAAO;IACL,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;;EAGH,MAAM,cAAc,MAAmC;GACrD,MAAM,MAAM,WAAW,EAAE;AACzB,UAAO;IACL,IAAI,eAAe,IAAI;IACvB,MAAM,QAAQ,EAAE;IAChB,cAAc,gBAAgB,EAAE;IAChC,QAAQ,UAAU,EAAE;IACpB,KAAK,GAAG,UAAU;IACnB;;EAGH,MAAM,iBAAiB,MAAsC;GAC3D,MAAM,MAAM,cAAc,EAAE;AAC5B,UAAO;IACL,IAAI,eAAe,IAAI;IACvB,MAAM,eAAe,EAAE;IACvB,OAAO,gBAAgB,EAAE;IACzB,KAAK,GAAG,UAAU;IACnB;;AAGH,SAAO,KAAK,GAAG,WAAW,IAAI,YAAY,CAAC;AAC3C,QAAM,KAAK,GAAG,UAAU,IAAI,WAAW,CAAC;AACxC,WAAS,KAAK,GAAG,aAAa,IAAI,YAAY,CAAC;AAC/C,WAAS,KAAK,GAAG,aAAa,IAAI,cAAc,CAAC;AAQjD,SAN2B;GACzB;GACA;GACA;GACA;GACD"}
|