@aidarkezio/main-func
Version:
📦 It has my funcs
90 lines (86 loc) • 3.18 kB
text/typescript
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))
}