UNPKG

smule

Version:

A complete media downloader for smule.com

107 lines (92 loc) 2.98 kB
#!/usr/bin/env node 'use strict'; const os = require('os'); const fs = require('fs'); const dns = require('dns'); const https = require('follow-redirects').https; const fse = require('fs-extra'); const got = require('got'); const ora = require('ora'); const logUpdate = require('log-update'); const chalk = require('chalk'); const isURL = require('is-url'); const updateNotifier = require('update-notifier'); const pkg = require('./package.json'); updateNotifier({pkg}).notify(); const spinner = ora(); const fallArg = process.argv[2]; const pre = chalk.red('✘'); const getIn = `${os.homedir()}/Smule/`; if (!fallArg || fallArg === '-h' || fallArg === '--help') { console.log(` ${chalk.cyan('Usage')} : smule <source> ${chalk.cyan('Command')} : -v, --version : show version -f, --fun : no spoiler -h, --help : for help ${chalk.cyan('Example')} : $ smule <source> : auto detect the filetype and download `); process.exit(1); } if (fallArg === '-v' || fallArg === '--version') { console.log(`\n${chalk.cyan(' Current version ')} : ${pkg.version}\n`); process.exit(1); } if (fallArg === '-f' || fallArg === '--fun') { console.log(`\n “How do I have productive days with minimum drama? \n Simple; I mind my own business.” \n`); process.exit(1); } const songName = arg => { return arg.split('/')[4]; }; if (isURL(fallArg) === true) { dns.lookup('smule.com', err => { if (err) { logUpdate(`\n ${pre} ${chalk.dim('Please check your internet connection\n')}`); process.exit(1); } else { logUpdate(); spinner.text = `${chalk.dim('Smuling...')}`; spinner.start(); got(fallArg).then(res => { const $ = res.body; const mediaType = $.split(`twitter:player:stream:content_type" content="`)[1].split('">')[0].replace('/mp4', ''); const mediaSource = $.split(`twitter:player:stream" content="`)[1].split('">')[0]; const fetchMainSource = mediaSource.replace(/amp;/g, ''); logUpdate(); spinner.text = chalk.dim('Fetching downloadable link'); fse.ensureDir(getIn, err => { if (err) { process.exit(1); } }); let saveMedia; if (mediaType === 'audio') { saveMedia = fs.createWriteStream(getIn + `${(songName(fallArg))}.m4a`); } else { saveMedia = fs.createWriteStream(getIn + `${(songName(fallArg))}.mp4`); } https.get(fetchMainSource, (res, cb) => { logUpdate(); spinner.text = chalk.dim(`Downloading ${mediaType}. Please wait...`); res.pipe(saveMedia); saveMedia.on('finish', () => { spinner.stop(); logUpdate(`\n ${chalk.green('✔')} Downloading finished! \n`); saveMedia.close(cb); }); }); }).catch(err => { if (err) { logUpdate(`\n ${pre} ${chalk.dim('Broken link or maybe the song has been removed!')}\n`); spinner.stop(); process.exit(1); } }); } }); } else { logUpdate(`\n ${pre} ${chalk.dim('Please enter a valid URL.')} \n`); process.exit(1); }