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

Raw
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 };