node-csfd-api 3.1.0-next.1 → 3.1.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/fetchers/index.js +12 -4
- package/fetchers/index.js.map +1 -1
- package/fetchers/index.mjs +12 -4
- package/fetchers/index.mjs.map +1 -1
- package/index.d.mts +12 -6
- package/index.d.ts +12 -6
- package/index.js +20 -11
- package/index.js.map +1 -1
- package/index.mjs +20 -11
- package/index.mjs.map +1 -1
- package/package.json +1 -1
- package/services/cinema.service.d.mts +1 -1
- package/services/cinema.service.d.ts +1 -1
- package/services/cinema.service.js +2 -2
- package/services/cinema.service.js.map +1 -1
- package/services/cinema.service.mjs +2 -2
- package/services/cinema.service.mjs.map +1 -1
- package/services/creator.service.d.mts +1 -1
- package/services/creator.service.d.ts +1 -1
- package/services/creator.service.js +2 -2
- package/services/creator.service.js.map +1 -1
- package/services/creator.service.mjs +2 -2
- package/services/creator.service.mjs.map +1 -1
- package/services/movie.service.d.mts +1 -1
- package/services/movie.service.d.ts +1 -1
- package/services/movie.service.js +2 -2
- package/services/movie.service.js.map +1 -1
- package/services/movie.service.mjs +2 -2
- package/services/movie.service.mjs.map +1 -1
- package/services/search.service.d.mts +1 -1
- package/services/search.service.d.ts +1 -1
- package/services/search.service.js +2 -2
- package/services/search.service.js.map +1 -1
- package/services/search.service.mjs +2 -2
- package/services/search.service.mjs.map +1 -1
- package/services/user-ratings.service.d.mts +1 -1
- package/services/user-ratings.service.d.ts +1 -1
- package/services/user-ratings.service.js +3 -3
- package/services/user-ratings.service.js.map +1 -1
- package/services/user-ratings.service.mjs +3 -3
- package/services/user-ratings.service.mjs.map +1 -1
package/fetchers/index.js
CHANGED
|
@@ -7,14 +7,22 @@ const USER_AGENTS = [
|
|
|
7
7
|
"Mozilla/5.0 (Linux; Android 10; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Mobile Safari/537.36",
|
|
8
8
|
"Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Mobile Safari/537.36"
|
|
9
9
|
];
|
|
10
|
-
const
|
|
11
|
-
const fetchPage = async (url) => {
|
|
10
|
+
const defaultHeaders = { "User-Agent": USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)] };
|
|
11
|
+
const fetchPage = async (url, optionsRequest) => {
|
|
12
12
|
try {
|
|
13
|
-
const
|
|
13
|
+
const mergedHeaders = new Headers(defaultHeaders);
|
|
14
|
+
if (optionsRequest?.headers) new Headers(optionsRequest.headers).forEach((value, key) => mergedHeaders.set(key, value));
|
|
15
|
+
const { headers: _,...restOptions } = optionsRequest || {};
|
|
16
|
+
const response = await require_fetch_polyfill.fetchSafe(url, {
|
|
17
|
+
credentials: "omit",
|
|
18
|
+
...restOptions,
|
|
19
|
+
headers: mergedHeaders
|
|
20
|
+
});
|
|
14
21
|
if (response.status >= 400 && response.status < 600) throw new Error(`node-csfd-api: Bad response ${response.status} for url: ${url}`);
|
|
15
22
|
return await response.text();
|
|
16
23
|
} catch (e) {
|
|
17
|
-
console.error(e);
|
|
24
|
+
if (e instanceof Error) console.error(e.message);
|
|
25
|
+
else console.error(String(e));
|
|
18
26
|
return "Error";
|
|
19
27
|
}
|
|
20
28
|
};
|
package/fetchers/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["fetchSafe"],"sources":["../../src/fetchers/index.ts"],"sourcesContent":["import { fetchSafe } from './fetch.polyfill';\n\nconst USER_AGENTS = [\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/87.0.4280.77 Mobile/15E148 Safari/604.1',\n 'Mozilla/5.0 (Linux; Android 10; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Mobile Safari/537.36',\n 'Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Mobile Safari/537.36'\n];\n\nconst
|
|
1
|
+
{"version":3,"file":"index.js","names":["USER_AGENTS: string[]","fetchSafe","e: unknown"],"sources":["../../src/fetchers/index.ts"],"sourcesContent":["import { fetchSafe } from './fetch.polyfill';\n\nconst USER_AGENTS: string[] = [\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/87.0.4280.77 Mobile/15E148 Safari/604.1',\n 'Mozilla/5.0 (Linux; Android 10; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Mobile Safari/537.36',\n 'Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Mobile Safari/537.36'\n];\n\nconst defaultHeaders = {\n 'User-Agent': USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)],\n};\n\nexport const fetchPage = async (url: string, optionsRequest?: RequestInit): Promise<string> => {\n try {\n const mergedHeaders = new Headers(defaultHeaders);\n if (optionsRequest?.headers) {\n const reqHeaders = new Headers(optionsRequest.headers);\n reqHeaders.forEach((value, key) => mergedHeaders.set(key, value));\n }\n const { headers: _, ...restOptions } = optionsRequest || {};\n\n const response = await fetchSafe(url, { credentials: 'omit', ...restOptions, headers: mergedHeaders });\n if (response.status >= 400 && response.status < 600) {\n throw new Error(`node-csfd-api: Bad response ${response.status} for url: ${url}`);\n }\n return await response.text();\n } catch (e: unknown) {\n if (e instanceof Error) {\n console.error(e.message);\n } else {\n console.error(String(e));\n }\n return 'Error';\n }\n};\n"],"mappings":";;;AAEA,MAAMA,cAAwB;CAC5B;CACA;CACA;CACA;CACD;AAED,MAAM,iBAAiB,EACrB,cAAc,YAAY,KAAK,MAAM,KAAK,QAAQ,GAAG,YAAY,OAAO,GACzE;AAED,MAAa,YAAY,OAAO,KAAa,mBAAkD;AAC7F,KAAI;EACF,MAAM,gBAAgB,IAAI,QAAQ,eAAe;AACjD,MAAI,gBAAgB,QAElB,CADmB,IAAI,QAAQ,eAAe,QAAQ,CAC3C,SAAS,OAAO,QAAQ,cAAc,IAAI,KAAK,MAAM,CAAC;EAEnE,MAAM,EAAE,SAAS,EAAG,GAAG,gBAAgB,kBAAkB,EAAE;EAE3D,MAAM,WAAW,MAAMC,iCAAU,KAAK;GAAE,aAAa;GAAQ,GAAG;GAAa,SAAS;GAAe,CAAC;AACtG,MAAI,SAAS,UAAU,OAAO,SAAS,SAAS,IAC9C,OAAM,IAAI,MAAM,+BAA+B,SAAS,OAAO,YAAY,MAAM;AAEnF,SAAO,MAAM,SAAS,MAAM;UACrBC,GAAY;AACnB,MAAI,aAAa,MACf,SAAQ,MAAM,EAAE,QAAQ;MAExB,SAAQ,MAAM,OAAO,EAAE,CAAC;AAE1B,SAAO"}
|
package/fetchers/index.mjs
CHANGED
|
@@ -7,14 +7,22 @@ const USER_AGENTS = [
|
|
|
7
7
|
"Mozilla/5.0 (Linux; Android 10; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Mobile Safari/537.36",
|
|
8
8
|
"Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Mobile Safari/537.36"
|
|
9
9
|
];
|
|
10
|
-
const
|
|
11
|
-
const fetchPage = async (url) => {
|
|
10
|
+
const defaultHeaders = { "User-Agent": USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)] };
|
|
11
|
+
const fetchPage = async (url, optionsRequest) => {
|
|
12
12
|
try {
|
|
13
|
-
const
|
|
13
|
+
const mergedHeaders = new Headers(defaultHeaders);
|
|
14
|
+
if (optionsRequest?.headers) new Headers(optionsRequest.headers).forEach((value, key) => mergedHeaders.set(key, value));
|
|
15
|
+
const { headers: _,...restOptions } = optionsRequest || {};
|
|
16
|
+
const response = await fetchSafe(url, {
|
|
17
|
+
credentials: "omit",
|
|
18
|
+
...restOptions,
|
|
19
|
+
headers: mergedHeaders
|
|
20
|
+
});
|
|
14
21
|
if (response.status >= 400 && response.status < 600) throw new Error(`node-csfd-api: Bad response ${response.status} for url: ${url}`);
|
|
15
22
|
return await response.text();
|
|
16
23
|
} catch (e) {
|
|
17
|
-
console.error(e);
|
|
24
|
+
if (e instanceof Error) console.error(e.message);
|
|
25
|
+
else console.error(String(e));
|
|
18
26
|
return "Error";
|
|
19
27
|
}
|
|
20
28
|
};
|
package/fetchers/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/fetchers/index.ts"],"sourcesContent":["import { fetchSafe } from './fetch.polyfill';\n\nconst USER_AGENTS = [\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/87.0.4280.77 Mobile/15E148 Safari/604.1',\n 'Mozilla/5.0 (Linux; Android 10; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Mobile Safari/537.36',\n 'Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Mobile Safari/537.36'\n];\n\nconst
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["USER_AGENTS: string[]","e: unknown"],"sources":["../../src/fetchers/index.ts"],"sourcesContent":["import { fetchSafe } from './fetch.polyfill';\n\nconst USER_AGENTS: string[] = [\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/87.0.4280.77 Mobile/15E148 Safari/604.1',\n 'Mozilla/5.0 (Linux; Android 10; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Mobile Safari/537.36',\n 'Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Mobile Safari/537.36'\n];\n\nconst defaultHeaders = {\n 'User-Agent': USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)],\n};\n\nexport const fetchPage = async (url: string, optionsRequest?: RequestInit): Promise<string> => {\n try {\n const mergedHeaders = new Headers(defaultHeaders);\n if (optionsRequest?.headers) {\n const reqHeaders = new Headers(optionsRequest.headers);\n reqHeaders.forEach((value, key) => mergedHeaders.set(key, value));\n }\n const { headers: _, ...restOptions } = optionsRequest || {};\n\n const response = await fetchSafe(url, { credentials: 'omit', ...restOptions, headers: mergedHeaders });\n if (response.status >= 400 && response.status < 600) {\n throw new Error(`node-csfd-api: Bad response ${response.status} for url: ${url}`);\n }\n return await response.text();\n } catch (e: unknown) {\n if (e instanceof Error) {\n console.error(e.message);\n } else {\n console.error(String(e));\n }\n return 'Error';\n }\n};\n"],"mappings":";;;AAEA,MAAMA,cAAwB;CAC5B;CACA;CACA;CACA;CACD;AAED,MAAM,iBAAiB,EACrB,cAAc,YAAY,KAAK,MAAM,KAAK,QAAQ,GAAG,YAAY,OAAO,GACzE;AAED,MAAa,YAAY,OAAO,KAAa,mBAAkD;AAC7F,KAAI;EACF,MAAM,gBAAgB,IAAI,QAAQ,eAAe;AACjD,MAAI,gBAAgB,QAElB,CADmB,IAAI,QAAQ,eAAe,QAAQ,CAC3C,SAAS,OAAO,QAAQ,cAAc,IAAI,KAAK,MAAM,CAAC;EAEnE,MAAM,EAAE,SAAS,EAAG,GAAG,gBAAgB,kBAAkB,EAAE;EAE3D,MAAM,WAAW,MAAM,UAAU,KAAK;GAAE,aAAa;GAAQ,GAAG;GAAa,SAAS;GAAe,CAAC;AACtG,MAAI,SAAS,UAAU,OAAO,SAAS,SAAS,IAC9C,OAAM,IAAI,MAAM,+BAA+B,SAAS,OAAO,YAAY,MAAM;AAEnF,SAAO,MAAM,SAAS,MAAM;UACrBC,GAAY;AACnB,MAAI,aAAa,MACf,SAAQ,MAAM,EAAE,QAAQ;MAExB,SAAQ,MAAM,OAAO,EAAE,CAAC;AAE1B,SAAO"}
|
package/index.d.mts
CHANGED
|
@@ -17,12 +17,18 @@ declare class Csfd {
|
|
|
17
17
|
private creatorService;
|
|
18
18
|
private searchService;
|
|
19
19
|
private cinemaService;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
private defaultOptionsRequest?;
|
|
21
|
+
constructor(userRatingsService: UserRatingsScraper, movieService: MovieScraper, creatorService: CreatorScraper, searchService: SearchScraper, cinemaService: CinemaScraper, defaultOptionsRequest?: RequestInit);
|
|
22
|
+
setOptions({
|
|
23
|
+
optionsRequest
|
|
24
|
+
}: {
|
|
25
|
+
optionsRequest: RequestInit;
|
|
26
|
+
}): void;
|
|
27
|
+
userRatings(user: string | number, config?: CSFDUserRatingConfig, optionsRequest?: RequestInit): Promise<CSFDUserRatings[]>;
|
|
28
|
+
movie(movie: number, optionsRequest?: RequestInit): Promise<CSFDMovie>;
|
|
29
|
+
creator(creator: number, optionsRequest?: RequestInit): Promise<CSFDCreator>;
|
|
30
|
+
search(text: string, optionsRequest?: RequestInit): Promise<CSFDSearch>;
|
|
31
|
+
cinema(district: number | string, period: CSFDCinemaPeriod, optionsRequest?: RequestInit): Promise<CSFDCinema[]>;
|
|
26
32
|
}
|
|
27
33
|
declare const csfd: Csfd;
|
|
28
34
|
//#endregion
|
package/index.d.ts
CHANGED
|
@@ -17,12 +17,18 @@ declare class Csfd {
|
|
|
17
17
|
private creatorService;
|
|
18
18
|
private searchService;
|
|
19
19
|
private cinemaService;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
private defaultOptionsRequest?;
|
|
21
|
+
constructor(userRatingsService: UserRatingsScraper, movieService: MovieScraper, creatorService: CreatorScraper, searchService: SearchScraper, cinemaService: CinemaScraper, defaultOptionsRequest?: RequestInit);
|
|
22
|
+
setOptions({
|
|
23
|
+
optionsRequest
|
|
24
|
+
}: {
|
|
25
|
+
optionsRequest: RequestInit;
|
|
26
|
+
}): void;
|
|
27
|
+
userRatings(user: string | number, config?: CSFDUserRatingConfig, optionsRequest?: RequestInit): Promise<CSFDUserRatings[]>;
|
|
28
|
+
movie(movie: number, optionsRequest?: RequestInit): Promise<CSFDMovie>;
|
|
29
|
+
creator(creator: number, optionsRequest?: RequestInit): Promise<CSFDCreator>;
|
|
30
|
+
search(text: string, optionsRequest?: RequestInit): Promise<CSFDSearch>;
|
|
31
|
+
cinema(district: number | string, period: CSFDCinemaPeriod, optionsRequest?: RequestInit): Promise<CSFDCinema[]>;
|
|
26
32
|
}
|
|
27
33
|
declare const csfd: Csfd;
|
|
28
34
|
//#endregion
|
package/index.js
CHANGED
|
@@ -6,27 +6,36 @@ const require_user_ratings_service = require('./services/user-ratings.service.js
|
|
|
6
6
|
|
|
7
7
|
//#region src/index.ts
|
|
8
8
|
var Csfd = class {
|
|
9
|
-
constructor(userRatingsService, movieService, creatorService, searchService, cinemaService) {
|
|
9
|
+
constructor(userRatingsService, movieService, creatorService, searchService, cinemaService, defaultOptionsRequest) {
|
|
10
10
|
this.userRatingsService = userRatingsService;
|
|
11
11
|
this.movieService = movieService;
|
|
12
12
|
this.creatorService = creatorService;
|
|
13
13
|
this.searchService = searchService;
|
|
14
14
|
this.cinemaService = cinemaService;
|
|
15
|
+
this.defaultOptionsRequest = defaultOptionsRequest;
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
setOptions({ optionsRequest }) {
|
|
18
|
+
this.defaultOptionsRequest = optionsRequest;
|
|
18
19
|
}
|
|
19
|
-
async
|
|
20
|
-
|
|
20
|
+
async userRatings(user, config, optionsRequest) {
|
|
21
|
+
const opts = optionsRequest ?? this.defaultOptionsRequest;
|
|
22
|
+
return this.userRatingsService.userRatings(user, config, opts);
|
|
21
23
|
}
|
|
22
|
-
async
|
|
23
|
-
|
|
24
|
+
async movie(movie, optionsRequest) {
|
|
25
|
+
const opts = optionsRequest ?? this.defaultOptionsRequest;
|
|
26
|
+
return this.movieService.movie(+movie, opts);
|
|
24
27
|
}
|
|
25
|
-
async
|
|
26
|
-
|
|
28
|
+
async creator(creator, optionsRequest) {
|
|
29
|
+
const opts = optionsRequest ?? this.defaultOptionsRequest;
|
|
30
|
+
return this.creatorService.creator(+creator, opts);
|
|
27
31
|
}
|
|
28
|
-
async
|
|
29
|
-
|
|
32
|
+
async search(text, optionsRequest) {
|
|
33
|
+
const opts = optionsRequest ?? this.defaultOptionsRequest;
|
|
34
|
+
return this.searchService.search(text, opts);
|
|
35
|
+
}
|
|
36
|
+
async cinema(district, period, optionsRequest) {
|
|
37
|
+
const opts = optionsRequest ?? this.defaultOptionsRequest;
|
|
38
|
+
return this.cinemaService.cinemas(+district, period, opts);
|
|
30
39
|
}
|
|
31
40
|
};
|
|
32
41
|
const movieScraper = new require_movie_service.MovieScraper();
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["userRatingsService: UserRatingsScraper","movieService: MovieScraper","creatorService: CreatorScraper","searchService: SearchScraper","cinemaService: CinemaScraper","MovieScraper","UserRatingsScraper","CinemaScraper","CreatorScraper","SearchScraper"],"sources":["../src/index.ts"],"sourcesContent":["import { CSFDCinema, CSFDCinemaPeriod } from './dto/cinema';\nimport { CSFDCreator } from './dto/creator';\nimport { CSFDMovie } from './dto/movie';\nimport { CSFDSearch } from './dto/search';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from './dto/user-ratings';\nimport { CinemaScraper } from './services/cinema.service';\nimport { CreatorScraper } from './services/creator.service';\nimport { MovieScraper } from './services/movie.service';\nimport { SearchScraper } from './services/search.service';\nimport { UserRatingsScraper } from './services/user-ratings.service';\n\nexport class Csfd {\n constructor(\n private userRatingsService: UserRatingsScraper,\n private movieService: MovieScraper,\n private creatorService: CreatorScraper,\n private searchService: SearchScraper,\n private cinemaService: CinemaScraper\n ) { }\n\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig\n ): Promise<CSFDUserRatings[]> {\n return this.userRatingsService.userRatings(user, config);\n }\n\n public async movie(movie: number): Promise<CSFDMovie> {\n return this.movieService.movie(+movie);\n }\n\n public async creator(creator: number): Promise<CSFDCreator> {\n return this.creatorService.creator(+creator);\n }\n\n public async search(text: string): Promise<CSFDSearch> {\n return this.searchService.search(text);\n }\n\n public async cinema(district: number | string, period: CSFDCinemaPeriod): Promise<CSFDCinema[]> {\n return this.cinemaService.cinemas(+district, period);\n }\n}\n\nconst movieScraper = new MovieScraper();\nconst userRatingsScraper = new UserRatingsScraper();\nconst cinemaScraper = new CinemaScraper();\nconst creatorScraper = new CreatorScraper();\nconst searchScraper = new SearchScraper();\n\nexport const csfd = new Csfd(\n userRatingsScraper,\n movieScraper,\n creatorScraper,\n searchScraper,\n cinemaScraper\n);\nexport type * from './dto';\n"],"mappings":";;;;;;;AAWA,IAAa,OAAb,MAAkB;
|
|
1
|
+
{"version":3,"file":"index.js","names":["userRatingsService: UserRatingsScraper","movieService: MovieScraper","creatorService: CreatorScraper","searchService: SearchScraper","cinemaService: CinemaScraper","MovieScraper","UserRatingsScraper","CinemaScraper","CreatorScraper","SearchScraper"],"sources":["../src/index.ts"],"sourcesContent":["import { CSFDCinema, CSFDCinemaPeriod } from './dto/cinema';\nimport { CSFDCreator } from './dto/creator';\nimport { CSFDMovie } from './dto/movie';\nimport { CSFDSearch } from './dto/search';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from './dto/user-ratings';\nimport { CinemaScraper } from './services/cinema.service';\nimport { CreatorScraper } from './services/creator.service';\nimport { MovieScraper } from './services/movie.service';\nimport { SearchScraper } from './services/search.service';\nimport { UserRatingsScraper } from './services/user-ratings.service';\n\nexport class Csfd {\n private defaultOptionsRequest?: RequestInit;\n\n constructor(\n private userRatingsService: UserRatingsScraper,\n private movieService: MovieScraper,\n private creatorService: CreatorScraper,\n private searchService: SearchScraper,\n private cinemaService: CinemaScraper,\n defaultOptionsRequest?: RequestInit\n ) {\n this.defaultOptionsRequest = defaultOptionsRequest;\n }\n\n public setOptions({ optionsRequest }: { optionsRequest: RequestInit }): void {\n this.defaultOptionsRequest = optionsRequest;\n }\n\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig,\n optionsRequest?: RequestInit\n ): Promise<CSFDUserRatings[]> {\n const opts = optionsRequest ?? this.defaultOptionsRequest;\n return this.userRatingsService.userRatings(user, config, opts);\n }\n\n public async movie(movie: number, optionsRequest?: RequestInit): Promise<CSFDMovie> {\n const opts = optionsRequest ?? this.defaultOptionsRequest;\n return this.movieService.movie(+movie, opts);\n }\n\n public async creator(creator: number, optionsRequest?: RequestInit): Promise<CSFDCreator> {\n const opts = optionsRequest ?? this.defaultOptionsRequest;\n return this.creatorService.creator(+creator, opts);\n }\n\n public async search(text: string, optionsRequest?: RequestInit): Promise<CSFDSearch> {\n const opts = optionsRequest ?? this.defaultOptionsRequest;\n return this.searchService.search(text, opts);\n }\n\n public async cinema(district: number | string, period: CSFDCinemaPeriod, optionsRequest?: RequestInit): Promise<CSFDCinema[]> {\n const opts = optionsRequest ?? this.defaultOptionsRequest;\n return this.cinemaService.cinemas(+district, period, opts);\n }\n}\n\nconst movieScraper = new MovieScraper();\nconst userRatingsScraper = new UserRatingsScraper();\nconst cinemaScraper = new CinemaScraper();\nconst creatorScraper = new CreatorScraper();\nconst searchScraper = new SearchScraper();\n\nexport const csfd = new Csfd(\n userRatingsScraper,\n movieScraper,\n creatorScraper,\n searchScraper,\n cinemaScraper\n);\nexport type * from './dto';\n"],"mappings":";;;;;;;AAWA,IAAa,OAAb,MAAkB;CAGhB,YACE,AAAQA,oBACR,AAAQC,cACR,AAAQC,gBACR,AAAQC,eACR,AAAQC,eACR,uBACA;EANQ;EACA;EACA;EACA;EACA;AAGR,OAAK,wBAAwB;;CAG/B,AAAO,WAAW,EAAE,kBAAyD;AAC3E,OAAK,wBAAwB;;CAG/B,MAAa,YACX,MACA,QACA,gBAC4B;EAC5B,MAAM,OAAO,kBAAkB,KAAK;AACpC,SAAO,KAAK,mBAAmB,YAAY,MAAM,QAAQ,KAAK;;CAGhE,MAAa,MAAM,OAAe,gBAAkD;EAClF,MAAM,OAAO,kBAAkB,KAAK;AACpC,SAAO,KAAK,aAAa,MAAM,CAAC,OAAO,KAAK;;CAG9C,MAAa,QAAQ,SAAiB,gBAAoD;EACxF,MAAM,OAAO,kBAAkB,KAAK;AACpC,SAAO,KAAK,eAAe,QAAQ,CAAC,SAAS,KAAK;;CAGpD,MAAa,OAAO,MAAc,gBAAmD;EACnF,MAAM,OAAO,kBAAkB,KAAK;AACpC,SAAO,KAAK,cAAc,OAAO,MAAM,KAAK;;CAG9C,MAAa,OAAO,UAA2B,QAA0B,gBAAqD;EAC5H,MAAM,OAAO,kBAAkB,KAAK;AACpC,SAAO,KAAK,cAAc,QAAQ,CAAC,UAAU,QAAQ,KAAK;;;AAI9D,MAAM,eAAe,IAAIC,oCAAc;AACvC,MAAM,qBAAqB,IAAIC,iDAAoB;AACnD,MAAM,gBAAgB,IAAIC,sCAAe;AACzC,MAAM,iBAAiB,IAAIC,wCAAgB;AAC3C,MAAM,gBAAgB,IAAIC,sCAAe;AAEzC,MAAa,OAAO,IAAI,KACtB,oBACA,cACA,gBACA,eACA,cACD"}
|
package/index.mjs
CHANGED
|
@@ -6,27 +6,36 @@ import { UserRatingsScraper } from "./services/user-ratings.service.mjs";
|
|
|
6
6
|
|
|
7
7
|
//#region src/index.ts
|
|
8
8
|
var Csfd = class {
|
|
9
|
-
constructor(userRatingsService, movieService, creatorService, searchService, cinemaService) {
|
|
9
|
+
constructor(userRatingsService, movieService, creatorService, searchService, cinemaService, defaultOptionsRequest) {
|
|
10
10
|
this.userRatingsService = userRatingsService;
|
|
11
11
|
this.movieService = movieService;
|
|
12
12
|
this.creatorService = creatorService;
|
|
13
13
|
this.searchService = searchService;
|
|
14
14
|
this.cinemaService = cinemaService;
|
|
15
|
+
this.defaultOptionsRequest = defaultOptionsRequest;
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
setOptions({ optionsRequest }) {
|
|
18
|
+
this.defaultOptionsRequest = optionsRequest;
|
|
18
19
|
}
|
|
19
|
-
async
|
|
20
|
-
|
|
20
|
+
async userRatings(user, config, optionsRequest) {
|
|
21
|
+
const opts = optionsRequest ?? this.defaultOptionsRequest;
|
|
22
|
+
return this.userRatingsService.userRatings(user, config, opts);
|
|
21
23
|
}
|
|
22
|
-
async
|
|
23
|
-
|
|
24
|
+
async movie(movie, optionsRequest) {
|
|
25
|
+
const opts = optionsRequest ?? this.defaultOptionsRequest;
|
|
26
|
+
return this.movieService.movie(+movie, opts);
|
|
24
27
|
}
|
|
25
|
-
async
|
|
26
|
-
|
|
28
|
+
async creator(creator, optionsRequest) {
|
|
29
|
+
const opts = optionsRequest ?? this.defaultOptionsRequest;
|
|
30
|
+
return this.creatorService.creator(+creator, opts);
|
|
27
31
|
}
|
|
28
|
-
async
|
|
29
|
-
|
|
32
|
+
async search(text, optionsRequest) {
|
|
33
|
+
const opts = optionsRequest ?? this.defaultOptionsRequest;
|
|
34
|
+
return this.searchService.search(text, opts);
|
|
35
|
+
}
|
|
36
|
+
async cinema(district, period, optionsRequest) {
|
|
37
|
+
const opts = optionsRequest ?? this.defaultOptionsRequest;
|
|
38
|
+
return this.cinemaService.cinemas(+district, period, opts);
|
|
30
39
|
}
|
|
31
40
|
};
|
|
32
41
|
const movieScraper = new MovieScraper();
|
package/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["userRatingsService: UserRatingsScraper","movieService: MovieScraper","creatorService: CreatorScraper","searchService: SearchScraper","cinemaService: CinemaScraper"],"sources":["../src/index.ts"],"sourcesContent":["import { CSFDCinema, CSFDCinemaPeriod } from './dto/cinema';\nimport { CSFDCreator } from './dto/creator';\nimport { CSFDMovie } from './dto/movie';\nimport { CSFDSearch } from './dto/search';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from './dto/user-ratings';\nimport { CinemaScraper } from './services/cinema.service';\nimport { CreatorScraper } from './services/creator.service';\nimport { MovieScraper } from './services/movie.service';\nimport { SearchScraper } from './services/search.service';\nimport { UserRatingsScraper } from './services/user-ratings.service';\n\nexport class Csfd {\n constructor(\n private userRatingsService: UserRatingsScraper,\n private movieService: MovieScraper,\n private creatorService: CreatorScraper,\n private searchService: SearchScraper,\n private cinemaService: CinemaScraper\n ) { }\n\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig\n ): Promise<CSFDUserRatings[]> {\n return this.userRatingsService.userRatings(user, config);\n }\n\n public async movie(movie: number): Promise<CSFDMovie> {\n return this.movieService.movie(+movie);\n }\n\n public async creator(creator: number): Promise<CSFDCreator> {\n return this.creatorService.creator(+creator);\n }\n\n public async search(text: string): Promise<CSFDSearch> {\n return this.searchService.search(text);\n }\n\n public async cinema(district: number | string, period: CSFDCinemaPeriod): Promise<CSFDCinema[]> {\n return this.cinemaService.cinemas(+district, period);\n }\n}\n\nconst movieScraper = new MovieScraper();\nconst userRatingsScraper = new UserRatingsScraper();\nconst cinemaScraper = new CinemaScraper();\nconst creatorScraper = new CreatorScraper();\nconst searchScraper = new SearchScraper();\n\nexport const csfd = new Csfd(\n userRatingsScraper,\n movieScraper,\n creatorScraper,\n searchScraper,\n cinemaScraper\n);\nexport type * from './dto';\n"],"mappings":";;;;;;;AAWA,IAAa,OAAb,MAAkB;
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["userRatingsService: UserRatingsScraper","movieService: MovieScraper","creatorService: CreatorScraper","searchService: SearchScraper","cinemaService: CinemaScraper"],"sources":["../src/index.ts"],"sourcesContent":["import { CSFDCinema, CSFDCinemaPeriod } from './dto/cinema';\nimport { CSFDCreator } from './dto/creator';\nimport { CSFDMovie } from './dto/movie';\nimport { CSFDSearch } from './dto/search';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from './dto/user-ratings';\nimport { CinemaScraper } from './services/cinema.service';\nimport { CreatorScraper } from './services/creator.service';\nimport { MovieScraper } from './services/movie.service';\nimport { SearchScraper } from './services/search.service';\nimport { UserRatingsScraper } from './services/user-ratings.service';\n\nexport class Csfd {\n private defaultOptionsRequest?: RequestInit;\n\n constructor(\n private userRatingsService: UserRatingsScraper,\n private movieService: MovieScraper,\n private creatorService: CreatorScraper,\n private searchService: SearchScraper,\n private cinemaService: CinemaScraper,\n defaultOptionsRequest?: RequestInit\n ) {\n this.defaultOptionsRequest = defaultOptionsRequest;\n }\n\n public setOptions({ optionsRequest }: { optionsRequest: RequestInit }): void {\n this.defaultOptionsRequest = optionsRequest;\n }\n\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig,\n optionsRequest?: RequestInit\n ): Promise<CSFDUserRatings[]> {\n const opts = optionsRequest ?? this.defaultOptionsRequest;\n return this.userRatingsService.userRatings(user, config, opts);\n }\n\n public async movie(movie: number, optionsRequest?: RequestInit): Promise<CSFDMovie> {\n const opts = optionsRequest ?? this.defaultOptionsRequest;\n return this.movieService.movie(+movie, opts);\n }\n\n public async creator(creator: number, optionsRequest?: RequestInit): Promise<CSFDCreator> {\n const opts = optionsRequest ?? this.defaultOptionsRequest;\n return this.creatorService.creator(+creator, opts);\n }\n\n public async search(text: string, optionsRequest?: RequestInit): Promise<CSFDSearch> {\n const opts = optionsRequest ?? this.defaultOptionsRequest;\n return this.searchService.search(text, opts);\n }\n\n public async cinema(district: number | string, period: CSFDCinemaPeriod, optionsRequest?: RequestInit): Promise<CSFDCinema[]> {\n const opts = optionsRequest ?? this.defaultOptionsRequest;\n return this.cinemaService.cinemas(+district, period, opts);\n }\n}\n\nconst movieScraper = new MovieScraper();\nconst userRatingsScraper = new UserRatingsScraper();\nconst cinemaScraper = new CinemaScraper();\nconst creatorScraper = new CreatorScraper();\nconst searchScraper = new SearchScraper();\n\nexport const csfd = new Csfd(\n userRatingsScraper,\n movieScraper,\n creatorScraper,\n searchScraper,\n cinemaScraper\n);\nexport type * from './dto';\n"],"mappings":";;;;;;;AAWA,IAAa,OAAb,MAAkB;CAGhB,YACE,AAAQA,oBACR,AAAQC,cACR,AAAQC,gBACR,AAAQC,eACR,AAAQC,eACR,uBACA;EANQ;EACA;EACA;EACA;EACA;AAGR,OAAK,wBAAwB;;CAG/B,AAAO,WAAW,EAAE,kBAAyD;AAC3E,OAAK,wBAAwB;;CAG/B,MAAa,YACX,MACA,QACA,gBAC4B;EAC5B,MAAM,OAAO,kBAAkB,KAAK;AACpC,SAAO,KAAK,mBAAmB,YAAY,MAAM,QAAQ,KAAK;;CAGhE,MAAa,MAAM,OAAe,gBAAkD;EAClF,MAAM,OAAO,kBAAkB,KAAK;AACpC,SAAO,KAAK,aAAa,MAAM,CAAC,OAAO,KAAK;;CAG9C,MAAa,QAAQ,SAAiB,gBAAoD;EACxF,MAAM,OAAO,kBAAkB,KAAK;AACpC,SAAO,KAAK,eAAe,QAAQ,CAAC,SAAS,KAAK;;CAGpD,MAAa,OAAO,MAAc,gBAAmD;EACnF,MAAM,OAAO,kBAAkB,KAAK;AACpC,SAAO,KAAK,cAAc,OAAO,MAAM,KAAK;;CAG9C,MAAa,OAAO,UAA2B,QAA0B,gBAAqD;EAC5H,MAAM,OAAO,kBAAkB,KAAK;AACpC,SAAO,KAAK,cAAc,QAAQ,CAAC,UAAU,QAAQ,KAAK;;;AAI9D,MAAM,eAAe,IAAI,cAAc;AACvC,MAAM,qBAAqB,IAAI,oBAAoB;AACnD,MAAM,gBAAgB,IAAI,eAAe;AACzC,MAAM,iBAAiB,IAAI,gBAAgB;AAC3C,MAAM,gBAAgB,IAAI,eAAe;AAEzC,MAAa,OAAO,IAAI,KACtB,oBACA,cACA,gBACA,eACA,cACD"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@ import { CSFDCinema, CSFDCinemaPeriod } from "../dto/cinema.mjs";
|
|
|
3
3
|
//#region src/services/cinema.service.d.ts
|
|
4
4
|
declare class CinemaScraper {
|
|
5
5
|
private cinema;
|
|
6
|
-
cinemas(district?: number, period?: CSFDCinemaPeriod): Promise<CSFDCinema[]>;
|
|
6
|
+
cinemas(district?: number, period?: CSFDCinemaPeriod, optionsRequest?: RequestInit): Promise<CSFDCinema[]>;
|
|
7
7
|
private buildCinemas;
|
|
8
8
|
}
|
|
9
9
|
//#endregion
|
|
@@ -3,7 +3,7 @@ import { CSFDCinema, CSFDCinemaPeriod } from "../dto/cinema.js";
|
|
|
3
3
|
//#region src/services/cinema.service.d.ts
|
|
4
4
|
declare class CinemaScraper {
|
|
5
5
|
private cinema;
|
|
6
|
-
cinemas(district?: number, period?: CSFDCinemaPeriod): Promise<CSFDCinema[]>;
|
|
6
|
+
cinemas(district?: number, period?: CSFDCinemaPeriod, optionsRequest?: RequestInit): Promise<CSFDCinema[]>;
|
|
7
7
|
private buildCinemas;
|
|
8
8
|
}
|
|
9
9
|
//#endregion
|
|
@@ -7,8 +7,8 @@ node_html_parser = require_rolldown_runtime.__toESM(node_html_parser);
|
|
|
7
7
|
|
|
8
8
|
//#region src/services/cinema.service.ts
|
|
9
9
|
var CinemaScraper = class {
|
|
10
|
-
async cinemas(district = 1, period = "today") {
|
|
11
|
-
const contentNode = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.cinemasUrl(district, period))).querySelectorAll("#snippet--cinemas section.box");
|
|
10
|
+
async cinemas(district = 1, period = "today", optionsRequest) {
|
|
11
|
+
const contentNode = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.cinemasUrl(district, period), { ...optionsRequest })).querySelectorAll("#snippet--cinemas section.box");
|
|
12
12
|
this.buildCinemas(contentNode);
|
|
13
13
|
return this.cinema;
|
|
14
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cinema.service.js","names":["fetchPage","cinemasUrl","cinemas: CSFDCinema[]","parseCinema","cinema: CSFDCinema","getCinemaId","getCinemaUrl","getCinemaCoords","getGroupedFilmsByDate"],"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 { cinemasUrl } from '../vars';\nimport {\n getCinemaCoords,\n getCinemaId,\n getCinemaUrl,\n getGroupedFilmsByDate,\n parseCinema\n} from './../helpers/cinema.helper';\n\nexport class CinemaScraper {\n private cinema: CSFDCinema[];\n\n public async cinemas(\n district: number = 1,\n period: CSFDCinemaPeriod = 'today'\n ): Promise<CSFDCinema[]> {\n const url = cinemasUrl(district, period);\n const response = await fetchPage(url);\n\n const cinemasHtml = parse(response);\n\n const contentNode = cinemasHtml.querySelectorAll('#snippet--cinemas section.box');\n\n this.buildCinemas(contentNode);\n return this.cinema;\n }\n\n private buildCinemas(contentNode: HTMLElement[]) {\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 this.cinema = cinemas;\n }\n}\n"],"mappings":";;;;;;;;AAYA,IAAa,gBAAb,MAA2B;CAGzB,MAAa,QACX,WAAmB,GACnB,SAA2B,
|
|
1
|
+
{"version":3,"file":"cinema.service.js","names":["fetchPage","cinemasUrl","cinemas: CSFDCinema[]","parseCinema","cinema: CSFDCinema","getCinemaId","getCinemaUrl","getCinemaCoords","getGroupedFilmsByDate"],"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 { cinemasUrl } from '../vars';\nimport {\n getCinemaCoords,\n getCinemaId,\n getCinemaUrl,\n getGroupedFilmsByDate,\n parseCinema\n} from './../helpers/cinema.helper';\n\nexport class CinemaScraper {\n private cinema: CSFDCinema[];\n\n public async cinemas(\n district: number = 1,\n period: CSFDCinemaPeriod = 'today',\n optionsRequest?: RequestInit\n ): Promise<CSFDCinema[]> {\n const url = cinemasUrl(district, period);\n const response = await fetchPage(url, { ...optionsRequest });\n\n const cinemasHtml = parse(response);\n\n const contentNode = cinemasHtml.querySelectorAll('#snippet--cinemas section.box');\n\n this.buildCinemas(contentNode);\n return this.cinema;\n }\n\n private buildCinemas(contentNode: HTMLElement[]) {\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 this.cinema = cinemas;\n }\n}\n"],"mappings":";;;;;;;;AAYA,IAAa,gBAAb,MAA2B;CAGzB,MAAa,QACX,WAAmB,GACnB,SAA2B,SAC3B,gBACuB;EAMvB,MAAM,0CAJW,MAAMA,wBADXC,wBAAW,UAAU,OAAO,EACF,EAAE,GAAG,gBAAgB,CAAC,CAEzB,CAEH,iBAAiB,gCAAgC;AAEjF,OAAK,aAAa,YAAY;AAC9B,SAAO,KAAK;;CAGd,AAAQ,aAAa,aAA4B;EAC/C,MAAMC,UAAwB,EAAE;AAEhC,cAAY,SAAS,MAAM;GACzB,MAAM,aAAaC,kCAAY,EAAE;GACjC,MAAMC,SAAqB;IACzB,IAAIC,kCAAY,EAAE;IAClB,MAAM,YAAY;IAClB,MAAM,YAAY;IAClB,KAAKC,mCAAa,EAAE;IACpB,QAAQC,sCAAgB,EAAE;IAC1B,YAAYC,4CAAsB,EAAE;IACrC;AACD,WAAQ,KAAK,OAAO;IACpB;AAEF,OAAK,SAAS"}
|
|
@@ -5,8 +5,8 @@ import { parse } from "node-html-parser";
|
|
|
5
5
|
|
|
6
6
|
//#region src/services/cinema.service.ts
|
|
7
7
|
var CinemaScraper = class {
|
|
8
|
-
async cinemas(district = 1, period = "today") {
|
|
9
|
-
const contentNode = parse(await fetchPage(cinemasUrl(district, period))).querySelectorAll("#snippet--cinemas section.box");
|
|
8
|
+
async cinemas(district = 1, period = "today", optionsRequest) {
|
|
9
|
+
const contentNode = parse(await fetchPage(cinemasUrl(district, period), { ...optionsRequest })).querySelectorAll("#snippet--cinemas section.box");
|
|
10
10
|
this.buildCinemas(contentNode);
|
|
11
11
|
return this.cinema;
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cinema.service.mjs","names":["cinemas: CSFDCinema[]","cinema: CSFDCinema"],"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 { cinemasUrl } from '../vars';\nimport {\n getCinemaCoords,\n getCinemaId,\n getCinemaUrl,\n getGroupedFilmsByDate,\n parseCinema\n} from './../helpers/cinema.helper';\n\nexport class CinemaScraper {\n private cinema: CSFDCinema[];\n\n public async cinemas(\n district: number = 1,\n period: CSFDCinemaPeriod = 'today'\n ): Promise<CSFDCinema[]> {\n const url = cinemasUrl(district, period);\n const response = await fetchPage(url);\n\n const cinemasHtml = parse(response);\n\n const contentNode = cinemasHtml.querySelectorAll('#snippet--cinemas section.box');\n\n this.buildCinemas(contentNode);\n return this.cinema;\n }\n\n private buildCinemas(contentNode: HTMLElement[]) {\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 this.cinema = cinemas;\n }\n}\n"],"mappings":";;;;;;AAYA,IAAa,gBAAb,MAA2B;CAGzB,MAAa,QACX,WAAmB,GACnB,SAA2B,
|
|
1
|
+
{"version":3,"file":"cinema.service.mjs","names":["cinemas: CSFDCinema[]","cinema: CSFDCinema"],"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 { cinemasUrl } from '../vars';\nimport {\n getCinemaCoords,\n getCinemaId,\n getCinemaUrl,\n getGroupedFilmsByDate,\n parseCinema\n} from './../helpers/cinema.helper';\n\nexport class CinemaScraper {\n private cinema: CSFDCinema[];\n\n public async cinemas(\n district: number = 1,\n period: CSFDCinemaPeriod = 'today',\n optionsRequest?: RequestInit\n ): Promise<CSFDCinema[]> {\n const url = cinemasUrl(district, period);\n const response = await fetchPage(url, { ...optionsRequest });\n\n const cinemasHtml = parse(response);\n\n const contentNode = cinemasHtml.querySelectorAll('#snippet--cinemas section.box');\n\n this.buildCinemas(contentNode);\n return this.cinema;\n }\n\n private buildCinemas(contentNode: HTMLElement[]) {\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 this.cinema = cinemas;\n }\n}\n"],"mappings":";;;;;;AAYA,IAAa,gBAAb,MAA2B;CAGzB,MAAa,QACX,WAAmB,GACnB,SAA2B,SAC3B,gBACuB;EAMvB,MAAM,cAFc,MAFH,MAAM,UADX,WAAW,UAAU,OAAO,EACF,EAAE,GAAG,gBAAgB,CAAC,CAEzB,CAEH,iBAAiB,gCAAgC;AAEjF,OAAK,aAAa,YAAY;AAC9B,SAAO,KAAK;;CAGd,AAAQ,aAAa,aAA4B;EAC/C,MAAMA,UAAwB,EAAE;AAEhC,cAAY,SAAS,MAAM;GACzB,MAAM,aAAa,YAAY,EAAE;GACjC,MAAMC,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,OAAK,SAAS"}
|
|
@@ -3,7 +3,7 @@ import { CSFDCreator } from "../dto/creator.mjs";
|
|
|
3
3
|
//#region src/services/creator.service.d.ts
|
|
4
4
|
declare class CreatorScraper {
|
|
5
5
|
private person;
|
|
6
|
-
creator(creatorId: number): Promise<CSFDCreator>;
|
|
6
|
+
creator(creatorId: number, optionsRequest?: RequestInit): Promise<CSFDCreator>;
|
|
7
7
|
private buildCreator;
|
|
8
8
|
}
|
|
9
9
|
//#endregion
|
|
@@ -3,7 +3,7 @@ import { CSFDCreator } from "../dto/creator.js";
|
|
|
3
3
|
//#region src/services/creator.service.d.ts
|
|
4
4
|
declare class CreatorScraper {
|
|
5
5
|
private person;
|
|
6
|
-
creator(creatorId: number): Promise<CSFDCreator>;
|
|
6
|
+
creator(creatorId: number, optionsRequest?: RequestInit): Promise<CSFDCreator>;
|
|
7
7
|
private buildCreator;
|
|
8
8
|
}
|
|
9
9
|
//#endregion
|
|
@@ -7,10 +7,10 @@ node_html_parser = require_rolldown_runtime.__toESM(node_html_parser);
|
|
|
7
7
|
|
|
8
8
|
//#region src/services/creator.service.ts
|
|
9
9
|
var CreatorScraper = class {
|
|
10
|
-
async creator(creatorId) {
|
|
10
|
+
async creator(creatorId, optionsRequest) {
|
|
11
11
|
const id = Number(creatorId);
|
|
12
12
|
if (isNaN(id)) throw new Error("node-csfd-api: creatorId must be a valid number");
|
|
13
|
-
const creatorHtml = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.creatorUrl(id)));
|
|
13
|
+
const creatorHtml = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.creatorUrl(id), { ...optionsRequest }));
|
|
14
14
|
const asideNode = creatorHtml.querySelector(".creator-about");
|
|
15
15
|
const filmsNode = creatorHtml.querySelector(".creator-filmography");
|
|
16
16
|
this.buildCreator(+creatorId, asideNode, filmsNode);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"creator.service.js","names":["fetchPage","creatorUrl","getCreatorName","getCreatorBirthdayInfo","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 { getCreatorBio, getCreatorBirthdayInfo, getCreatorFilms, getCreatorName, getCreatorPhoto } from '../helpers/creator.helper';\nimport { creatorUrl } from '../vars';\n\nexport class CreatorScraper {\n private person: CSFDCreator;\n\n public async creator(creatorId: number): 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);\n const response = await fetchPage(url);\n\n const creatorHtml = parse(response);\n\n const asideNode = creatorHtml.querySelector('.creator-about');\n const filmsNode = creatorHtml.querySelector('.creator-filmography');\n this.buildCreator(+creatorId, asideNode, filmsNode);\n return this.person;\n }\n\n private buildCreator(id: number, asideEl: HTMLElement, filmsNode: HTMLElement) {\n this.person = {\n id,\n name: getCreatorName(asideEl),\n birthday: getCreatorBirthdayInfo(asideEl)?.birthday,\n birthplace: getCreatorBirthdayInfo(asideEl)?.birthPlace,\n photo: getCreatorPhoto(asideEl),\n age: getCreatorBirthdayInfo(asideEl)?.age || null,\n bio: getCreatorBio(asideEl),\n films: getCreatorFilms(filmsNode)\n };\n }\n}\n"],"mappings":";;;;;;;;AAMA,IAAa,iBAAb,MAA4B;CAG1B,MAAa,QAAQ,
|
|
1
|
+
{"version":3,"file":"creator.service.js","names":["fetchPage","creatorUrl","getCreatorName","getCreatorBirthdayInfo","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 { getCreatorBio, getCreatorBirthdayInfo, getCreatorFilms, getCreatorName, getCreatorPhoto } from '../helpers/creator.helper';\nimport { creatorUrl } from '../vars';\n\nexport class CreatorScraper {\n private person: CSFDCreator;\n\n public async creator(creatorId: number, optionsRequest?: RequestInit): 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);\n const response = await fetchPage(url, { ...optionsRequest });\n\n const creatorHtml = parse(response);\n\n const asideNode = creatorHtml.querySelector('.creator-about');\n const filmsNode = creatorHtml.querySelector('.creator-filmography');\n this.buildCreator(+creatorId, asideNode, filmsNode);\n return this.person;\n }\n\n private buildCreator(id: number, asideEl: HTMLElement, filmsNode: HTMLElement) {\n this.person = {\n id,\n name: getCreatorName(asideEl),\n birthday: getCreatorBirthdayInfo(asideEl)?.birthday,\n birthplace: getCreatorBirthdayInfo(asideEl)?.birthPlace,\n photo: getCreatorPhoto(asideEl),\n age: getCreatorBirthdayInfo(asideEl)?.age || null,\n bio: getCreatorBio(asideEl),\n films: getCreatorFilms(filmsNode)\n };\n }\n}\n"],"mappings":";;;;;;;;AAMA,IAAa,iBAAb,MAA4B;CAG1B,MAAa,QAAQ,WAAmB,gBAAoD;EAC1F,MAAM,KAAK,OAAO,UAAU;AAC5B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,kDAAkD;EAKpE,MAAM,0CAFW,MAAMA,wBADXC,wBAAW,GAAG,EACY,EAAE,GAAG,gBAAgB,CAAC,CAEzB;EAEnC,MAAM,YAAY,YAAY,cAAc,iBAAiB;EAC7D,MAAM,YAAY,YAAY,cAAc,uBAAuB;AACnE,OAAK,aAAa,CAAC,WAAW,WAAW,UAAU;AACnD,SAAO,KAAK;;CAGd,AAAQ,aAAa,IAAY,SAAsB,WAAwB;AAC7E,OAAK,SAAS;GACZ;GACA,MAAMC,sCAAe,QAAQ;GAC7B,UAAUC,8CAAuB,QAAQ,EAAE;GAC3C,YAAYA,8CAAuB,QAAQ,EAAE;GAC7C,OAAOC,uCAAgB,QAAQ;GAC/B,KAAKD,8CAAuB,QAAQ,EAAE,OAAO;GAC7C,KAAKE,qCAAc,QAAQ;GAC3B,OAAOC,uCAAgB,UAAU;GAClC"}
|
|
@@ -5,10 +5,10 @@ import { parse } from "node-html-parser";
|
|
|
5
5
|
|
|
6
6
|
//#region src/services/creator.service.ts
|
|
7
7
|
var CreatorScraper = class {
|
|
8
|
-
async creator(creatorId) {
|
|
8
|
+
async creator(creatorId, optionsRequest) {
|
|
9
9
|
const id = Number(creatorId);
|
|
10
10
|
if (isNaN(id)) throw new Error("node-csfd-api: creatorId must be a valid number");
|
|
11
|
-
const creatorHtml = parse(await fetchPage(creatorUrl(id)));
|
|
11
|
+
const creatorHtml = parse(await fetchPage(creatorUrl(id), { ...optionsRequest }));
|
|
12
12
|
const asideNode = creatorHtml.querySelector(".creator-about");
|
|
13
13
|
const filmsNode = creatorHtml.querySelector(".creator-filmography");
|
|
14
14
|
this.buildCreator(+creatorId, asideNode, filmsNode);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"creator.service.mjs","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 { getCreatorBio, getCreatorBirthdayInfo, getCreatorFilms, getCreatorName, getCreatorPhoto } from '../helpers/creator.helper';\nimport { creatorUrl } from '../vars';\n\nexport class CreatorScraper {\n private person: CSFDCreator;\n\n public async creator(creatorId: number): 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);\n const response = await fetchPage(url);\n\n const creatorHtml = parse(response);\n\n const asideNode = creatorHtml.querySelector('.creator-about');\n const filmsNode = creatorHtml.querySelector('.creator-filmography');\n this.buildCreator(+creatorId, asideNode, filmsNode);\n return this.person;\n }\n\n private buildCreator(id: number, asideEl: HTMLElement, filmsNode: HTMLElement) {\n this.person = {\n id,\n name: getCreatorName(asideEl),\n birthday: getCreatorBirthdayInfo(asideEl)?.birthday,\n birthplace: getCreatorBirthdayInfo(asideEl)?.birthPlace,\n photo: getCreatorPhoto(asideEl),\n age: getCreatorBirthdayInfo(asideEl)?.age || null,\n bio: getCreatorBio(asideEl),\n films: getCreatorFilms(filmsNode)\n };\n }\n}\n"],"mappings":";;;;;;AAMA,IAAa,iBAAb,MAA4B;CAG1B,MAAa,QAAQ,
|
|
1
|
+
{"version":3,"file":"creator.service.mjs","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 { getCreatorBio, getCreatorBirthdayInfo, getCreatorFilms, getCreatorName, getCreatorPhoto } from '../helpers/creator.helper';\nimport { creatorUrl } from '../vars';\n\nexport class CreatorScraper {\n private person: CSFDCreator;\n\n public async creator(creatorId: number, optionsRequest?: RequestInit): 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);\n const response = await fetchPage(url, { ...optionsRequest });\n\n const creatorHtml = parse(response);\n\n const asideNode = creatorHtml.querySelector('.creator-about');\n const filmsNode = creatorHtml.querySelector('.creator-filmography');\n this.buildCreator(+creatorId, asideNode, filmsNode);\n return this.person;\n }\n\n private buildCreator(id: number, asideEl: HTMLElement, filmsNode: HTMLElement) {\n this.person = {\n id,\n name: getCreatorName(asideEl),\n birthday: getCreatorBirthdayInfo(asideEl)?.birthday,\n birthplace: getCreatorBirthdayInfo(asideEl)?.birthPlace,\n photo: getCreatorPhoto(asideEl),\n age: getCreatorBirthdayInfo(asideEl)?.age || null,\n bio: getCreatorBio(asideEl),\n films: getCreatorFilms(filmsNode)\n };\n }\n}\n"],"mappings":";;;;;;AAMA,IAAa,iBAAb,MAA4B;CAG1B,MAAa,QAAQ,WAAmB,gBAAoD;EAC1F,MAAM,KAAK,OAAO,UAAU;AAC5B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,kDAAkD;EAKpE,MAAM,cAAc,MAFH,MAAM,UADX,WAAW,GAAG,EACY,EAAE,GAAG,gBAAgB,CAAC,CAEzB;EAEnC,MAAM,YAAY,YAAY,cAAc,iBAAiB;EAC7D,MAAM,YAAY,YAAY,cAAc,uBAAuB;AACnE,OAAK,aAAa,CAAC,WAAW,WAAW,UAAU;AACnD,SAAO,KAAK;;CAGd,AAAQ,aAAa,IAAY,SAAsB,WAAwB;AAC7E,OAAK,SAAS;GACZ;GACA,MAAM,eAAe,QAAQ;GAC7B,UAAU,uBAAuB,QAAQ,EAAE;GAC3C,YAAY,uBAAuB,QAAQ,EAAE;GAC7C,OAAO,gBAAgB,QAAQ;GAC/B,KAAK,uBAAuB,QAAQ,EAAE,OAAO;GAC7C,KAAK,cAAc,QAAQ;GAC3B,OAAO,gBAAgB,UAAU;GAClC"}
|
|
@@ -3,7 +3,7 @@ import { CSFDMovie } from "../dto/movie.mjs";
|
|
|
3
3
|
//#region src/services/movie.service.d.ts
|
|
4
4
|
declare class MovieScraper {
|
|
5
5
|
private film;
|
|
6
|
-
movie(movieId: number): Promise<CSFDMovie>;
|
|
6
|
+
movie(movieId: number, optionsRequest?: RequestInit): Promise<CSFDMovie>;
|
|
7
7
|
private buildMovie;
|
|
8
8
|
}
|
|
9
9
|
//#endregion
|
|
@@ -3,7 +3,7 @@ import { CSFDMovie } from "../dto/movie.js";
|
|
|
3
3
|
//#region src/services/movie.service.d.ts
|
|
4
4
|
declare class MovieScraper {
|
|
5
5
|
private film;
|
|
6
|
-
movie(movieId: number): Promise<CSFDMovie>;
|
|
6
|
+
movie(movieId: number, optionsRequest?: RequestInit): Promise<CSFDMovie>;
|
|
7
7
|
private buildMovie;
|
|
8
8
|
}
|
|
9
9
|
//#endregion
|
|
@@ -7,10 +7,10 @@ node_html_parser = require_rolldown_runtime.__toESM(node_html_parser);
|
|
|
7
7
|
|
|
8
8
|
//#region src/services/movie.service.ts
|
|
9
9
|
var MovieScraper = class {
|
|
10
|
-
async movie(movieId) {
|
|
10
|
+
async movie(movieId, optionsRequest) {
|
|
11
11
|
const id = Number(movieId);
|
|
12
12
|
if (isNaN(id)) throw new Error("node-csfd-api: movieId must be a valid number");
|
|
13
|
-
const movieHtml = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.movieUrl(id)));
|
|
13
|
+
const movieHtml = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.movieUrl(id), { ...optionsRequest }));
|
|
14
14
|
const pageClasses = movieHtml.querySelector(".page-content").classNames.split(" ");
|
|
15
15
|
const asideNode = movieHtml.querySelector(".aside-movie-profile");
|
|
16
16
|
const movieNode = movieHtml.querySelector(".main-movie-profile");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"movie.service.js","names":["fetchPage","movieUrl","getMovieTitle","getMovieYear","getMovieDuration","getMovieDescriptions","getMovieGenres","getMovieType","getMovieOrigins","getMovieColorRating","getMovieRating","getMovieRatingCount","getMovieTitlesOther","getMoviePoster","getMovieRandomPhoto","getMovieTrivia","getMovieGroup","getMovieVods","getMovieTags","getMoviePremieres","getMovieBoxMovies"],"sources":["../../src/services/movie.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovie } from '../dto/movie';\nimport { fetchPage } from '../fetchers';\nimport {\n getMovieBoxMovies,\n getMovieColorRating,\n getMovieDescriptions,\n getMovieDuration,\n getMovieGenres,\n getMovieGroup,\n getMovieOrigins,\n getMoviePoster,\n getMoviePremieres,\n getMovieRandomPhoto,\n getMovieRating,\n getMovieRatingCount,\n getMovieTags,\n getMovieTitle,\n getMovieTitlesOther,\n getMovieTrivia,\n getMovieType,\n getMovieVods,\n getMovieYear\n} from '../helpers/movie.helper';\nimport { movieUrl } from '../vars';\n\nexport class MovieScraper {\n 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,
|
|
1
|
+
{"version":3,"file":"movie.service.js","names":["fetchPage","movieUrl","getMovieTitle","getMovieYear","getMovieDuration","getMovieDescriptions","getMovieGenres","getMovieType","getMovieOrigins","getMovieColorRating","getMovieRating","getMovieRatingCount","getMovieTitlesOther","getMoviePoster","getMovieRandomPhoto","getMovieTrivia","getMovieGroup","getMovieVods","getMovieTags","getMoviePremieres","getMovieBoxMovies"],"sources":["../../src/services/movie.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovie } from '../dto/movie';\nimport { fetchPage } from '../fetchers';\nimport {\n getMovieBoxMovies,\n getMovieColorRating,\n getMovieDescriptions,\n getMovieDuration,\n getMovieGenres,\n getMovieGroup,\n getMovieOrigins,\n getMoviePoster,\n getMoviePremieres,\n getMovieRandomPhoto,\n getMovieRating,\n getMovieRatingCount,\n getMovieTags,\n getMovieTitle,\n getMovieTitlesOther,\n getMovieTrivia,\n getMovieType,\n getMovieVods,\n getMovieYear\n} from '../helpers/movie.helper';\nimport { movieUrl } from '../vars';\n\nexport class MovieScraper {\n private film: CSFDMovie;\n\n public async movie(movieId: number, optionsRequest?: RequestInit): 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, { ...optionsRequest });\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,SAAiB,gBAAkD;EACpF,MAAM,KAAK,OAAO,QAAQ;AAC1B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,gDAAgD;EAKlE,MAAM,wCAFW,MAAMA,wBADXC,sBAAS,GAAG,EACc,EAAE,GAAG,gBAAgB,CAAC,CAE3B;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"}
|
|
@@ -5,10 +5,10 @@ import { parse } from "node-html-parser";
|
|
|
5
5
|
|
|
6
6
|
//#region src/services/movie.service.ts
|
|
7
7
|
var MovieScraper = class {
|
|
8
|
-
async movie(movieId) {
|
|
8
|
+
async movie(movieId, optionsRequest) {
|
|
9
9
|
const id = Number(movieId);
|
|
10
10
|
if (isNaN(id)) throw new Error("node-csfd-api: movieId must be a valid number");
|
|
11
|
-
const movieHtml = parse(await fetchPage(movieUrl(id)));
|
|
11
|
+
const movieHtml = parse(await fetchPage(movieUrl(id), { ...optionsRequest }));
|
|
12
12
|
const pageClasses = movieHtml.querySelector(".page-content").classNames.split(" ");
|
|
13
13
|
const asideNode = movieHtml.querySelector(".aside-movie-profile");
|
|
14
14
|
const movieNode = movieHtml.querySelector(".main-movie-profile");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"movie.service.mjs","names":[],"sources":["../../src/services/movie.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovie } from '../dto/movie';\nimport { fetchPage } from '../fetchers';\nimport {\n getMovieBoxMovies,\n getMovieColorRating,\n getMovieDescriptions,\n getMovieDuration,\n getMovieGenres,\n getMovieGroup,\n getMovieOrigins,\n getMoviePoster,\n getMoviePremieres,\n getMovieRandomPhoto,\n getMovieRating,\n getMovieRatingCount,\n getMovieTags,\n getMovieTitle,\n getMovieTitlesOther,\n getMovieTrivia,\n getMovieType,\n getMovieVods,\n getMovieYear\n} from '../helpers/movie.helper';\nimport { movieUrl } from '../vars';\n\nexport class MovieScraper {\n 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,
|
|
1
|
+
{"version":3,"file":"movie.service.mjs","names":[],"sources":["../../src/services/movie.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovie } from '../dto/movie';\nimport { fetchPage } from '../fetchers';\nimport {\n getMovieBoxMovies,\n getMovieColorRating,\n getMovieDescriptions,\n getMovieDuration,\n getMovieGenres,\n getMovieGroup,\n getMovieOrigins,\n getMoviePoster,\n getMoviePremieres,\n getMovieRandomPhoto,\n getMovieRating,\n getMovieRatingCount,\n getMovieTags,\n getMovieTitle,\n getMovieTitlesOther,\n getMovieTrivia,\n getMovieType,\n getMovieVods,\n getMovieYear\n} from '../helpers/movie.helper';\nimport { movieUrl } from '../vars';\n\nexport class MovieScraper {\n private film: CSFDMovie;\n\n public async movie(movieId: number, optionsRequest?: RequestInit): 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, { ...optionsRequest });\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,SAAiB,gBAAkD;EACpF,MAAM,KAAK,OAAO,QAAQ;AAC1B,MAAI,MAAM,GAAG,CACX,OAAM,IAAI,MAAM,gDAAgD;EAKlE,MAAM,YAAY,MAFD,MAAM,UADX,SAAS,GAAG,EACc,EAAE,GAAG,gBAAgB,CAAC,CAE3B;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"}
|
|
@@ -2,7 +2,7 @@ import { CSFDSearch } from "../dto/search.mjs";
|
|
|
2
2
|
|
|
3
3
|
//#region src/services/search.service.d.ts
|
|
4
4
|
declare class SearchScraper {
|
|
5
|
-
search(text: string): Promise<CSFDSearch>;
|
|
5
|
+
search(text: string, optionsRequest?: RequestInit): Promise<CSFDSearch>;
|
|
6
6
|
private parseSearch;
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
@@ -2,7 +2,7 @@ import { CSFDSearch } from "../dto/search.js";
|
|
|
2
2
|
|
|
3
3
|
//#region src/services/search.service.d.ts
|
|
4
4
|
declare class SearchScraper {
|
|
5
|
-
search(text: string): Promise<CSFDSearch>;
|
|
5
|
+
search(text: string, optionsRequest?: RequestInit): Promise<CSFDSearch>;
|
|
6
6
|
private parseSearch;
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
@@ -9,8 +9,8 @@ node_html_parser = require_rolldown_runtime.__toESM(node_html_parser);
|
|
|
9
9
|
|
|
10
10
|
//#region src/services/search.service.ts
|
|
11
11
|
var SearchScraper = class {
|
|
12
|
-
async search(text) {
|
|
13
|
-
const html = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.searchUrl(text)));
|
|
12
|
+
async search(text, optionsRequest) {
|
|
13
|
+
const html = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.searchUrl(text), { ...optionsRequest }));
|
|
14
14
|
const moviesNode = html.querySelectorAll(".main-movies article");
|
|
15
15
|
const usersNode = html.querySelectorAll(".main-users article");
|
|
16
16
|
const tvSeriesNode = html.querySelectorAll(".main-series article");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.service.js","names":["fetchPage","searchUrl","movies: CSFDSearchMovie[]","users: CSFDSearchUser[]","tvSeries: CSFDSearchMovie[]","getSearchUrl","movie: CSFDSearchMovie","parseIdFromUrl","getSearchTitle","getSearchYear","getSearchType","getSearchColorRating","getSearchPoster","getSearchOrigins","parseSearchPeople","getUserUrl","user: CSFDSearchUser","getUser","getUserRealName","getAvatar","user: CSFDSearchMovie"],"sources":["../../src/services/search.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDSearch, CSFDSearchMovie, CSFDSearchUser } from '../dto/search';\nimport { fetchPage } from '../fetchers';\nimport { parseIdFromUrl } from '../helpers/global.helper';\nimport { getAvatar, getUser, getUserRealName, getUserUrl } from '../helpers/search-user.helper';\nimport {\n getSearchColorRating,\n getSearchOrigins,\n getSearchPoster,\n getSearchTitle,\n getSearchType,\n getSearchUrl,\n getSearchYear,\n parseSearchPeople\n} from '../helpers/search.helper';\nimport { searchUrl } from '../vars';\n\nexport class SearchScraper {\n public async search(text: string): 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,
|
|
1
|
+
{"version":3,"file":"search.service.js","names":["fetchPage","searchUrl","movies: CSFDSearchMovie[]","users: CSFDSearchUser[]","tvSeries: CSFDSearchMovie[]","getSearchUrl","movie: CSFDSearchMovie","parseIdFromUrl","getSearchTitle","getSearchYear","getSearchType","getSearchColorRating","getSearchPoster","getSearchOrigins","parseSearchPeople","getUserUrl","user: CSFDSearchUser","getUser","getUserRealName","getAvatar","user: CSFDSearchMovie"],"sources":["../../src/services/search.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDSearch, CSFDSearchMovie, CSFDSearchUser } from '../dto/search';\nimport { fetchPage } from '../fetchers';\nimport { parseIdFromUrl } from '../helpers/global.helper';\nimport { getAvatar, getUser, getUserRealName, getUserUrl } from '../helpers/search-user.helper';\nimport {\n getSearchColorRating,\n getSearchOrigins,\n getSearchPoster,\n getSearchTitle,\n getSearchType,\n getSearchUrl,\n getSearchYear,\n parseSearchPeople\n} from '../helpers/search.helper';\nimport { searchUrl } from '../vars';\n\nexport class SearchScraper {\n public async search(text: string, optionsRequest?: RequestInit): Promise<CSFDSearch> {\n const url = searchUrl(text);\n const response = await fetchPage(url, { ...optionsRequest });\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,MAAc,gBAAmD;EAInF,MAAM,mCAFW,MAAMA,wBADXC,uBAAU,KAAK,EACW,EAAE,GAAG,gBAAgB,CAAC,CAEhC;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"}
|
|
@@ -7,8 +7,8 @@ import { parse } from "node-html-parser";
|
|
|
7
7
|
|
|
8
8
|
//#region src/services/search.service.ts
|
|
9
9
|
var SearchScraper = class {
|
|
10
|
-
async search(text) {
|
|
11
|
-
const html = parse(await fetchPage(searchUrl(text)));
|
|
10
|
+
async search(text, optionsRequest) {
|
|
11
|
+
const html = parse(await fetchPage(searchUrl(text), { ...optionsRequest }));
|
|
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");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.service.mjs","names":["movies: CSFDSearchMovie[]","users: CSFDSearchUser[]","tvSeries: CSFDSearchMovie[]","movie: CSFDSearchMovie","user: CSFDSearchUser","user: CSFDSearchMovie"],"sources":["../../src/services/search.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDSearch, CSFDSearchMovie, CSFDSearchUser } from '../dto/search';\nimport { fetchPage } from '../fetchers';\nimport { parseIdFromUrl } from '../helpers/global.helper';\nimport { getAvatar, getUser, getUserRealName, getUserUrl } from '../helpers/search-user.helper';\nimport {\n getSearchColorRating,\n getSearchOrigins,\n getSearchPoster,\n getSearchTitle,\n getSearchType,\n getSearchUrl,\n getSearchYear,\n parseSearchPeople\n} from '../helpers/search.helper';\nimport { searchUrl } from '../vars';\n\nexport class SearchScraper {\n public async search(text: string): 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,
|
|
1
|
+
{"version":3,"file":"search.service.mjs","names":["movies: CSFDSearchMovie[]","users: CSFDSearchUser[]","tvSeries: CSFDSearchMovie[]","movie: CSFDSearchMovie","user: CSFDSearchUser","user: CSFDSearchMovie"],"sources":["../../src/services/search.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDSearch, CSFDSearchMovie, CSFDSearchUser } from '../dto/search';\nimport { fetchPage } from '../fetchers';\nimport { parseIdFromUrl } from '../helpers/global.helper';\nimport { getAvatar, getUser, getUserRealName, getUserUrl } from '../helpers/search-user.helper';\nimport {\n getSearchColorRating,\n getSearchOrigins,\n getSearchPoster,\n getSearchTitle,\n getSearchType,\n getSearchUrl,\n getSearchYear,\n parseSearchPeople\n} from '../helpers/search.helper';\nimport { searchUrl } from '../vars';\n\nexport class SearchScraper {\n public async search(text: string, optionsRequest?: RequestInit): Promise<CSFDSearch> {\n const url = searchUrl(text);\n const response = await fetchPage(url, { ...optionsRequest });\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,MAAc,gBAAmD;EAInF,MAAM,OAAO,MAFI,MAAM,UADX,UAAU,KAAK,EACW,EAAE,GAAG,gBAAgB,CAAC,CAEhC;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"}
|
|
@@ -3,7 +3,7 @@ import { CSFDUserRatingConfig, CSFDUserRatings } from "../dto/user-ratings.mjs";
|
|
|
3
3
|
//#region src/services/user-ratings.service.d.ts
|
|
4
4
|
declare class UserRatingsScraper {
|
|
5
5
|
private films;
|
|
6
|
-
userRatings(user: string | number, config?: CSFDUserRatingConfig): Promise<CSFDUserRatings[]>;
|
|
6
|
+
userRatings(user: string | number, config?: CSFDUserRatingConfig, optionsRequest?: RequestInit): Promise<CSFDUserRatings[]>;
|
|
7
7
|
private getPage;
|
|
8
8
|
private buildUserRatings;
|
|
9
9
|
}
|
|
@@ -3,7 +3,7 @@ import { CSFDUserRatingConfig, CSFDUserRatings } from "../dto/user-ratings.js";
|
|
|
3
3
|
//#region src/services/user-ratings.service.d.ts
|
|
4
4
|
declare class UserRatingsScraper {
|
|
5
5
|
private films;
|
|
6
|
-
userRatings(user: string | number, config?: CSFDUserRatingConfig): Promise<CSFDUserRatings[]>;
|
|
6
|
+
userRatings(user: string | number, config?: CSFDUserRatingConfig, optionsRequest?: RequestInit): Promise<CSFDUserRatings[]>;
|
|
7
7
|
private getPage;
|
|
8
8
|
private buildUserRatings;
|
|
9
9
|
}
|
|
@@ -10,10 +10,10 @@ var UserRatingsScraper = class {
|
|
|
10
10
|
constructor() {
|
|
11
11
|
this.films = [];
|
|
12
12
|
}
|
|
13
|
-
async userRatings(user, config) {
|
|
13
|
+
async userRatings(user, config, optionsRequest) {
|
|
14
14
|
let allMovies = [];
|
|
15
15
|
const url = require_vars.userRatingsUrl(user);
|
|
16
|
-
const items = (0, node_html_parser.parse)(await require_index.fetchPage(url));
|
|
16
|
+
const items = (0, node_html_parser.parse)(await require_index.fetchPage(url, { ...optionsRequest }));
|
|
17
17
|
const movies = items.querySelectorAll(".box-user-rating .table-container tbody tr");
|
|
18
18
|
const pagesNode = items.querySelector(".pagination");
|
|
19
19
|
const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;
|
|
@@ -23,7 +23,7 @@ var UserRatingsScraper = class {
|
|
|
23
23
|
console.log("Fetching all pages", pages);
|
|
24
24
|
for (let i = 2; i <= pages; i++) {
|
|
25
25
|
console.log("Fetching page", i, "out of", pages, "...");
|
|
26
|
-
const movies$1 = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.userRatingsUrl(user, i))).querySelectorAll(".box-user-rating .table-container tbody tr");
|
|
26
|
+
const movies$1 = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.userRatingsUrl(user, i), { ...optionsRequest })).querySelectorAll(".box-user-rating .table-container tbody tr");
|
|
27
27
|
allMovies = [...this.getPage(config, movies$1)];
|
|
28
28
|
if (config.allPagesDelay) await require_user_ratings_helper.sleep(config.allPagesDelay);
|
|
29
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-ratings.service.js","names":["allMovies: CSFDUserRatings[]","userRatingsUrl","fetchPage","movies","sleep","getUserRatingType","getUserRatingId","getUserRatingTitle","getUserRatingYear","getUserRatingUrl","getUserRatingColorRating","getUserRatingDate","getUserRating"],"sources":["../../src/services/user-ratings.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDColorRating, CSFDStars } from '../dto/global';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from '../dto/user-ratings';\nimport { fetchPage } from '../fetchers';\nimport {\n getUserRating,\n getUserRatingColorRating,\n getUserRatingDate,\n getUserRatingId,\n getUserRatingTitle,\n getUserRatingType,\n getUserRatingUrl,\n getUserRatingYear,\n sleep\n} from '../helpers/user-ratings.helper';\nimport { userRatingsUrl } from '../vars';\n\nexport class UserRatingsScraper {\n private films: CSFDUserRatings[] = [];\n\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig\n ): Promise<CSFDUserRatings[]> {\n let allMovies: CSFDUserRatings[] = [];\n const url = userRatingsUrl(user);\n const response = await fetchPage(url);\n
|
|
1
|
+
{"version":3,"file":"user-ratings.service.js","names":["allMovies: CSFDUserRatings[]","userRatingsUrl","fetchPage","movies","sleep","getUserRatingType","getUserRatingId","getUserRatingTitle","getUserRatingYear","getUserRatingUrl","getUserRatingColorRating","getUserRatingDate","getUserRating"],"sources":["../../src/services/user-ratings.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDColorRating, CSFDStars } from '../dto/global';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from '../dto/user-ratings';\nimport { fetchPage } from '../fetchers';\nimport {\n getUserRating,\n getUserRatingColorRating,\n getUserRatingDate,\n getUserRatingId,\n getUserRatingTitle,\n getUserRatingType,\n getUserRatingUrl,\n getUserRatingYear,\n sleep\n} from '../helpers/user-ratings.helper';\nimport { userRatingsUrl } from '../vars';\n\nexport class UserRatingsScraper {\n private films: CSFDUserRatings[] = [];\n\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig,\n optionsRequest?: RequestInit\n ): Promise<CSFDUserRatings[]> {\n let allMovies: CSFDUserRatings[] = [];\n const url = userRatingsUrl(user);\n const response = await fetchPage(url, { ...optionsRequest });\n const items = parse(response);\n const movies = items.querySelectorAll('.box-user-rating .table-container tbody tr');\n\n // Get number of pages\n const pagesNode = items.querySelector('.pagination');\n const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;\n\n allMovies = this.getPage(config, movies);\n\n if (config?.allPages) {\n console.log('User', user, url);\n console.log('Fetching all pages', pages);\n for (let i = 2; i <= pages; i++) {\n console.log('Fetching page', i, 'out of', pages, '...');\n const url = userRatingsUrl(user, i);\n const response = await fetchPage(url, { ...optionsRequest });\n\n const items = parse(response);\n const movies = items.querySelectorAll('.box-user-rating .table-container tbody tr');\n allMovies = [...this.getPage(config, movies)];\n\n // Sleep\n if (config.allPagesDelay) {\n await sleep(config.allPagesDelay);\n }\n }\n return allMovies;\n }\n\n return allMovies;\n }\n\n private getPage(config: CSFDUserRatingConfig, movies: HTMLElement[]) {\n if (config) {\n if (config.includesOnly?.length && config.excludes?.length) {\n console.warn(\n `node-csfd-api:\n You can not use both parameters 'includesOnly' and 'excludes'.\n Parameter 'includesOnly' will be used now:`,\n config.includesOnly\n );\n }\n }\n\n for (const el of movies) {\n const type = getUserRatingType(el);\n\n // Filtering includesOnly\n if (config?.includesOnly?.length) {\n if (config.includesOnly.some((include) => type === include)) {\n this.buildUserRatings(el);\n }\n // Filter exludes\n } else if (config?.excludes?.length) {\n if (!config.excludes.some((exclude) => type === exclude)) {\n this.buildUserRatings(el);\n }\n } else {\n // Without filtering\n this.buildUserRatings(el);\n }\n }\n return this.films;\n }\n\n private buildUserRatings(el: HTMLElement) {\n this.films.push({\n id: getUserRatingId(el),\n title: getUserRatingTitle(el),\n year: getUserRatingYear(el),\n type: getUserRatingType(el),\n url: getUserRatingUrl(el),\n colorRating: getUserRatingColorRating(el) as CSFDColorRating,\n userDate: getUserRatingDate(el),\n userRating: getUserRating(el) as CSFDStars\n });\n }\n}\n"],"mappings":";;;;;;;;AAiBA,IAAa,qBAAb,MAAgC;;eACK,EAAE;;CAErC,MAAa,YACX,MACA,QACA,gBAC4B;EAC5B,IAAIA,YAA+B,EAAE;EACrC,MAAM,MAAMC,4BAAe,KAAK;EAEhC,MAAM,oCADW,MAAMC,wBAAU,KAAK,EAAE,GAAG,gBAAgB,CAAC,CAC/B;EAC7B,MAAM,SAAS,MAAM,iBAAiB,6CAA6C;EAGnF,MAAM,YAAY,MAAM,cAAc,cAAc;EACpD,MAAM,QAAQ,CAAC,WAAW,WAAW,UAAU,WAAW,SAAS,GAAG,WAAW;AAEjF,cAAY,KAAK,QAAQ,QAAQ,OAAO;AAExC,MAAI,QAAQ,UAAU;AACpB,WAAQ,IAAI,QAAQ,MAAM,IAAI;AAC9B,WAAQ,IAAI,sBAAsB,MAAM;AACxC,QAAK,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;AAC/B,YAAQ,IAAI,iBAAiB,GAAG,UAAU,OAAO,MAAM;IAKvD,MAAMC,uCAHW,MAAMD,wBADXD,4BAAe,MAAM,EAAE,EACG,EAAE,GAAG,gBAAgB,CAAC,CAE/B,CACR,iBAAiB,6CAA6C;AACnF,gBAAY,CAAC,GAAG,KAAK,QAAQ,QAAQE,SAAO,CAAC;AAG7C,QAAI,OAAO,cACT,OAAMC,kCAAM,OAAO,cAAc;;AAGrC,UAAO;;AAGT,SAAO;;CAGT,AAAQ,QAAQ,QAA8B,QAAuB;AACnE,MAAI,QACF;OAAI,OAAO,cAAc,UAAU,OAAO,UAAU,OAClD,SAAQ,KACN;;qDAGA,OAAO,aACR;;AAIL,OAAK,MAAM,MAAM,QAAQ;GACvB,MAAM,OAAOC,8CAAkB,GAAG;AAGlC,OAAI,QAAQ,cAAc,QACxB;QAAI,OAAO,aAAa,MAAM,YAAY,SAAS,QAAQ,CACzD,MAAK,iBAAiB,GAAG;cAGlB,QAAQ,UAAU,QAC3B;QAAI,CAAC,OAAO,SAAS,MAAM,YAAY,SAAS,QAAQ,CACtD,MAAK,iBAAiB,GAAG;SAI3B,MAAK,iBAAiB,GAAG;;AAG7B,SAAO,KAAK;;CAGd,AAAQ,iBAAiB,IAAiB;AACxC,OAAK,MAAM,KAAK;GACd,IAAIC,4CAAgB,GAAG;GACvB,OAAOC,+CAAmB,GAAG;GAC7B,MAAMC,8CAAkB,GAAG;GAC3B,MAAMH,8CAAkB,GAAG;GAC3B,KAAKI,6CAAiB,GAAG;GACzB,aAAaC,qDAAyB,GAAG;GACzC,UAAUC,8CAAkB,GAAG;GAC/B,YAAYC,0CAAc,GAAG;GAC9B,CAAC"}
|
|
@@ -8,10 +8,10 @@ var UserRatingsScraper = class {
|
|
|
8
8
|
constructor() {
|
|
9
9
|
this.films = [];
|
|
10
10
|
}
|
|
11
|
-
async userRatings(user, config) {
|
|
11
|
+
async userRatings(user, config, optionsRequest) {
|
|
12
12
|
let allMovies = [];
|
|
13
13
|
const url = userRatingsUrl(user);
|
|
14
|
-
const items = parse(await fetchPage(url));
|
|
14
|
+
const items = parse(await fetchPage(url, { ...optionsRequest }));
|
|
15
15
|
const movies = items.querySelectorAll(".box-user-rating .table-container tbody tr");
|
|
16
16
|
const pagesNode = items.querySelector(".pagination");
|
|
17
17
|
const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;
|
|
@@ -21,7 +21,7 @@ var UserRatingsScraper = class {
|
|
|
21
21
|
console.log("Fetching all pages", pages);
|
|
22
22
|
for (let i = 2; i <= pages; i++) {
|
|
23
23
|
console.log("Fetching page", i, "out of", pages, "...");
|
|
24
|
-
const movies$1 = parse(await fetchPage(userRatingsUrl(user, i))).querySelectorAll(".box-user-rating .table-container tbody tr");
|
|
24
|
+
const movies$1 = parse(await fetchPage(userRatingsUrl(user, i), { ...optionsRequest })).querySelectorAll(".box-user-rating .table-container tbody tr");
|
|
25
25
|
allMovies = [...this.getPage(config, movies$1)];
|
|
26
26
|
if (config.allPagesDelay) await sleep(config.allPagesDelay);
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-ratings.service.mjs","names":["allMovies: CSFDUserRatings[]","movies"],"sources":["../../src/services/user-ratings.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDColorRating, CSFDStars } from '../dto/global';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from '../dto/user-ratings';\nimport { fetchPage } from '../fetchers';\nimport {\n getUserRating,\n getUserRatingColorRating,\n getUserRatingDate,\n getUserRatingId,\n getUserRatingTitle,\n getUserRatingType,\n getUserRatingUrl,\n getUserRatingYear,\n sleep\n} from '../helpers/user-ratings.helper';\nimport { userRatingsUrl } from '../vars';\n\nexport class UserRatingsScraper {\n private films: CSFDUserRatings[] = [];\n\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig\n ): Promise<CSFDUserRatings[]> {\n let allMovies: CSFDUserRatings[] = [];\n const url = userRatingsUrl(user);\n const response = await fetchPage(url);\n
|
|
1
|
+
{"version":3,"file":"user-ratings.service.mjs","names":["allMovies: CSFDUserRatings[]","movies"],"sources":["../../src/services/user-ratings.service.ts"],"sourcesContent":["import { HTMLElement, parse } from 'node-html-parser';\nimport { CSFDColorRating, CSFDStars } from '../dto/global';\nimport { CSFDUserRatingConfig, CSFDUserRatings } from '../dto/user-ratings';\nimport { fetchPage } from '../fetchers';\nimport {\n getUserRating,\n getUserRatingColorRating,\n getUserRatingDate,\n getUserRatingId,\n getUserRatingTitle,\n getUserRatingType,\n getUserRatingUrl,\n getUserRatingYear,\n sleep\n} from '../helpers/user-ratings.helper';\nimport { userRatingsUrl } from '../vars';\n\nexport class UserRatingsScraper {\n private films: CSFDUserRatings[] = [];\n\n public async userRatings(\n user: string | number,\n config?: CSFDUserRatingConfig,\n optionsRequest?: RequestInit\n ): Promise<CSFDUserRatings[]> {\n let allMovies: CSFDUserRatings[] = [];\n const url = userRatingsUrl(user);\n const response = await fetchPage(url, { ...optionsRequest });\n const items = parse(response);\n const movies = items.querySelectorAll('.box-user-rating .table-container tbody tr');\n\n // Get number of pages\n const pagesNode = items.querySelector('.pagination');\n const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;\n\n allMovies = this.getPage(config, movies);\n\n if (config?.allPages) {\n console.log('User', user, url);\n console.log('Fetching all pages', pages);\n for (let i = 2; i <= pages; i++) {\n console.log('Fetching page', i, 'out of', pages, '...');\n const url = userRatingsUrl(user, i);\n const response = await fetchPage(url, { ...optionsRequest });\n\n const items = parse(response);\n const movies = items.querySelectorAll('.box-user-rating .table-container tbody tr');\n allMovies = [...this.getPage(config, movies)];\n\n // Sleep\n if (config.allPagesDelay) {\n await sleep(config.allPagesDelay);\n }\n }\n return allMovies;\n }\n\n return allMovies;\n }\n\n private getPage(config: CSFDUserRatingConfig, movies: HTMLElement[]) {\n if (config) {\n if (config.includesOnly?.length && config.excludes?.length) {\n console.warn(\n `node-csfd-api:\n You can not use both parameters 'includesOnly' and 'excludes'.\n Parameter 'includesOnly' will be used now:`,\n config.includesOnly\n );\n }\n }\n\n for (const el of movies) {\n const type = getUserRatingType(el);\n\n // Filtering includesOnly\n if (config?.includesOnly?.length) {\n if (config.includesOnly.some((include) => type === include)) {\n this.buildUserRatings(el);\n }\n // Filter exludes\n } else if (config?.excludes?.length) {\n if (!config.excludes.some((exclude) => type === exclude)) {\n this.buildUserRatings(el);\n }\n } else {\n // Without filtering\n this.buildUserRatings(el);\n }\n }\n return this.films;\n }\n\n private buildUserRatings(el: HTMLElement) {\n this.films.push({\n id: getUserRatingId(el),\n title: getUserRatingTitle(el),\n year: getUserRatingYear(el),\n type: getUserRatingType(el),\n url: getUserRatingUrl(el),\n colorRating: getUserRatingColorRating(el) as CSFDColorRating,\n userDate: getUserRatingDate(el),\n userRating: getUserRating(el) as CSFDStars\n });\n }\n}\n"],"mappings":";;;;;;AAiBA,IAAa,qBAAb,MAAgC;;eACK,EAAE;;CAErC,MAAa,YACX,MACA,QACA,gBAC4B;EAC5B,IAAIA,YAA+B,EAAE;EACrC,MAAM,MAAM,eAAe,KAAK;EAEhC,MAAM,QAAQ,MADG,MAAM,UAAU,KAAK,EAAE,GAAG,gBAAgB,CAAC,CAC/B;EAC7B,MAAM,SAAS,MAAM,iBAAiB,6CAA6C;EAGnF,MAAM,YAAY,MAAM,cAAc,cAAc;EACpD,MAAM,QAAQ,CAAC,WAAW,WAAW,UAAU,WAAW,SAAS,GAAG,WAAW;AAEjF,cAAY,KAAK,QAAQ,QAAQ,OAAO;AAExC,MAAI,QAAQ,UAAU;AACpB,WAAQ,IAAI,QAAQ,MAAM,IAAI;AAC9B,WAAQ,IAAI,sBAAsB,MAAM;AACxC,QAAK,IAAI,IAAI,GAAG,KAAK,OAAO,KAAK;AAC/B,YAAQ,IAAI,iBAAiB,GAAG,UAAU,OAAO,MAAM;IAKvD,MAAMC,WADQ,MAFG,MAAM,UADX,eAAe,MAAM,EAAE,EACG,EAAE,GAAG,gBAAgB,CAAC,CAE/B,CACR,iBAAiB,6CAA6C;AACnF,gBAAY,CAAC,GAAG,KAAK,QAAQ,QAAQA,SAAO,CAAC;AAG7C,QAAI,OAAO,cACT,OAAM,MAAM,OAAO,cAAc;;AAGrC,UAAO;;AAGT,SAAO;;CAGT,AAAQ,QAAQ,QAA8B,QAAuB;AACnE,MAAI,QACF;OAAI,OAAO,cAAc,UAAU,OAAO,UAAU,OAClD,SAAQ,KACN;;qDAGA,OAAO,aACR;;AAIL,OAAK,MAAM,MAAM,QAAQ;GACvB,MAAM,OAAO,kBAAkB,GAAG;AAGlC,OAAI,QAAQ,cAAc,QACxB;QAAI,OAAO,aAAa,MAAM,YAAY,SAAS,QAAQ,CACzD,MAAK,iBAAiB,GAAG;cAGlB,QAAQ,UAAU,QAC3B;QAAI,CAAC,OAAO,SAAS,MAAM,YAAY,SAAS,QAAQ,CACtD,MAAK,iBAAiB,GAAG;SAI3B,MAAK,iBAAiB,GAAG;;AAG7B,SAAO,KAAK;;CAGd,AAAQ,iBAAiB,IAAiB;AACxC,OAAK,MAAM,KAAK;GACd,IAAI,gBAAgB,GAAG;GACvB,OAAO,mBAAmB,GAAG;GAC7B,MAAM,kBAAkB,GAAG;GAC3B,MAAM,kBAAkB,GAAG;GAC3B,KAAK,iBAAiB,GAAG;GACzB,aAAa,yBAAyB,GAAG;GACzC,UAAU,kBAAkB,GAAG;GAC/B,YAAY,cAAc,GAAG;GAC9B,CAAC"}
|