node-csfd-api
Version:
ČSFD API in JavaScript. Amazing NPM library for scrapping csfd.cz :)
66 lines (64 loc) • 3.16 kB
JavaScript
const require_index = require('../fetchers/index.js');
const require_vars = require('../vars.js');
const require_global_helper = require('../helpers/global.helper.js');
const require_user_reviews_helper = require('../helpers/user-reviews.helper.js');
let node_html_parser = require("node-html-parser");
//#region src/services/user-reviews.service.ts
var UserReviewsScraper = class {
async userReviews(user, config, options) {
let allReviews = [];
const pageToFetch = config?.page || 1;
const url = require_vars.userReviewsUrl(user, pageToFetch > 1 ? pageToFetch : void 0, { language: options?.language });
const items = (0, node_html_parser.parse)(await require_index.fetchPage(url, { ...options?.request }));
const reviews = items.querySelectorAll(".user-reviews .article");
const pagesNode = items.querySelector(".pagination");
const pages = +pagesNode?.childNodes[pagesNode.childNodes.length - 4].rawText || 1;
allReviews = this.getPage(config, reviews);
if (config?.allPages) {
console.log("User", user, url);
console.log("Fetching all pages", pages);
for (let i = 2; i <= pages; i++) {
console.log("Fetching page", i, "out of", pages, "...");
const reviews$1 = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.userReviewsUrl(user, i, { language: options?.language }), { ...options?.request })).querySelectorAll(".user-reviews .article");
allReviews = [...allReviews, ...this.getPage(config, reviews$1)];
if (config.allPagesDelay) await require_global_helper.sleep(config.allPagesDelay);
}
return allReviews;
}
return allReviews;
}
getPage(config, reviews) {
const films = [];
if (config) {
if (config.includesOnly?.length && config.excludes?.length) console.warn(`node-csfd-api:
You can not use both parameters 'includesOnly' and 'excludes'.
Parameter 'includesOnly' will be used now:`, config.includesOnly);
}
for (const el of reviews) {
const type = require_user_reviews_helper.getUserReviewType(el);
if (config?.includesOnly?.length) {
if (config.includesOnly.some((include) => type === include)) films.push(this.buildUserReviews(el));
} else if (config?.excludes?.length) {
if (!config.excludes.some((exclude) => type === exclude)) films.push(this.buildUserReviews(el));
} else films.push(this.buildUserReviews(el));
}
return films;
}
buildUserReviews(el) {
return {
id: require_user_reviews_helper.getUserReviewId(el),
title: require_user_reviews_helper.getUserReviewTitle(el),
year: require_user_reviews_helper.getUserReviewYear(el),
type: require_user_reviews_helper.getUserReviewType(el),
url: require_user_reviews_helper.getUserReviewUrl(el),
colorRating: require_user_reviews_helper.getUserReviewColorRating(el),
userDate: require_user_reviews_helper.getUserReviewDate(el),
userRating: require_user_reviews_helper.getUserReviewRating(el),
text: require_user_reviews_helper.getUserReviewText(el),
poster: require_user_reviews_helper.getUserReviewPoster(el)
};
}
};
//#endregion
exports.UserReviewsScraper = UserReviewsScraper;
//# sourceMappingURL=user-reviews.service.js.map