UNPKG

@aidarkezio/main-func

Version:
90 lines (86 loc) • 3.18 kB
import got from 'got' import cheerio from 'cheerio' import { Bioskop, BioskopArgsSchema, BioskopNow, BioskopSchema, BioskopNowSchema } from './types.js' import { ScraperError } from '../utils.js' export async function bioskopNow (): Promise<BioskopNow[]> { const url = 'https://jadwalnonton.com/now-playing/' const response = await got(url, { headers: { Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', Host: 'jadwalnonton.com', Referer: 'https://jadwalnonton.com/now-playing/', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36' } }).text() const results: BioskopNow[] = [] const $ = cheerio.load(response) $('div.row > div.item.movie').each((_, el) => { const $el = $(el) const title = $el.find('h2 > a').text() const img = $el.find('img.poster').attr('src') as string const url = $el.find('a.mojadwal').attr('href') const $span = $el.find('div > span.moket') const genre = $span.eq(0).text() const duration = $span.eq(1).text() const playingAt = ($el.find('div > i.icon').attr('class') || '').replace(/icon/, '').trim() as string if (title && url) { results.push({ title, img, url, genre, duration, playingAt }) } }) if (results.length === 0) throw new ScraperError(`No results for ${url}\n\n${response}`) return results.map(res => BioskopNowSchema.parse(res)) } export async function bioskop (page: number | string = 1): Promise<Bioskop[]> { BioskopArgsSchema.parse(arguments) page = Math.min(4, Math.max(1, parseInt(page as string))) const response = await got( `https://jadwalnonton.com/comingsoon/?page=${page}`, { headers: { Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', Host: 'jadwalnonton.com', Referer: 'https://jadwalnonton.com/comingsoon/', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36' } }).text() const results: Bioskop[] = [] const $ = cheerio.load(response) $('div.row > div.item.movie').each((_, el) => { const $el = $(el) const title = $el.find('h2 > a').text() const img = $el.find('img.poster').attr('src') as string const url = $el.find('a.mojadwal').attr('href') const $span = $el.find('div.rowl > div > span') const genre = $span.eq(0).text() const duration = $span.eq(1).text() const release = $span.eq(2).text() const director = $span.eq(4).text() const cast = $span.eq(6).text() if (title && url) { results.push({ title, img, url, genre, duration, release, director, cast }) } }) if (results.length === 0) throw new ScraperError(`No results for page ${page}\n\n${response}`) return results.map(res => BioskopSchema.parse(res)) }