node-csfd-api
Version:
ČSFD API in JavaScript. Amazing NPM library for scrapping csfd.cz :)
60 lines (59 loc) • 2.92 kB
JavaScript
const require_vars = require("../vars.cjs");
const require_index = require("../fetchers/index.cjs");
const require_global_helper = require("../helpers/global.helper.cjs");
const require_user_ratings_helper = require("../helpers/user-ratings.helper.cjs");
let node_html_parser = require("node-html-parser");
//#region src/services/user-ratings.service.ts
var UserRatingsScraper = class {
async userRatings(user, config, options) {
let allMovies = [];
const pageToFetch = config?.page || 1;
const items = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.userRatingsUrl(user, pageToFetch > 1 ? pageToFetch : void 0, { language: options?.language }), { ...options?.request }));
const movies = items.querySelectorAll("#snippet--ratings table tr");
const pagesNode = items.querySelector(".pagination");
const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;
allMovies = this.getPage(config, movies);
if (config?.allPages) {
for (let i = 2; i <= pages; i++) {
config.onProgress?.(i, pages);
const movies = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.userRatingsUrl(user, i, { language: options?.language }), { ...options?.request })).querySelectorAll("#snippet--ratings table tr");
allMovies = [...allMovies, ...this.getPage(config, movies)];
if (config.allPagesDelay) await require_global_helper.sleep(config.allPagesDelay);
}
return allMovies;
}
return allMovies;
}
getPage(config, movies) {
const films = [];
if (config) {
if (config.includesOnly?.length && config.excludes?.length) console.warn(`${require_vars.LIB_PREFIX} Both 'includesOnly' and 'excludes' were provided. 'includesOnly' takes precedence:`, config.includesOnly);
}
const includesSet = config?.includesOnly?.length ? new Set(config.includesOnly) : null;
const excludesSet = config?.excludes?.length ? new Set(config.excludes) : null;
for (const el of movies) {
const type = require_user_ratings_helper.getUserRatingType(el);
if (includesSet) {
if (includesSet.has(type)) films.push(this.buildUserRatings(el, type));
} else if (excludesSet) {
if (!excludesSet.has(type)) films.push(this.buildUserRatings(el, type));
} else films.push(this.buildUserRatings(el, type));
}
return films;
}
buildUserRatings(el, type) {
return {
id: require_user_ratings_helper.getUserRatingId(el),
title: require_user_ratings_helper.getUserRatingTitle(el),
year: require_user_ratings_helper.getUserRatingYear(el),
type,
url: require_user_ratings_helper.getUserRatingUrl(el),
colorRating: require_user_ratings_helper.getUserRatingColorRating(el),
userDate: require_user_ratings_helper.getUserRatingDate(el),
userRating: require_user_ratings_helper.getUserRating(el)
};
}
};
//#endregion
exports.UserRatingsScraper = UserRatingsScraper;
//# sourceMappingURL=user-ratings.service.cjs.map