diff --git a/src/helpers/global.helper.ts b/src/helpers/global.helper.ts index 6f2acb7..dd107a3 100644 --- a/src/helpers/global.helper.ts +++ b/src/helpers/global.helper.ts @@ -16,6 +16,10 @@ export const parseIdFromUrl = (url: string): number => { if (/^\d+-/.test(p)) { return +p.split('-')[0] || null; } + // Also support pure numbers in URL parts (e.g., /uzivatel/1000/) + if (/^\d+$/.test(p)) { + return +p || null; + } } // Fallback diff --git a/src/services/user-ratings.service.ts b/src/services/user-ratings.service.ts index 09244fe..fc80b08 100644 --- a/src/services/user-ratings.service.ts +++ b/src/services/user-ratings.service.ts @@ -2,7 +2,7 @@ import { HTMLElement, parse } from 'node-html-parser'; import { CSFDColorRating, CSFDFilmTypes, CSFDStars } from '../dto/global'; import { CSFDUserRatingConfig, CSFDUserRatings } from '../dto/user-ratings'; import { fetchPage } from '../fetchers'; -import { sleep } from '../helpers/global.helper'; +import { extractId, sleep } from '../helpers/global.helper'; import { getUserRating, getUserRatingColorRating, @@ -22,9 +22,14 @@ export class UserRatingsScraper { config?: CSFDUserRatingConfig, options?: CSFDOptions ): Promise { + const id = extractId(user); + if (id === null || isNaN(id)) { + throw new Error('node-csfd-api: user must be a valid number or URL'); + } + let allMovies: CSFDUserRatings[] = []; const pageToFetch = config?.page || 1; - const url = userRatingsUrl(user, pageToFetch > 1 ? pageToFetch : undefined, { + const url = userRatingsUrl(id, pageToFetch > 1 ? pageToFetch : undefined, { language: options?.language }); const response = await fetchPage(url, { ...options?.request }); @@ -40,7 +45,7 @@ export class UserRatingsScraper { if (config?.allPages) { for (let i = 2; i <= pages; i++) { config.onProgress?.(i, pages); - const url = userRatingsUrl(user, i, { language: options?.language }); + const url = userRatingsUrl(id, i, { language: options?.language }); const response = await fetchPage(url, { ...options?.request }); const items = parse(response); diff --git a/src/services/user-reviews.service.ts b/src/services/user-reviews.service.ts index 88f5f49..b652031 100644 --- a/src/services/user-reviews.service.ts +++ b/src/services/user-reviews.service.ts @@ -2,7 +2,7 @@ import { HTMLElement, parse } from 'node-html-parser'; import { CSFDColorRating, CSFDFilmTypes, CSFDStars } from '../dto/global'; import { CSFDUserReviews, CSFDUserReviewsConfig } from '../dto/user-reviews'; import { fetchPage } from '../fetchers'; -import { sleep } from '../helpers/global.helper'; +import { extractId, sleep } from '../helpers/global.helper'; import { getUserReviewColorRating, getUserReviewDate, @@ -24,9 +24,14 @@ export class UserReviewsScraper { config?: CSFDUserReviewsConfig, options?: CSFDOptions ): Promise { + const id = extractId(user); + if (id === null || isNaN(id)) { + throw new Error('node-csfd-api: user must be a valid number or URL'); + } + let allReviews: CSFDUserReviews[] = []; const pageToFetch = config?.page || 1; - const url = userReviewsUrl(user, pageToFetch > 1 ? pageToFetch : undefined, { + const url = userReviewsUrl(id, pageToFetch > 1 ? pageToFetch : undefined, { language: options?.language }); const response = await fetchPage(url, { ...options?.request }); @@ -42,7 +47,7 @@ export class UserReviewsScraper { if (config?.allPages) { for (let i = 2; i <= pages; i++) { config.onProgress?.(i, pages); - const url = userReviewsUrl(user, i, { language: options?.language }); + const url = userReviewsUrl(id, i, { language: options?.language }); const response = await fetchPage(url, { ...options?.request }); const items = parse(response);