diff --git a/src/classes/download/JDownloaderClient.js b/src/classes/download/JDownloaderClient.js index 990710a..38f1bbb 100644 --- a/src/classes/download/JDownloaderClient.js +++ b/src/classes/download/JDownloaderClient.js @@ -1,9 +1,7 @@ const { JdownloaderClient: Client, JdownloaderClient } = require('jdownloader-client-yaac'); const Logger = require('../utils/Logger'); const Utils = require('../utils/Utils'); -const { FatalError, JDownloaderError } = require('../../errors'); -const Show = require('../media/Show'); -const Movie = require('../media/Movie'); +const { JDownloaderError } = require('../../errors'); const Media = require('../media/Media'); class JDownloaderClient { @@ -20,7 +18,7 @@ class JDownloaderClient { async addLinks(media) { if (!(media instanceof Media)) { - throw new FatalError('Invalid Media instance passed to downloader!'); + throw new TypeError('Invalid Media instance passed to downloader!'); } await this.client.linkgrabberV2.addLinks(this.device.id, { @@ -58,7 +56,7 @@ class JDownloaderClient { getRenamedCrawledLinks(crawledLinks, media) { if (!(media instanceof Media)) { - throw new FatalError('Invalid Media instance passed to downloader!'); + throw new TypeError('Invalid Media instance passed to downloader!'); } return crawledLinks.map((link) => { diff --git a/src/classes/scraping/KissAsianScraper.js b/src/classes/scraping/KissAsianScraper.js index 78200f5..8200238 100644 --- a/src/classes/scraping/KissAsianScraper.js +++ b/src/classes/scraping/KissAsianScraper.js @@ -1,7 +1,9 @@ const Logger = require('../utils/Logger'); +const Utils = require('../utils/Utils'); const { ScraperError } = require('../../errors'); const Show = require('../media/Show'); const Movie = require('../media/Movie'); +const Media = require('../media/Media'); class KissAsianScraper { constructor(page) { @@ -71,6 +73,19 @@ class KissAsianScraper { return new Movie(name, year, mediaURLs); } + async populateMediaDownloadURLs(media) { + if (!(media instanceof Media)) { + throw new TypeError('Invalid Media instance passed to scraper!'); + } + + const downloadURLs = await Utils.mapSeries(media.mediaURLs, async(mediaURL) => { + await this.directlyVisitPlayerURL(mediaURL); + return this.getDownloadLinkForCurrentPlayer(); + }); + + media.setDownloadURLs(downloadURLs); + } + async directlyVisitPlayerURL(playerURL) { await this.page.goto(`${playerURL}&s=mp`); await this.page.waitForSelector(KissAsianScraper.DEFAULTS.SITE_SELECTOR); diff --git a/src/classes/utils/Utils.js b/src/classes/utils/Utils.js index 952f387..7fc3165 100644 --- a/src/classes/utils/Utils.js +++ b/src/classes/utils/Utils.js @@ -1,9 +1,11 @@ class Utils { static async mapSeries(iterable, action) { + const resolved = []; + for (const x of iterable) { - await action(x); + resolved.push(await action(x)); } - return Promise.resolve(); + return Promise.resolve(resolved); } static wait(duration) { diff --git a/src/index.js b/src/index.js index 56a1665..0cbe7ee 100644 --- a/src/index.js +++ b/src/index.js @@ -3,6 +3,7 @@ const StealthPlugin = require('puppeteer-extra-plugin-stealth'); const AdBlockerPlugin = require('puppeteer-extra-plugin-adblocker'); const ArgsParser = require('./classes/utils/ArgsParser'); const KissAsianScraper = require('./classes/scraping/KissAsianScraper'); +const JDownloaderClient = require('./classes/download/JDownloaderClient'); const credentials = require('../data/credentials.json'); const args = new ArgsParser().parse(process.argv.slice(2)); @@ -13,15 +14,17 @@ puppeteer.use(AdBlockerPlugin({ blockTrackers: true })); const main = async() => { const browser = await puppeteer.launch({ headless: !args.display, slowMo: 250 }); const page = await browser.newPage(); - const scraper = new KissAsianScraper(page); + const scraper = new KissAsianScraper(page); + const downloader = new JDownloaderClient(credentials.jdownloader); + + await downloader.load(); await scraper.load(); await scraper.authenticate(credentials.kissasian); - const data = await scraper.getMediaData('https://kissasian.li/Drama/My-Roommate-is-a-Gumiho'); - await scraper.directlyVisitPlayerURL(data.mediaURLs[0]); - - console.log(await scraper.getDownloadLinkForCurrentPlayer()); + const media = await scraper.getMediaData('https://kissasian.li/Drama/My-Roommate-is-a-Gumiho'); + + await scraper.populateMediaDownloadURLs(media); }; main();