node-csfd-api
Version:
ČSFD API in JavaScript. Amazing NPM library for scrapping csfd.cz :)
1 lines • 4.14 kB
Source Map (JSON)
{"version":3,"file":"search.helper.cjs","names":["parseFilmType","parseColor","addProtocol","parseIdFromUrl"],"sources":["../../src/helpers/search.helper.ts"],"sourcesContent":["import { HTMLElement } from 'node-html-parser';\nimport { CSFDColorRating, CSFDFilmTypes } from '../dto/global';\nimport { CSFDMovieCreator } from '../dto/movie';\nimport { CSFDColors } from '../dto/user-ratings';\nimport { addProtocol, parseColor, parseFilmType, parseIdFromUrl } from './global.helper';\n\ntype Creator = 'Režie:' | 'Hrají:';\n\nexport const getSearchType = (el: HTMLElement): CSFDFilmTypes => {\n const type = el.querySelectorAll('.film-title-info .info')[1];\n return parseFilmType(type?.innerText?.replace(/[{()}]/g, '')?.trim() || 'film');\n};\n\nexport const getSearchTitle = (el: HTMLElement): string => {\n return el.querySelector('.film-title-name').text;\n};\n\nexport const getSearchYear = (el: HTMLElement): number => {\n // Optimization: Use querySelector instead of querySelectorAll(...)[0]\n return +el.querySelector('.film-title-info .info')?.innerText.replace(/[{()}]/g, '');\n};\n\nexport const getSearchUrl = (el: HTMLElement): string => {\n return el.querySelector('.film-title-name').attributes.href;\n};\n\nexport const getSearchColorRating = (el: HTMLElement): CSFDColorRating => {\n return parseColor(\n el.querySelector('.article-header i.icon').classNames.split(' ').pop() as CSFDColors\n );\n};\n\nexport const getSearchPoster = (el: HTMLElement): string => {\n const image = el.querySelector('img').attributes.src;\n return addProtocol(image);\n};\n\nexport const getSearchOrigins = (el: HTMLElement): string[] => {\n const originsRaw = el.querySelector('.article-content p .info')?.text;\n if (!originsRaw) return [];\n const originsAll = originsRaw?.split(', ')?.[0];\n return originsAll?.split('/').map((country) => country.trim());\n};\n\nexport const parseSearchPeople = (\n el: HTMLElement,\n type: 'directors' | 'actors'\n): CSFDMovieCreator[] => {\n let who: Creator;\n if (type === 'directors') who = 'Režie:';\n if (type === 'actors') who = 'Hrají:';\n\n const pNodes = el && el.querySelectorAll('.article-content p');\n let peopleNode: HTMLElement | null = null;\n if (pNodes) {\n for (const p of pNodes) {\n if (p.textContent.includes(who)) {\n peopleNode = p;\n break;\n }\n }\n }\n\n if (peopleNode) {\n // Optimization: Avoid Array.from allocation and use direct mapping if possible,\n // though NodeList might require mapping. In our environment querySelectorAll returns an array.\n const people = peopleNode.querySelectorAll('a');\n\n return people.map((person) => {\n return {\n id: parseIdFromUrl(person.attributes.href),\n name: person.innerText.trim(),\n url: `https://www.csfd.cz${person.attributes.href}`\n };\n });\n } else {\n return [];\n }\n};\n"],"mappings":";;AAQA,MAAa,iBAAiB,OAAmC;CAC/D,MAAM,OAAO,GAAG,iBAAiB,wBAAwB,CAAC,CAAC;CAC3D,OAAOA,sBAAAA,cAAc,MAAM,WAAW,QAAQ,WAAW,EAAE,CAAC,EAAE,KAAK,KAAK,MAAM;AAChF;AAEA,MAAa,kBAAkB,OAA4B;CACzD,OAAO,GAAG,cAAc,kBAAkB,CAAC,CAAC;AAC9C;AAEA,MAAa,iBAAiB,OAA4B;CAExD,OAAO,CAAC,GAAG,cAAc,wBAAwB,CAAC,EAAE,UAAU,QAAQ,WAAW,EAAE;AACrF;AAEA,MAAa,gBAAgB,OAA4B;CACvD,OAAO,GAAG,cAAc,kBAAkB,CAAC,CAAC,WAAW;AACzD;AAEA,MAAa,wBAAwB,OAAqC;CACxE,OAAOC,sBAAAA,WACL,GAAG,cAAc,wBAAwB,CAAC,CAAC,WAAW,MAAM,GAAG,CAAC,CAAC,IAAI,CACvE;AACF;AAEA,MAAa,mBAAmB,OAA4B;CAC1D,MAAM,QAAQ,GAAG,cAAc,KAAK,CAAC,CAAC,WAAW;CACjD,OAAOC,sBAAAA,YAAY,KAAK;AAC1B;AAEA,MAAa,oBAAoB,OAA8B;CAC7D,MAAM,aAAa,GAAG,cAAc,0BAA0B,CAAC,EAAE;CACjE,IAAI,CAAC,YAAY,OAAO,CAAC;CAEzB,QADmB,YAAY,MAAM,IAAI,CAAC,GAAG,EAAE,GAC5B,MAAM,GAAG,CAAC,CAAC,KAAK,YAAY,QAAQ,KAAK,CAAC;AAC/D;AAEA,MAAa,qBACX,IACA,SACuB;CACvB,IAAI;CACJ,IAAI,SAAS,aAAa,MAAM;CAChC,IAAI,SAAS,UAAU,MAAM;CAE7B,MAAM,SAAS,MAAM,GAAG,iBAAiB,oBAAoB;CAC7D,IAAI,aAAiC;CACrC,IAAI;OACG,MAAM,KAAK,QACd,IAAI,EAAE,YAAY,SAAS,GAAG,GAAG;GAC/B,aAAa;GACb;EACF;;CAIJ,IAAI,YAKF,OAFe,WAAW,iBAAiB,GAE/B,CAAC,CAAC,KAAK,WAAW;EAC5B,OAAO;GACL,IAAIC,sBAAAA,eAAe,OAAO,WAAW,IAAI;GACzC,MAAM,OAAO,UAAU,KAAK;GAC5B,KAAK,sBAAsB,OAAO,WAAW;EAC/C;CACF,CAAC;MAED,OAAO,CAAC;AAEZ"}