Kembali ke ArsipScraper
S
@saurus
Published 7 hours ago
javascript
am preset finder
kode scraper untuk menemukan preset alight motion hanya dari link tiktok dan dicek komentar bserta deksripsi untuk menemukkannya
javascript· 100 lines
const axios = require('axios'); const BASE = 'https://amfinder.web.id';const ENDPOINT = `${BASE}/api/find`; async function findPreset(tiktokUrl, opts = {}) { const { bat = 44, chg = 0 } = opts; const params = new URLSearchParams({ url: tiktokUrl, bat: String(bat), chg: String(chg), }); const res = await axios.get(`${ENDPOINT}?${params.toString()}`, { headers: { accept: 'text/event-stream', 'accept-language': 'en-US,en;q=0.9,id;q=0.8', 'cache-control': 'no-cache', pragma: 'no-cache', referer: `${BASE}/`, 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ' + '(KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36', }, responseType: 'stream', timeout: 120000, validateStatus: () => true, }); if (res.status !== 200) { throw new Error(`HTTP ${res.status}`); } let buffer = ''; let result = null; return new Promise((resolve, reject) => { res.data.on('data', (chunk) => { buffer += chunk.toString('utf8'); let idx; while ((idx = buffer.indexOf('\n\n')) !== -1) { const rawEvent = buffer.slice(0, idx); buffer = buffer.slice(idx + 2); const { event, data } = parseSseBlock(rawEvent); if (!event) continue; if (event === 'result') { try { result = JSON.parse(data); } catch (e) { return reject(new Error('Gagal parse event result: ' + e.message)); } } else if (event === 'error') { return reject(new Error(data)); } } }); res.data.on('end', () => { if (!result) return reject(new Error('Stream selesai tanpa event result')); resolve(result); }); res.data.on('error', reject); });} function parseSseBlock(block) { let event = null; const dataLines = []; for (const line of block.split('\n')) { if (line.startsWith('event:')) { event = line.slice(6).trim(); } else if (line.startsWith('data:')) { dataLines.push(line.slice(5).replace(/^ /, '')); } } return { event, data: dataLines.join('\n') };} if (require.main === module) { const url = process.argv[2] || 'https://www.tiktok.com/@danxasliii/video/7684572768637046017?is_from_webapp=1&sender_device=pc'; findPreset(url) .then((r) => { process.stdout.write(JSON.stringify(r, null, 2) + '\n'); }) .catch((e) => { process.stdout.write(JSON.stringify({ ok: false, error: e.message }, null, 2) + '\n'); process.exit(1); });} module.exports = { findPreset, parseSseBlock };