Created downloadURLs population method in scraper.

This commit is contained in:
moonstar-x 2021-06-12 01:05:54 -05:00
parent 48132155f8
commit ab65c9f15a
4 changed files with 30 additions and 12 deletions

View File

@ -1,9 +1,7 @@
const { JdownloaderClient: Client, JdownloaderClient } = require('jdownloader-client-yaac'); const { JdownloaderClient: Client, JdownloaderClient } = require('jdownloader-client-yaac');
const Logger = require('../utils/Logger'); const Logger = require('../utils/Logger');
const Utils = require('../utils/Utils'); const Utils = require('../utils/Utils');
const { FatalError, JDownloaderError } = require('../../errors'); const { JDownloaderError } = require('../../errors');
const Show = require('../media/Show');
const Movie = require('../media/Movie');
const Media = require('../media/Media'); const Media = require('../media/Media');
class JDownloaderClient { class JDownloaderClient {
@ -20,7 +18,7 @@ class JDownloaderClient {
async addLinks(media) { async addLinks(media) {
if (!(media instanceof 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, { await this.client.linkgrabberV2.addLinks(this.device.id, {
@ -58,7 +56,7 @@ class JDownloaderClient {
getRenamedCrawledLinks(crawledLinks, media) { getRenamedCrawledLinks(crawledLinks, media) {
if (!(media instanceof 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) => { return crawledLinks.map((link) => {

View File

@ -1,7 +1,9 @@
const Logger = require('../utils/Logger'); const Logger = require('../utils/Logger');
const Utils = require('../utils/Utils');
const { ScraperError } = require('../../errors'); const { ScraperError } = require('../../errors');
const Show = require('../media/Show'); const Show = require('../media/Show');
const Movie = require('../media/Movie'); const Movie = require('../media/Movie');
const Media = require('../media/Media');
class KissAsianScraper { class KissAsianScraper {
constructor(page) { constructor(page) {
@ -71,6 +73,19 @@ class KissAsianScraper {
return new Movie(name, year, mediaURLs); 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) { async directlyVisitPlayerURL(playerURL) {
await this.page.goto(`${playerURL}&s=mp`); await this.page.goto(`${playerURL}&s=mp`);
await this.page.waitForSelector(KissAsianScraper.DEFAULTS.SITE_SELECTOR); await this.page.waitForSelector(KissAsianScraper.DEFAULTS.SITE_SELECTOR);

View File

@ -1,9 +1,11 @@
class Utils { class Utils {
static async mapSeries(iterable, action) { static async mapSeries(iterable, action) {
const resolved = [];
for (const x of iterable) { for (const x of iterable) {
await action(x); resolved.push(await action(x));
} }
return Promise.resolve(); return Promise.resolve(resolved);
} }
static wait(duration) { static wait(duration) {

View File

@ -3,6 +3,7 @@ const StealthPlugin = require('puppeteer-extra-plugin-stealth');
const AdBlockerPlugin = require('puppeteer-extra-plugin-adblocker'); const AdBlockerPlugin = require('puppeteer-extra-plugin-adblocker');
const ArgsParser = require('./classes/utils/ArgsParser'); const ArgsParser = require('./classes/utils/ArgsParser');
const KissAsianScraper = require('./classes/scraping/KissAsianScraper'); const KissAsianScraper = require('./classes/scraping/KissAsianScraper');
const JDownloaderClient = require('./classes/download/JDownloaderClient');
const credentials = require('../data/credentials.json'); const credentials = require('../data/credentials.json');
const args = new ArgsParser().parse(process.argv.slice(2)); const args = new ArgsParser().parse(process.argv.slice(2));
@ -13,15 +14,17 @@ puppeteer.use(AdBlockerPlugin({ blockTrackers: true }));
const main = async() => { const main = async() => {
const browser = await puppeteer.launch({ headless: !args.display, slowMo: 250 }); const browser = await puppeteer.launch({ headless: !args.display, slowMo: 250 });
const page = await browser.newPage(); 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.load();
await scraper.authenticate(credentials.kissasian); await scraper.authenticate(credentials.kissasian);
const data = await scraper.getMediaData('https://kissasian.li/Drama/My-Roommate-is-a-Gumiho'); const media = await scraper.getMediaData('https://kissasian.li/Drama/My-Roommate-is-a-Gumiho');
await scraper.directlyVisitPlayerURL(data.mediaURLs[0]);
await scraper.populateMediaDownloadURLs(media);
console.log(await scraper.getDownloadLinkForCurrentPlayer());
}; };
main(); main();