node-csfd-api 3.1.0 → 3.1.1
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/helpers/cinema.helper.js +2 -2
- package/helpers/cinema.helper.js.map +1 -1
- package/helpers/cinema.helper.mjs +2 -2
- package/helpers/cinema.helper.mjs.map +1 -1
- package/index.js.map +1 -1
- package/index.mjs.map +1 -1
- package/package.json +1 -1
- package/services/cinema.service.js +1 -1
- package/services/cinema.service.js.map +1 -1
- package/services/cinema.service.mjs +1 -1
- package/services/cinema.service.mjs.map +1 -1
package/helpers/cinema.helper.js
CHANGED
|
@@ -30,10 +30,10 @@ const getCinemaCoords = (el) => {
|
|
|
30
30
|
};
|
|
31
31
|
const getCinemaUrl = (el) => {
|
|
32
32
|
if (!el) return "";
|
|
33
|
-
return el.querySelector("a
|
|
33
|
+
return el.querySelector(".cinema-logo a")?.attributes.href ?? "";
|
|
34
34
|
};
|
|
35
35
|
const parseCinema = (el) => {
|
|
36
|
-
const [city, name] = el.querySelector("
|
|
36
|
+
const [city, name] = el.querySelector("header h2").innerText.trim().split(" - ");
|
|
37
37
|
return {
|
|
38
38
|
city,
|
|
39
39
|
name
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cinema.helper.js","names":["classes: string[]","parseColor","parseIdFromUrl","metaConvert: CSFDCinemaMeta[]"],"sources":["../../src/helpers/cinema.helper.ts"],"sourcesContent":["import { HTMLElement } from 'node-html-parser';\nimport {
|
|
1
|
+
{"version":3,"file":"cinema.helper.js","names":["classes: string[]","parseColor","parseIdFromUrl","metaConvert: CSFDCinemaMeta[]"],"sources":["../../src/helpers/cinema.helper.ts"],"sourcesContent":["import { HTMLElement } from 'node-html-parser';\nimport { CSFDCinemaGroupedFilmsByDate, CSFDCinemaMeta, CSFDCinemaMovie } from '../dto/cinema';\nimport { CSFDColorRating } from '../dto/global';\nimport { Colors } from '../dto/user-ratings';\nimport { parseColor, parseIdFromUrl } from './global.helper';\n\nexport const getCinemaColorRating = (el: HTMLElement | null): CSFDColorRating => {\n const classes: string[] = el?.classNames.split(' ') ?? [];\n const last = classes.length ? classes[classes.length - 1] : undefined;\n return last ? parseColor(last as Colors) : 'unknown';\n};\n\nexport const getCinemaId = (el: HTMLElement | null): number => {\n const id = el?.id?.split('-')[1];\n return +id;\n};\n\nexport const getCinemaUrlId = (url: string | null | undefined): number | null => {\n if (!url) return null;\n return parseIdFromUrl(url);\n};\n\nexport const getCinemaCoords = (el: HTMLElement | null): { lat: number; lng: number } | null => {\n if (!el) return null;\n const linkMapsEl = el.querySelector('a[href*=\"q=\"]');\n if (!linkMapsEl) return null;\n\n const linkMaps = linkMapsEl.getAttribute('href');\n const [_, latLng] = linkMaps.split('q=');\n\n const coords = latLng.split(',');\n if (coords.length !== 2) return null;\n\n const lat = Number(coords[0]);\n const lng = Number(coords[1]);\n if (Number.isFinite(lat) && Number.isFinite(lng)) {\n return { lat, lng };\n }\n return null;\n};\n\nexport const getCinemaUrl = (el: HTMLElement | null): string => {\n if (!el) return '';\n return el.querySelector('.cinema-logo a')?.attributes.href ?? '';\n};\n\nexport const parseCinema = (el: HTMLElement | null): { city: string; name: string } => {\n const title = el.querySelector('header h2').innerText.trim();\n const [city, name] = title.split(' - ');\n return { city, name };\n};\n\nexport const getGroupedFilmsByDate = (el: HTMLElement | null): CSFDCinemaGroupedFilmsByDate[] => {\n const divs = el.querySelectorAll(':scope > div');\n const getDatesAndFilms = divs\n .map((_, index) => index)\n .filter((index) => index % 2 === 0)\n .map((index) => {\n const [date, films] = divs.slice(index, index + 2);\n const dateText = date?.firstChild?.textContent?.trim() ?? null;\n return { date: dateText, films: getCinemaFilms('', films) };\n });\n\n return getDatesAndFilms;\n};\n\nexport const getCinemaFilms = (date: string, el: HTMLElement | null): CSFDCinemaMovie[] => {\n const filmNodes = el.querySelectorAll('.cinema-table tr');\n\n const films = filmNodes.map((filmNode) => {\n const url = filmNode.querySelector('td.name h3 a')?.attributes.href;\n const id = url ? getCinemaUrlId(url) : null;\n const title = filmNode.querySelector('.name h3')?.text.trim();\n const colorRating = getCinemaColorRating(filmNode.querySelector('.name .icon'));\n const showTimes = filmNode.querySelectorAll('.td-time')?.map((x) => x.textContent.trim());\n const meta = filmNode.querySelectorAll('.td-title span')?.map((x) => x.text.trim());\n\n return {\n id,\n title,\n url,\n colorRating,\n showTimes,\n meta: parseMeta(meta)\n };\n });\n return films;\n};\n\nexport const parseMeta = (meta: string[]): CSFDCinemaMeta[] => {\n const metaConvert: CSFDCinemaMeta[] = [];\n\n for (const element of meta) {\n if (element === 'T') {\n metaConvert.push('subtitles');\n } else if (element === 'D') {\n metaConvert.push('dubbing');\n } else {\n metaConvert.push(element);\n }\n }\n\n return metaConvert;\n};\n"],"mappings":";;;AAMA,MAAa,wBAAwB,OAA4C;CAC/E,MAAMA,UAAoB,IAAI,WAAW,MAAM,IAAI,IAAI,EAAE;CACzD,MAAM,OAAO,QAAQ,SAAS,QAAQ,QAAQ,SAAS,KAAK;AAC5D,QAAO,OAAOC,iCAAW,KAAe,GAAG;;AAG7C,MAAa,eAAe,OAAmC;AAE7D,QAAO,CADI,IAAI,IAAI,MAAM,IAAI,CAAC;;AAIhC,MAAa,kBAAkB,QAAkD;AAC/E,KAAI,CAAC,IAAK,QAAO;AACjB,QAAOC,qCAAe,IAAI;;AAG5B,MAAa,mBAAmB,OAAgE;AAC9F,KAAI,CAAC,GAAI,QAAO;CAChB,MAAM,aAAa,GAAG,cAAc,kBAAgB;AACpD,KAAI,CAAC,WAAY,QAAO;CAGxB,MAAM,CAAC,GAAG,UADO,WAAW,aAAa,OAAO,CACnB,MAAM,KAAK;CAExC,MAAM,SAAS,OAAO,MAAM,IAAI;AAChC,KAAI,OAAO,WAAW,EAAG,QAAO;CAEhC,MAAM,MAAM,OAAO,OAAO,GAAG;CAC7B,MAAM,MAAM,OAAO,OAAO,GAAG;AAC7B,KAAI,OAAO,SAAS,IAAI,IAAI,OAAO,SAAS,IAAI,CAC9C,QAAO;EAAE;EAAK;EAAK;AAErB,QAAO;;AAGT,MAAa,gBAAgB,OAAmC;AAC9D,KAAI,CAAC,GAAI,QAAO;AAChB,QAAO,GAAG,cAAc,iBAAiB,EAAE,WAAW,QAAQ;;AAGhE,MAAa,eAAe,OAA2D;CAErF,MAAM,CAAC,MAAM,QADC,GAAG,cAAc,YAAY,CAAC,UAAU,MAAM,CACjC,MAAM,MAAM;AACvC,QAAO;EAAE;EAAM;EAAM;;AAGvB,MAAa,yBAAyB,OAA2D;CAC/F,MAAM,OAAO,GAAG,iBAAiB,eAAe;AAUhD,QATyB,KACtB,KAAK,GAAG,UAAU,MAAM,CACxB,QAAQ,UAAU,QAAQ,MAAM,EAAE,CAClC,KAAK,UAAU;EACd,MAAM,CAAC,MAAM,SAAS,KAAK,MAAM,OAAO,QAAQ,EAAE;AAElD,SAAO;GAAE,MADQ,MAAM,YAAY,aAAa,MAAM,IAAI;GACjC,OAAO,eAAe,IAAI,MAAM;GAAE;GAC3D;;AAKN,MAAa,kBAAkB,MAAc,OAA8C;AAoBzF,QAnBkB,GAAG,iBAAiB,mBAAmB,CAEjC,KAAK,aAAa;EACxC,MAAM,MAAM,SAAS,cAAc,eAAe,EAAE,WAAW;EAC/D,MAAM,KAAK,MAAM,eAAe,IAAI,GAAG;EACvC,MAAM,QAAQ,SAAS,cAAc,WAAW,EAAE,KAAK,MAAM;EAC7D,MAAM,cAAc,qBAAqB,SAAS,cAAc,cAAc,CAAC;EAC/E,MAAM,YAAY,SAAS,iBAAiB,WAAW,EAAE,KAAK,MAAM,EAAE,YAAY,MAAM,CAAC;EACzF,MAAM,OAAO,SAAS,iBAAiB,iBAAiB,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,CAAC;AAEnF,SAAO;GACL;GACA;GACA;GACA;GACA;GACA,MAAM,UAAU,KAAK;GACtB;GACD;;AAIJ,MAAa,aAAa,SAAqC;CAC7D,MAAMC,cAAgC,EAAE;AAExC,MAAK,MAAM,WAAW,KACpB,KAAI,YAAY,IACd,aAAY,KAAK,YAAY;UACpB,YAAY,IACrB,aAAY,KAAK,UAAU;KAE3B,aAAY,KAAK,QAAQ;AAI7B,QAAO"}
|
|
@@ -30,10 +30,10 @@ const getCinemaCoords = (el) => {
|
|
|
30
30
|
};
|
|
31
31
|
const getCinemaUrl = (el) => {
|
|
32
32
|
if (!el) return "";
|
|
33
|
-
return el.querySelector("a
|
|
33
|
+
return el.querySelector(".cinema-logo a")?.attributes.href ?? "";
|
|
34
34
|
};
|
|
35
35
|
const parseCinema = (el) => {
|
|
36
|
-
const [city, name] = el.querySelector("
|
|
36
|
+
const [city, name] = el.querySelector("header h2").innerText.trim().split(" - ");
|
|
37
37
|
return {
|
|
38
38
|
city,
|
|
39
39
|
name
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cinema.helper.mjs","names":["classes: string[]","metaConvert: CSFDCinemaMeta[]"],"sources":["../../src/helpers/cinema.helper.ts"],"sourcesContent":["import { HTMLElement } from 'node-html-parser';\nimport {
|
|
1
|
+
{"version":3,"file":"cinema.helper.mjs","names":["classes: string[]","metaConvert: CSFDCinemaMeta[]"],"sources":["../../src/helpers/cinema.helper.ts"],"sourcesContent":["import { HTMLElement } from 'node-html-parser';\nimport { CSFDCinemaGroupedFilmsByDate, CSFDCinemaMeta, CSFDCinemaMovie } from '../dto/cinema';\nimport { CSFDColorRating } from '../dto/global';\nimport { Colors } from '../dto/user-ratings';\nimport { parseColor, parseIdFromUrl } from './global.helper';\n\nexport const getCinemaColorRating = (el: HTMLElement | null): CSFDColorRating => {\n const classes: string[] = el?.classNames.split(' ') ?? [];\n const last = classes.length ? classes[classes.length - 1] : undefined;\n return last ? parseColor(last as Colors) : 'unknown';\n};\n\nexport const getCinemaId = (el: HTMLElement | null): number => {\n const id = el?.id?.split('-')[1];\n return +id;\n};\n\nexport const getCinemaUrlId = (url: string | null | undefined): number | null => {\n if (!url) return null;\n return parseIdFromUrl(url);\n};\n\nexport const getCinemaCoords = (el: HTMLElement | null): { lat: number; lng: number } | null => {\n if (!el) return null;\n const linkMapsEl = el.querySelector('a[href*=\"q=\"]');\n if (!linkMapsEl) return null;\n\n const linkMaps = linkMapsEl.getAttribute('href');\n const [_, latLng] = linkMaps.split('q=');\n\n const coords = latLng.split(',');\n if (coords.length !== 2) return null;\n\n const lat = Number(coords[0]);\n const lng = Number(coords[1]);\n if (Number.isFinite(lat) && Number.isFinite(lng)) {\n return { lat, lng };\n }\n return null;\n};\n\nexport const getCinemaUrl = (el: HTMLElement | null): string => {\n if (!el) return '';\n return el.querySelector('.cinema-logo a')?.attributes.href ?? '';\n};\n\nexport const parseCinema = (el: HTMLElement | null): { city: string; name: string } => {\n const title = el.querySelector('header h2').innerText.trim();\n const [city, name] = title.split(' - ');\n return { city, name };\n};\n\nexport const getGroupedFilmsByDate = (el: HTMLElement | null): CSFDCinemaGroupedFilmsByDate[] => {\n const divs = el.querySelectorAll(':scope > div');\n const getDatesAndFilms = divs\n .map((_, index) => index)\n .filter((index) => index % 2 === 0)\n .map((index) => {\n const [date, films] = divs.slice(index, index + 2);\n const dateText = date?.firstChild?.textContent?.trim() ?? null;\n return { date: dateText, films: getCinemaFilms('', films) };\n });\n\n return getDatesAndFilms;\n};\n\nexport const getCinemaFilms = (date: string, el: HTMLElement | null): CSFDCinemaMovie[] => {\n const filmNodes = el.querySelectorAll('.cinema-table tr');\n\n const films = filmNodes.map((filmNode) => {\n const url = filmNode.querySelector('td.name h3 a')?.attributes.href;\n const id = url ? getCinemaUrlId(url) : null;\n const title = filmNode.querySelector('.name h3')?.text.trim();\n const colorRating = getCinemaColorRating(filmNode.querySelector('.name .icon'));\n const showTimes = filmNode.querySelectorAll('.td-time')?.map((x) => x.textContent.trim());\n const meta = filmNode.querySelectorAll('.td-title span')?.map((x) => x.text.trim());\n\n return {\n id,\n title,\n url,\n colorRating,\n showTimes,\n meta: parseMeta(meta)\n };\n });\n return films;\n};\n\nexport const parseMeta = (meta: string[]): CSFDCinemaMeta[] => {\n const metaConvert: CSFDCinemaMeta[] = [];\n\n for (const element of meta) {\n if (element === 'T') {\n metaConvert.push('subtitles');\n } else if (element === 'D') {\n metaConvert.push('dubbing');\n } else {\n metaConvert.push(element);\n }\n }\n\n return metaConvert;\n};\n"],"mappings":";;;AAMA,MAAa,wBAAwB,OAA4C;CAC/E,MAAMA,UAAoB,IAAI,WAAW,MAAM,IAAI,IAAI,EAAE;CACzD,MAAM,OAAO,QAAQ,SAAS,QAAQ,QAAQ,SAAS,KAAK;AAC5D,QAAO,OAAO,WAAW,KAAe,GAAG;;AAG7C,MAAa,eAAe,OAAmC;AAE7D,QAAO,CADI,IAAI,IAAI,MAAM,IAAI,CAAC;;AAIhC,MAAa,kBAAkB,QAAkD;AAC/E,KAAI,CAAC,IAAK,QAAO;AACjB,QAAO,eAAe,IAAI;;AAG5B,MAAa,mBAAmB,OAAgE;AAC9F,KAAI,CAAC,GAAI,QAAO;CAChB,MAAM,aAAa,GAAG,cAAc,kBAAgB;AACpD,KAAI,CAAC,WAAY,QAAO;CAGxB,MAAM,CAAC,GAAG,UADO,WAAW,aAAa,OAAO,CACnB,MAAM,KAAK;CAExC,MAAM,SAAS,OAAO,MAAM,IAAI;AAChC,KAAI,OAAO,WAAW,EAAG,QAAO;CAEhC,MAAM,MAAM,OAAO,OAAO,GAAG;CAC7B,MAAM,MAAM,OAAO,OAAO,GAAG;AAC7B,KAAI,OAAO,SAAS,IAAI,IAAI,OAAO,SAAS,IAAI,CAC9C,QAAO;EAAE;EAAK;EAAK;AAErB,QAAO;;AAGT,MAAa,gBAAgB,OAAmC;AAC9D,KAAI,CAAC,GAAI,QAAO;AAChB,QAAO,GAAG,cAAc,iBAAiB,EAAE,WAAW,QAAQ;;AAGhE,MAAa,eAAe,OAA2D;CAErF,MAAM,CAAC,MAAM,QADC,GAAG,cAAc,YAAY,CAAC,UAAU,MAAM,CACjC,MAAM,MAAM;AACvC,QAAO;EAAE;EAAM;EAAM;;AAGvB,MAAa,yBAAyB,OAA2D;CAC/F,MAAM,OAAO,GAAG,iBAAiB,eAAe;AAUhD,QATyB,KACtB,KAAK,GAAG,UAAU,MAAM,CACxB,QAAQ,UAAU,QAAQ,MAAM,EAAE,CAClC,KAAK,UAAU;EACd,MAAM,CAAC,MAAM,SAAS,KAAK,MAAM,OAAO,QAAQ,EAAE;AAElD,SAAO;GAAE,MADQ,MAAM,YAAY,aAAa,MAAM,IAAI;GACjC,OAAO,eAAe,IAAI,MAAM;GAAE;GAC3D;;AAKN,MAAa,kBAAkB,MAAc,OAA8C;AAoBzF,QAnBkB,GAAG,iBAAiB,mBAAmB,CAEjC,KAAK,aAAa;EACxC,MAAM,MAAM,SAAS,cAAc,eAAe,EAAE,WAAW;EAC/D,MAAM,KAAK,MAAM,eAAe,IAAI,GAAG;EACvC,MAAM,QAAQ,SAAS,cAAc,WAAW,EAAE,KAAK,MAAM;EAC7D,MAAM,cAAc,qBAAqB,SAAS,cAAc,cAAc,CAAC;EAC/E,MAAM,YAAY,SAAS,iBAAiB,WAAW,EAAE,KAAK,MAAM,EAAE,YAAY,MAAM,CAAC;EACzF,MAAM,OAAO,SAAS,iBAAiB,iBAAiB,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,CAAC;AAEnF,SAAO;GACL;GACA;GACA;GACA;GACA;GACA,MAAM,UAAU,KAAK;GACtB;GACD;;AAIJ,MAAa,aAAa,SAAqC;CAC7D,MAAMC,cAAgC,EAAE;AAExC,MAAK,MAAM,WAAW,KACpB,KAAI,YAAY,IACd,aAAY,KAAK,YAAY;UACpB,YAAY,IACrB,aAAY,KAAK,UAAU;KAE3B,aAAY,KAAK,QAAQ;AAI7B,QAAO"}
|
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 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
|
|
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(\n district: number | string,\n period: CSFDCinemaPeriod,\n optionsRequest?: RequestInit\n ): 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);\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,OACX,UACA,QACA,gBACuB;EACvB,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.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 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
|
|
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(\n district: number | string,\n period: CSFDCinemaPeriod,\n optionsRequest?: RequestInit\n ): 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);\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,OACX,UACA,QACA,gBACuB;EACvB,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
|
@@ -8,7 +8,7 @@ node_html_parser = require_rolldown_runtime.__toESM(node_html_parser);
|
|
|
8
8
|
//#region src/services/cinema.service.ts
|
|
9
9
|
var CinemaScraper = class {
|
|
10
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
|
|
11
|
+
const contentNode = (0, node_html_parser.parse)(await require_index.fetchPage(require_vars.cinemasUrl(district, period), { ...optionsRequest })).querySelectorAll("#snippet--cinemas section[id*=\"cinema-\"]");
|
|
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 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
|
|
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[id*=\"cinema-\"]');\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,6CAA2C;AAE5F,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"}
|
|
@@ -6,7 +6,7 @@ import { parse } from "node-html-parser";
|
|
|
6
6
|
//#region src/services/cinema.service.ts
|
|
7
7
|
var CinemaScraper = class {
|
|
8
8
|
async cinemas(district = 1, period = "today", optionsRequest) {
|
|
9
|
-
const contentNode = parse(await fetchPage(cinemasUrl(district, period), { ...optionsRequest })).querySelectorAll("#snippet--cinemas section
|
|
9
|
+
const contentNode = parse(await fetchPage(cinemasUrl(district, period), { ...optionsRequest })).querySelectorAll("#snippet--cinemas section[id*=\"cinema-\"]");
|
|
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 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
|
|
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[id*=\"cinema-\"]');\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,6CAA2C;AAE5F,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"}
|