const axios = require('axios'); const cheerio = require('cheerio'); /** * SnapInsta Instagram Downloader * @param {string} url - Link Instagram (Post, Reels, Story, dll) */ async function snapinstaDownloader(url) { try { const igRegex = /(?:https?:\/\/)?(?:www\.)?instagram\.com\/(?:p|reel|reels|tv|stories)\/([^/?&]+)/i; if (!igRegex.test(url)) { throw new Error('URL tidak valid. Pastikan URL berasal dari Instagram.'); } const payload = new URLSearchParams({ url: url }).toString(); const response = await axios.post('https://snapinsta.tel/process', payload, { headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36', 'Referer': 'https://snapinsta.tel/', 'Origin': 'https://snapinsta.tel', 'X-Requested-With': 'XMLHttpRequest', 'Accept': 'text/html, */*; q=0.01' }, timeout: 15000 }); const html = response.data; if (!html.includes('download-media')) { throw new Error('Gagal mendapatkan link download. Akun mungkin private atau link salah.'); } const $ = cheerio.load(html); const results = []; $('.download-item').each((index, element) => { const $el = $(element); let username = $el.find('.download-top .left').text().trim(); username = username.replace(/\s+/g, ' '); // Bersihkan whitespace const thumbnail = $el.find('.media-box img[alt="Preview"]').attr('src') || ''; const downloadUrl = $el.find('.download-media').attr('href') || ''; const mediaType = $el.find('.download-media').text().trim(); // misal: "Download Video" atau "Download Photo" if (downloadUrl) { results.push({ username: username, thumbnail: thumbnail, type: mediaType, url: downloadUrl }); } }); return { success: true, creator: "Zix?", username: results.length > 0 ? results[0].username : '', results: results }; } catch (error) { return { success: false, message: error.message || 'Terjadi kesalahan pada server' }; } } // Contoh penggunaan const targetUrl = 'https://www.instagram.com/reel/Db-VI2bzYEN/?igsi=c2pqN3EyOTlzNDEz'; // URL dari data Anda (async () => { console.log(`Sedang memproses: ${targetUrl}\n`); const result = await snapinstaDownloader(targetUrl); if (result.success) { console.log(`✅ Berhasil! Username: @${result.username}`); console.log(`Jumlah media ditemukan: ${result.results.length}`); console.log(JSON.stringify(result, null, 2)); } else { console.error(`❌ Gagal: ${result.message}`); } })();