Livescore
livescore football from https://www.goal.com/id/livescore
7 Juli 20261532 file
livescore.jsjavascript · 85 baris
import axios from 'axios'const _headerGacor = { accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'accept-language': 'id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7', 'user-agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36'}function _urlEdisi(edisi) { return edisi === 'id' ? 'https://www.goal.com/id/livescore' : `https://www.goal.com/${edisi}/live-scores`}async function ambilLivescore(edisi = 'id') { const res = await axios.get(_urlEdisi(edisi), { headers: _headerGacor, timeout: 15000 }) const html = res.data const cocok = html.match(/__NEXT_DATA__" type="application\/json">(.*?)<\/script>/s) if (!cocok) throw new Error('Gagal nemu __NEXT_DATA__, mungkin struktur halaman berubah') const json = JSON.parse(cocok[1]) const liveScores = json?.props?.pageProps?.content?.liveScores if (!liveScores) throw new Error('Gagal nemu data liveScores di __NEXT_DATA__') return liveScores}function _statusIndo(status) { const map = { FIXTURE: 'Belum Mulai', LIVE: 'Berlangsung', FINISHED: 'Selesai', POSTPONED: 'Ditunda', CANCELLED: 'Dibatalkan', HALF_TIME: 'Turun Minum' } return map[status] || status}function _rapikanPertandingan(dataMentah) { return dataMentah.map(grup => ({ kompetisi: grup.competition?.name || '-', kompetisiId: grup.competition?.id || null, area: grup.competition?.area?.name || '-', pertandingan: (grup.matches || []).map(m => ({ id: m.id, status: _statusIndo(m.status), statusMentah: m.status, waktu: m.startDate, venue: m.venue?.name || null, tuanRumah: m.teamA?.name, tandang: m.teamB?.name, skorTuanRumah: m.score?.teamA ?? null, skorTandang: m.score?.teamB ?? null, kartuMerahTuanRumah: m.redCards?.teamA ?? 0, kartuMerahTandang: m.redCards?.teamB ?? 0, periode: m.period || null })) }))}async function getLivescore({ edisi = 'id', raw = false } = {}) { const data = await ambilLivescore(edisi) if (raw) return data return _rapikanPertandingan(data)}if (import.meta.url === `file://${process.argv[1]}`) { const argEdisi = process.argv[2] || 'id' const argRaw = process.argv.includes('--raw') getLivescore({ edisi: argEdisi, raw: argRaw }) .then(hasil => { console.log(JSON.stringify(hasil, null, 2)) }) .catch(err => { console.error('Gagal ambil data:', err.response?.status || err.message) if (err.response?.data) console.error(err.response.data) process.exit(1) })}export { getLivescore, ambilLivescore }README.mdmarkdown · 11 baris
install
npm install axios
Cara Pake Ny
node livescore.js
Semua Data Berasal Dari Website https://www.goal.com/id/livescore
Komentar
Masuk untuk ikut berkomentar.
Belum ada komentar.