From 707ba88167a13f96a02954db3d43d0be6a2179c5 Mon Sep 17 00:00:00 2001 From: moonstar-x Date: Fri, 11 Jun 2021 22:44:51 -0500 Subject: [PATCH] Scrape now identifies movies and shows. --- src/classes/media/Movie.js | 13 +++++++++ src/classes/media/Show.js | 14 +++++++++ src/classes/scraping/KissAsianScraper.js | 37 ++++++++++++++++++++---- src/index.js | 4 +-- 4 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 src/classes/media/Movie.js create mode 100644 src/classes/media/Show.js diff --git a/src/classes/media/Movie.js b/src/classes/media/Movie.js new file mode 100644 index 0000000..4f24b9d --- /dev/null +++ b/src/classes/media/Movie.js @@ -0,0 +1,13 @@ +class Movie { + constructor(name, mediaURLs) { + this.name = name; + this.mediaURLs = mediaURLs; + this.downloadURLs = []; + } + + setDownloadURLs(downloadURLs) { + this.downloadURLs = downloadURLs; + } +} + +module.exports = Movie; diff --git a/src/classes/media/Show.js b/src/classes/media/Show.js new file mode 100644 index 0000000..d0e114c --- /dev/null +++ b/src/classes/media/Show.js @@ -0,0 +1,14 @@ +class Show { + constructor(name, season, mediaURLs) { + this.name = name; + this.season = season < 10 ? `0${season}` : `${season}`; + this.mediaURLs = mediaURLs; + this.downloadURLs = []; + } + + setDownloadURLs(downloadURLs) { + this.downloadURLs = downloadURLs; + } +} + +module.exports = Show; diff --git a/src/classes/scraping/KissAsianScraper.js b/src/classes/scraping/KissAsianScraper.js index c72c054..629c7aa 100644 --- a/src/classes/scraping/KissAsianScraper.js +++ b/src/classes/scraping/KissAsianScraper.js @@ -1,5 +1,7 @@ const Logger = require('../utils/Logger'); const { ScraperError } = require('../../errors'); +const Show = require('../media/Show'); +const Movie = require('../media/Movie'); class KissAsianScraper { constructor(page) { @@ -28,14 +30,21 @@ class KissAsianScraper { Logger.success(`Successfully logged in as ${credentials.username}.`); } - async getMediaLinks(mediaURL) { + async getMediaData(mediaURL) { await this.page.goto(mediaURL); await this.page.waitForSelector(KissAsianScraper.DEFAULTS.SITE_SELECTOR); Logger.info(`Visited ${mediaURL}`); - Logger.info('Getting media links...'); - const links = await this.page.evaluate(() => { + const name = await this.page.evaluate(() => { + const a = document.querySelector('div.barContent a.bigChar'); + return a.text; + }); + const type = await this.getCurrentMediaPageType(); + + Logger.info(`Getting media links for ${type} ${name}...`); + + const mediaURLs = await this.page.evaluate(() => { const table = document.querySelector('.episodeList table.listing'); const tableBody = table.firstElementChild; @@ -49,9 +58,13 @@ class KissAsianScraper { return links; }); - Logger.success(`Scraped ${links.length} media links.`); + Logger.success(`Scraped ${mediaURLs.length} media links.`); - return links; + if (type === KissAsianScraper.MEDIA_TYPES.SHOW) { + return new Show(name, 1, mediaURLs); + } + + return new Movie(name, mediaURLs); } async directlyVisitPlayerURL(playerURL) { @@ -104,6 +117,15 @@ class KissAsianScraper { throw new ScraperError(`Server ${server} is unavailable.`); } } + + async getCurrentMediaPageType() { + const isMovie = await this.page.evaluate(() => { + const a = document.querySelector('a[href="/Genre/Movie"]'); + return !!a; + }); + + return isMovie ? KissAsianScraper.MEDIA_TYPES.MOVIE : KissAsianScraper.MEDIA_TYPES.SHOW; + } } KissAsianScraper.BASE_URL = 'https://kissasian.li'; @@ -112,4 +134,9 @@ KissAsianScraper.DEFAULTS = { SITE_SELECTOR: '#head a.logo' }; +KissAsianScraper.MEDIA_TYPES = { + MOVIE: 'movie', + SHOW: 'show' +}; + module.exports = KissAsianScraper; diff --git a/src/index.js b/src/index.js index 200794d..b85b8a0 100644 --- a/src/index.js +++ b/src/index.js @@ -15,8 +15,8 @@ const main = async() => { await scraper.load(); await scraper.authenticate(credentials.kissasian); - const links = await scraper.getMediaLinks('https://kissasian.li/Drama/My-Roommate-is-a-Gumiho'); - await scraper.directlyVisitPlayerURL(links[0]); + 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()); };