UNPKG

node-csfd-api

Version:

ČSFD API in JavaScript. Amazing NPM library for scrapping csfd.cz :)

62 lines (61 loc) 2.78 kB
import { LIB_PREFIX, userReviewsUrl } from "../vars.js"; import { fetchPage } from "../fetchers/index.js"; import { sleep } from "../helpers/global.helper.js"; import { getUserReviewColorRating, getUserReviewDate, getUserReviewId, getUserReviewPoster, getUserReviewRating, getUserReviewText, getUserReviewTitle, getUserReviewType, getUserReviewUrl, getUserReviewYear } from "../helpers/user-reviews.helper.js"; import { parse } from "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 items = parse(await fetchPage(userReviewsUrl(user, pageToFetch > 1 ? pageToFetch : void 0, { language: options?.language }), { ...options?.request })); const reviews = items.querySelectorAll(".user-tab-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) { for (let i = 2; i <= pages; i++) { config.onProgress?.(i, pages); const reviews = parse(await fetchPage(userReviewsUrl(user, i, { language: options?.language }), { ...options?.request })).querySelectorAll(".user-tab-reviews .article"); allReviews = [...allReviews, ...this.getPage(config, reviews)]; if (config.allPagesDelay) await sleep(config.allPagesDelay); } return allReviews; } return allReviews; } getPage(config, reviews) { const films = []; if (config) { if (config.includesOnly?.length && config.excludes?.length) console.warn(`${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 reviews) { const type = getUserReviewType(el); if (includesSet) { if (includesSet.has(type)) films.push(this.buildUserReviews(el, type)); } else if (excludesSet) { if (!excludesSet.has(type)) films.push(this.buildUserReviews(el, type)); } else films.push(this.buildUserReviews(el, type)); } return films; } buildUserReviews(el, type) { return { id: getUserReviewId(el), title: getUserReviewTitle(el), year: getUserReviewYear(el), type, url: getUserReviewUrl(el), colorRating: getUserReviewColorRating(el), userDate: getUserReviewDate(el), userRating: getUserReviewRating(el), text: getUserReviewText(el), poster: getUserReviewPoster(el) }; } }; //#endregion export { UserReviewsScraper }; //# sourceMappingURL=user-reviews.service.js.map