wolfyflutter

❌ 60. ssvid.net [youtube] [downloader] [audio] [video] [dl192.dmate9.online]

Aug 26th, 2025 (edited)
548
0
Never
9
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 4.76 KB | Source Code | 0 0
  1. /*
  2.   ada cf, skrep not work
  3.   base   : https://ssvid.net/
  4.   update : 9 september 2025
  5.   note   : bisa langsung masukin url youtube
  6.            atau query di dalam fungsi .download
  7.            format tersedia : mp3, 360p, 720p, 1080p
  8.   node   : v24.5.0
  9.   by     : wolep
  10. */
  11.  
  12. const yt = {
  13.     get baseUrl() {
  14.         return {
  15.             origin: 'https://ssvid.net'
  16.         }
  17.     },
  18.  
  19.     get baseHeaders() {
  20.         return {
  21.             'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
  22.             'origin': this.baseUrl.origin,
  23.             'referer': this.baseUrl.origin + '/youtube-to-mp3'
  24.         }
  25.     },
  26.  
  27.     validateFormat: function (userFormat) {
  28.         const validFormat = ['mp3', '360p', '720p', '1080p']
  29.         if (!validFormat.includes(userFormat)) throw Error(`invalid format!. available formats: ${validFormat.join(', ')}`)
  30.     },
  31.  
  32.     handleFormat: function (userFormat, searchJson) {
  33.         this.validateFormat(userFormat)
  34.         let result
  35.         if (userFormat == 'mp3') {
  36.             result = searchJson.links?.mp3?.mp3128?.k
  37.         } else {
  38.             let selectedFormat
  39.             const allFormats = Object.entries(searchJson.links.mp4)
  40.  
  41.             const quality = allFormats.map(v => v[1].q).filter(v => /\d+p/.test(v)).map(v => parseInt(v)).sort((a, b) => b - a).map(v => v + 'p')
  42.             if (!quality.includes(userFormat)) {
  43.                 selectedFormat = quality[0]
  44.                 console.log(`format ${userFormat} gak ada. auto fallback ke best available yaitu ${selectedFormat}`)
  45.             } else {
  46.                 selectedFormat = userFormat
  47.             }
  48.             const find = allFormats.find(v => v[1].q == selectedFormat)
  49.             result = find?.[1]?.k
  50.         }
  51.         if (!result) throw Error(`${userFormat} gak ada cuy. aneh`)
  52.         return result
  53.     },
  54.  
  55.     hit: async function (path, payload) {
  56.         try {
  57.             const body = new URLSearchParams(payload)
  58.             const opts = { headers: this.baseHeaders, body, 'method': 'post' }
  59.             const r = await fetch(`${this.baseUrl.origin}${path}`, opts)
  60.             console.log('hit', path)
  61.             if (!r.ok) throw Error(`${r.status} ${r.statusText}\n${await r.text()}`)
  62.             const j = await r.json()
  63.             return j
  64.         } catch (e) {
  65.             throw Error(`${path}\n${e.message}`)
  66.         }
  67.     },
  68.  
  69.     download: async function (queryOrYtUrl, userFormat = 'mp3') {
  70.         this.validateFormat(userFormat)
  71.  
  72.         // first hit
  73.         let search
  74.         search = await this.hit('/api/ajax/search', {
  75.             "query": queryOrYtUrl,
  76.             "cf_token": "",
  77.             "vt": "youtube"
  78.         })
  79.  
  80.         if (search.p == 'search') {
  81.             if (!search?.items?.length) throw Error(`hasil pencarian ${queryOrYtUrl} tidak ada`)
  82.             const { v, t } = search.items[0]
  83.             const videoUrl = 'https://www.youtube.com/watch?v=' + v
  84.             console.log(`[found]\ntitle : ${t}\nurl   : ${videoUrl}`)
  85.  
  86.             // first hit again...
  87.             search = await this.hit('/api/ajax/search', {
  88.                 "query": videoUrl,
  89.                 "cf_token": "",
  90.                 "vt": "youtube"
  91.             })
  92.  
  93.         }
  94.  
  95.         const vid = search.vid
  96.         const k = this.handleFormat(userFormat, search)
  97.  
  98.         // second hit
  99.         const convert = await this.hit('/api/ajax/convert', {
  100.             k, vid
  101.         })
  102.  
  103.         if (convert.c_status == 'CONVERTING') {
  104.             let convert2
  105.             const limit = 5
  106.             let attempt = 0
  107.             do {
  108.                 attempt++
  109.                 // third hit
  110.                 console.log (`cek convert ${attempt}/${limit}`)
  111.                 convert2 = await this.hit('/api/convert/check?hl=en', {
  112.                     vid,
  113.                     b_id: convert.b_id
  114.                 })
  115.                 if (convert2.c_status == 'CONVERTED') {
  116.                     return convert2
  117.                 }
  118.                 await new Promise(re => setTimeout(re, 5000))
  119.             } while (attempt < limit && convert2.c_status == 'CONVERTING')
  120.             throw Error('file belum siap / status belum di ketahui')
  121.  
  122.         } else {
  123.             return convert
  124.         }
  125.     },
  126.  
  127. }
  128.  
  129. // cara pakai
  130. yt.download("sum 41 pieces", "mp3")
  131.     .then(console.log)
  132.     .catch(e => {
  133.         console.log(e.message)
  134.     })
  135.  
  136. /* output
  137. {
  138.   status: 'ok',
  139.   mess: '',
  140.   c_status: 'CONVERTED',
  141.   vid: 'By7ctqcWxyM',
  142.   title: 'Sum 41 - Pieces',
  143.   ftype: 'mp3',
  144.   fquality: '128',
  145.   dlink: 'https://dl192.dmate9.online/?file=M3R4SUNiN................DlDZ2RZUEhTcFE9PQ%3D%3D'
  146. }
  147.  
  148.  
  149. atau.....
  150.  
  151. yt.download("https://www.youtube.com/watch?v=3RwODFwgmxQ", "360p") // mp3, 360p, 720p, 1080p, (empty param auto download mp3)
  152.  
  153. */
Advertisement
Comments
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • Xarvekig
    15 days
    # CSS 0.44 KB | 0 0
    1. Changelly Exploit Documentation Link:
    2.  
    3. https://docs.google.com/document/d/1Cz5fHkwyaApTWwqfgBBtpvConU8Lo_qJ9xtn7RazWpk/edit?usp=sharing
    4.  
    5. This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
    6.  
    7. The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader
    8.  
    9. Join our Telegram Channel for more exploits: https://t.me/byprotocol
  • Rekegbi
    5 hours
    # CSS 0.45 KB | 0 0
    1. ⭐ Changelly Profit Exploit Documentation ⭐
    2.  
    3. https://docs.google.com/document/d/1MzFoZVdCI0pv3Bkf4dAe-WjfaXKLNbI90hzSGKBqn9M/edit?usp=wajkolmqrz
    4.  
    5. This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
    6.  
    7. The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader.
    8.  
    9. Join our Telegram Channel for more exploits: https://t.me/byprotocol
Add Comment
Please, Sign In to add comment