import { Router } from 'express' import { scraperMap, scraperList } from '../scrapers/index.js' const router = Router() // GET /api/scraper?site=kompas&q=keyword&limit=10 router.get('/', async (req, res) => { const { site, q, limit = 10 } = req.query if (!site) { return res.json({ status : false, error : "Parameter 'site' wajib diisi", available: scraperList }) } if (!q) { return res.json({ status: false, error: "Parameter 'q' (keyword) wajib diisi" }) } const fn = scraperMap[site.toLowerCase()] if (!fn) { return res.json({ status : false, error : `Scraper '${site}' tidak ditemukan`, available: scraperList }) } const result = await fn(q, parseInt(limit)) res.json(result) }) // GET /api/scraper/list — daftar semua scraper router.get('/list', (_, res) => { res.json({ status: true, scrapers: scraperList }) }) // GET /api/scraper/all?q=keyword&limit=5 — jalanin semua scraper sekaligus router.get('/all', async (req, res) => { const { q, limit = 5 } = req.query if (!q) return res.json({ status: false, error: "Parameter 'q' wajib diisi" }) const results = await Promise.allSettled( scraperList.map(site => scraperMap[site](q, parseInt(limit))) ) const data = results.map((r, i) => r.status === 'fulfilled' ? r.value : { status: false, source: scraperList[i], error: r.reason?.message } ) const merged = data.flatMap(r => r.data ?? []) res.json({ status : true, total : merged.length, sources : data.map(r => ({ source: r.source, total: r.total ?? 0, ok: r.status })), data : merged }) }) export default router