Quotly

by Sanjaya
11 Raw
const axios = require('axios')
const cheerio = require('cheerio')
const FormData = require('form-data')

async function soundcloud(url) {
    try {
        const session = axios.create({ headers: { 'User-Agent': 'Mozilla/5.0' } })
        const { data: homeData, headers } = await session.get('https://soundcloudmp3.org/')
        const cookies = headers['set-cookie']?.map(cookie => cookie.split(';')[0]).join('; ') || ''
        const $ = cheerio.load(homeData)
        const csrf_token = $('input[name="_token"]').val()

        const form = new FormData()
        form.append('url', url)
        form.append('_token', csrf_token)
        form.append('lang', 'en')

        const { data: convertData } = await session.post('https://soundcloudmp3.org/converter', form, {
            headers: { 
                ...form.getHeaders(),
                Cookie: cookies
            }
        })

        const $$ = cheerio.load(convertData)
        const download = $$('#download-btn').attr('href') || ''
        const duration = $$('p:contains("Length")').text().replace('Length:', '').replace('Minutes', '').trim() || ''
        const quality = $$('p:contains("Quality")').text().replace('Quality:', '').trim() || ''

        let title = $$('h2').first().text().trim()
        if (!title || title.includes('While you are waiting')) {
            title = $$('p:contains("Title")').text().replace('Title:', '').trim()
        }

        return { title, duration, quality, download }
    } catch (err) {
        throw Error(err.message)
    }
}