Isla Chan - Sharing
Isla Chan - Sharing
June 12, 2025 at 11:23 PM
/* *[ Fitur Douyin ]* Search - Down Type case Janlup foll 🐥 https://whatsapp.com/channel/0029VadfVP5ElagswfEltW0L */ case 'douyin': { const axios = require('axios'); const cheerio = require('cheerio'); const qs = require('qs'); const vm = require('vm'); const [subcmd, ...args] = text.split(' '); const query = args.join(' ').trim(); if (!subcmd) return m.reply(`Gunakan format:\n> *douyin search *\n> *douyin down *`); if (subcmd.toLowerCase() === 'search') { if (!query) return m.reply('Masukkan kata kunci pencarian!\nContoh: douyin search fifty fifty'); const DouyinSearchPage = class { constructor() { this.baseURL = 'https://so.douyin.com/'; this.defaultParams = { search_entrance: 'aweme', enter_method: 'normal_search', innerWidth: '431', innerHeight: '814', reloadNavStart: String(Date.now()), is_no_width_reload: '1', keyword: '', }; this.cookies = {}; this.api = axios.create({ baseURL: this.baseURL, headers: { 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8', 'accept-language': 'id-ID,id;q=0.9', 'referer': 'https://so.douyin.com/', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36', } }); this.api.interceptors.response.use(res => { const setCookies = res.headers['set-cookie']; if (setCookies) { setCookies.forEach(c => { const [name, value] = c.split(';')[0].split('='); if (name && value) this.cookies[name] = value; }); } return res; }); this.api.interceptors.request.use(config => { if (Object.keys(this.cookies).length) { config.headers['Cookie'] = Object.entries(this.cookies).map(([k, v]) => `${k}=${v}`).join('; '); } return config; }); } async initialize() { try { await this.api.get('/'); return true; } catch { return false; } } async search({ query }) { await this.initialize(); const params = { ...this.defaultParams, keyword: query, reloadNavStart: String(Date.now()) }; const res = await this.api.get('s', { params }); const $ = cheerio.load(res.data); let scriptWithData = ''; $('script').each((_, el) => { const text = $(el).html(); if (text.includes('let data =') && text.includes('"business_data":')) { scriptWithData = text; } }); const match = scriptWithData.match(/let\s+data\s*=\s*(\{[\s\S]+?\});/); if (!match) throw 'Data tidak ditemukan di halaman.'; const dataCode = `data = ${match[1]}`; const sandbox = {}; vm.createContext(sandbox); vm.runInContext(dataCode, sandbox); const awemeInfos = sandbox.data?.business_data ?.map(entry => entry?.data?.aweme_info) .filter(Boolean); return awemeInfos; } }; try { const douyin = new DouyinSearchPage(); const results = await douyin.search({ query }); if (!results.length) return m.reply('Tidak ditemukan hasil.'); const message = results.slice(0, 5).map((v, i) => { return `*${i + 1}.* ${v.desc || 'Tanpa deskripsi'}\n👤: ${v.author?.nickname}\n❤️: ${v.statistics?.digg_count} | 💬: ${v.statistics?.comment_count}\n🔗: https://www.douyin.com/video/${v.aweme_id}`; }).join('\n\n'); m.reply(message); } catch (err) { console.error(err); m.reply('❌ Gagal mengambil hasil pencarian Douyin.'); } return; } if (subcmd.toLowerCase() === 'down') { if (!query.startsWith('http')) return m.reply('Masukkan URL Douyin!\nContoh: douyin down https://v.douyin.com/iPX4EBFY/'); async function douyinDownload(url) { const postData = qs.stringify({ q: url, lang: 'id', cftoken: '' }); const response = await axios.post( 'https://tikvideo.app/api/ajaxSearch', postData, { headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Accept': '*/*', 'X-Requested-With': 'XMLHttpRequest' } } ); if (response.data.status !== 'ok') throw new Error('Gagal mendapatkan data video.'); const html = response.data.data; const $ = cheerio.load(html); const results = []; $('.tik-video').each((i, elem) => { const title = $(elem).find('.thumbnail .content h3').text().trim(); const duration = $(elem).find('.thumbnail .content p').first().text().trim(); const thumbnail = $(elem).find('.thumbnail img').attr('src'); const downloadLinks = []; $(elem).find('.dl-action a').each((j, link) => { downloadLinks.push({ title: $(link).text().trim(), url: $(link).attr('href') }); }); results.push({ title, duration, thumbnail, downloadLinks }); }); return results; } try { const results = await douyinDownload(query); if (!results.length) return m.reply('Video tidak ditemukan atau tidak bisa diambil.'); const video = results[0]; let caption = `*🎬 Judul:* ${video.title}\n*⏱ Durasi:* ${video.duration}\n\n`; caption += '*🔗 Link Download:*\n'; for (const dl of video.downloadLinks) { caption += `- ${dl.title}: ${dl.url}\n`; } const videoLink = video.downloadLinks.find(dl => /mp4/i.test(dl.title)); const musicLink = video.downloadLinks.find(dl => /mp3/i.test(dl.title)); if (videoLink) { await conn.sendMessage(m.chat, { video: { url: videoLink.url }, caption: caption }, { quoted: m }); } else { await conn.sendMessage(m.chat, { image: { url: video.thumbnail }, caption: caption }, { quoted: m }); } if (musicLink) { await conn.sendMessage(m.chat, { audio: { url: musicLink.url }, mimetype: 'audio/mpeg', fileName: `${video.title}.mp3` }, { quoted: m }); } } catch (err) { console.error(err); m.reply('❌ Gagal mengambil data Douyin.'); } return; } m.reply(`Subcommand tidak valid!\nGunakan:\n- *douyin search *\n- *douyin down *`); } break

Comments