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)
}
}