@aidarkezio/main-func
Version:
📦 It has my funcs
82 lines (77 loc) • 2.61 kB
text/typescript
import cheerio from 'cheerio'
import got from 'got'
import didyoumean from '../tools/didyoumean.js'
import { ScraperError } from '../utils.js'
import {
JadwalSholat,
JadwalSholatArgsSchema,
JadwalSholatItem,
JadwalSholatItemSchema,
JadwalSholatSchema
} from './types.js'
export const listJadwalSholat: Promise<JadwalSholatItem[]> = (async () => got('https://raw.githubusercontent.com/BochilTeam/scraper/master/data/jadwal-sholat.json').json<JadwalSholatItem[]>())()
export default async function jadwalsholat (
kota: string
): Promise<JadwalSholat> {
JadwalSholatArgsSchema.parse(arguments)
const listJadwal: JadwalSholatItem[] = await listJadwalSholat
const cities = listJadwal.map(item => item.kota)
const prediction = didyoumean(kota, cities)
const precisionPredection = didyoumean(kota, cities, { threshold: 0.85 })[0]
if (!precisionPredection) {
throw new ScraperError(
`Did you mean ${prediction.map(item => item.query).join(', ')}?\n\nList of cities: ${cities.join(', ')}`
)
}
const jadwal = listJadwal[precisionPredection.index]
JadwalSholatItemSchema.parse(jadwal)
const today = await got(
`https://www.jadwalsholat.org/adzan/ajax/ajax.daily1.php?id=${jadwal.value}`
).text()
const sholatToday: JadwalSholat['today'] = {}
const $ = cheerio.load(today)
$('table > tbody > tr')
.filter('.table_light, .table_dark')
.each(function () {
const el = $(this).find('td')
const sholat = el.eq(0).text()
const time = el.eq(1).text()
sholatToday[sholat] = time
})
const data = await got(
`https://jadwalsholat.org/jadwal-sholat/monthly.php?id=${jadwal.value}`
).text()
const list: JadwalSholat['list'] = []
const $$ = cheerio.load(data)
$$('table.table_adzan > tbody > tr')
.filter('.table_light, .table_dark')
.each(function () {
const el = $$(this).find('td')
const date = el.eq(0).text().trim()
const imsyak = el.eq(1).text().trim()
const shubuh = el.eq(2).text().trim()
const terbit = el.eq(3).text().trim()
const dhuha = el.eq(4).text().trim()
const dzuhur = el.eq(5).text().trim()
const ashr = el.eq(6).text().trim()
const magrib = el.eq(7).text().trim()
const isyak = el.eq(8).text().trim()
list.push({
date,
imsyak,
shubuh,
terbit,
dhuha,
dzuhur,
ashr,
magrib,
isyak
})
})
const result = {
date: $$('tr.table_title > td > h2.h2_edit').text().trim(),
today: sholatToday,
list
}
return JadwalSholatSchema.parse(result)
}