From f7571b5c7856a69eb4dcc6277ddc583d0f1df54e Mon Sep 17 00:00:00 2001 From: Kaan Yagci Date: Sat, 30 Sep 2023 22:04:25 +0200 Subject: [PATCH] feat: downloader options extended with category baseURL changed to be nullable and this URL will be replaced by url generated using category Signed-off-by: Kaan Yagci --- __tests__/downloader.test.ts | 1 + src/downloader.ts | 13 +++++++++++-- src/index.ts | 14 +++++++------- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/__tests__/downloader.test.ts b/__tests__/downloader.test.ts index 20b2681..f78bbec 100644 --- a/__tests__/downloader.test.ts +++ b/__tests__/downloader.test.ts @@ -4,6 +4,7 @@ const TRACK_URL = 'https://www.chosic.com/download-audio/45401/'; test('Get track details', async () => { const track = await downloadTrack({ + category: undefined, baseURL: TRACK_URL, headless: false, }); diff --git a/src/downloader.ts b/src/downloader.ts index 1397c4c..5014e1b 100644 --- a/src/downloader.ts +++ b/src/downloader.ts @@ -4,6 +4,7 @@ import { tmpdir } from 'os'; import { mkdirSync, createWriteStream, unlink } from 'fs'; import { join } from 'path'; import * as https from 'https'; +const FREE_MUSIC_BASE_URL = 'https://www.chosic.com/free-music'; const ACCEPT_COOKIE_BUTTON_SELECTOR = '//div[contains(@role,"dialog")]//button[contains(@mode, "primary")]'; @@ -24,16 +25,18 @@ const DOWNLOAD_BUTTON_WRAPPER_SELECTOR = `${MAIN_TRACK_SELECTOR}/div[contains(@c const DOWNLOAD_BUTTON_SELECTOR = `${DOWNLOAD_BUTTON_WRAPPER_SELECTOR}/button[contains(@class,"download")]`; const DOWNLOAD_LINK_SELECTOR = '//a[contains(@class,"download2")]'; const DOWNLOADER_TEMP_FOLDER_PREFIX = 'choisic-downloads'; + type DownloaderOptions = { - baseURL: string; + category: string | undefined; headless?: boolean; browser?: Browser | undefined; page?: Page | undefined; bypassCookies?: boolean; downloadFilePath?: string; + baseURL?: string; }; -type DownloaderConfig = Required; +type DownloaderConfig = Required>; export type TrackInfo = { title: string; @@ -215,6 +218,12 @@ async function downloadFile( async function getDownloaderConfig( options: DownloaderOptions, ): Promise { + if (options.baseURL === undefined) { + options.baseURL = FREE_MUSIC_BASE_URL; + } + if (options.category !== undefined) { + options.baseURL = join(options.baseURL, options.category); + } if (options.headless === undefined) { options.headless = true; } diff --git a/src/index.ts b/src/index.ts index 9639fde..20f8182 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,19 +1,19 @@ -import { - cleanDownloader, - downloadTrack, - getTrackLinks, -} from './chosic-downloader'; +import { cleanDownloader, downloadTrack, getTrackLinks } from './downloader'; async function main(headless: boolean) { const { config, trackLinks } = await getTrackLinks({ - baseURL: 'https://www.chosic.com/free-music/lofi', + category: 'lofi', headless: headless, }); await cleanDownloader(config); console.log(`Number of track links: ${trackLinks.length}`); const tracks = []; for (const trackLink of trackLinks) { - const track = await downloadTrack({ baseURL: trackLink, headless }); + const track = await downloadTrack({ + category: undefined, + baseURL: trackLink, + headless, + }); tracks.push(track); } console.debug('Tracks');