const axios = require('axios'); const cheerio = require('cheerio'); async function yt(url, format) { const headers = { "accept": "*/*", "accept-language": "id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7", "sec-ch-ua": "\"Not A(Brand\";v=\"8\", \"Chromium\";v=\"132\"", "sec-ch-ua-mobile": "?1", "sec-ch-ua-platform": "\"Android\"", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "cross-site", "Referer": "https://id.ytmp3.mobi/", "Referrer-Policy": "strict-origin-when-cross-origin" } const initial = await fetch(`https://d.ymcdn.org/api/v1/init?p=y&23=1llum1n471&_=${Math.random()}`, {headers}); format = format || 'mp3'; //mp3 const init = await initial.json(); console.log(init) const id = url.match(/(?:youtu\.be\/|youtube\.com\/(?:.*v=|.*\/|.*embed\/))([^&?/]+)/)?.[1]; let convertURL = init.convertURL + `&v=${id}&f=${format}&_=${Math.random()}`; //console.log(convertURL) const converts = await fetch(convertURL, {headers}); const convert = await converts.json(); //console.log(convert) let info = {}; for (let i = 0; i < 3; i++ ){ let j = await fetch(convert.progressURL, {headers}); info = await j.json(); console.log(info); if (info.progress == 3) break; } return { url: convert.downloadURL }; }; async function tiktok(url) { const { data } = await axios.get(`https://www.tikwm.com/api?url=${url}&hd=1`); if(!data.status !== 0) return { status: false, r: 'error' }; return { status: true, url: data.data.play, hd: data.data.hdplay, audio: data.data.music_info.play }; }; async function instagram(url) { const { data } = await axios.post( 'https://yt1s.io/api/ajaxSearch', new URLSearchParams({ p: 'home', q: url, w: '', lang: 'en' }), { headers: { 'User-Agent': 'Postify/1.0.0', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Accept': 'application/json, text/plain, */*', 'Origin': 'https://yt1s.io', 'Referer': 'https://yt1s.io/' } } ) const $ = cheerio.load(data.data) const rres = []; $('a.abutton.is-success.is-fullwidth.btn-premium') .map((_, el) => { rres.push($(el).attr('href')); }) .get() return { url: rres } } async function threads(url) { try { const apiUrl = `https://snapthreads.net/api/download?url=${encodeURIComponent(url)}`; const response = await axios.get(apiUrl, { headers: { "User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Mobile Safari/537.36", "Referer": "https://snapthreads.net/id", "Accept": "*/*", "X-Requested-With": "XMLHttpRequest" } }); if (response.data && response.data.directLink) { return { success: true, url: response.data.directLink }; } else { return { success: false, r: 'cant find download link' }; } } catch (error) { console.error("Error:", error.response ? error.response.data : error.message); return { success: false, r: error.response ? error.response.data : error.message }; } } async function twitter(url) { try { const formData = new URLSearchParams(); formData.append("q", url); formData.append("lang", "id"); formData.append("cftoken", "JWT.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpcCI6IjE4Mi4xLjEzNS4yMzgiLCJ1cmwiOiJodHRwczovL3guY29tL2dhbGFzYW5zL3N0YXR1cy8xOTAxMTI5MDYyOTU1MDE2Mzk3P3Q9VTgzM0JmSExpUmRYM0NSUDVGOUhrZyZzPTE5IiwibmJmIjoxNzQyMzA0MzI2LCJleHAiOjE3NDIzMDQ2MjYsImlhdCI6MTc0MjMwNDMyNn0.h0GMNpNikiYqJgdhEEA2NN023_5fq5m7Scn31aMqYOo"); const headers = { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "Accept": "*/*", "X-Requested-With": "XMLHttpRequest", "User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Mobile Safari/537.36", "Referer": "https://x2twitter.com/id", }; const response = await axios.post( "https://x2twitter.com/api/ajaxSearch", formData, { headers } ); if (response.data.status !== "ok") { throw new Error("Gagal mengambil data dari server."); } const html = response.data.data; const $ = cheerio?.load(html); let results = []; $(".dl-action a").each((_, el) => { const type = $(el).text().trim(); const downloadUrl = $(el).attr("href"); if (downloadUrl && downloadUrl !== "#") { results.push({ type, url: downloadUrl }); } }); return { success: results.length > 0, url: results }; } catch (error) { return { success: false, r: error.message }; } } module.exports = { yt, tiktok, instagram, threads, twitter };