UNPKG

aniwave-scraper

Version:
119 lines (118 loc) 5.61 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const axios_1 = __importDefault(require("axios")); const cheerio_1 = __importDefault(require("cheerio")); const user_agents_1 = __importDefault(require("user-agents")); const Methods_1 = __importDefault(require("./Methods")); const errmsg = ["[ X ] failed to fetch the data", "check whether the anime name or url is valid"]; const useragent = new user_agents_1.default({ deviceCategory: "desktop" }); class AniwaveScraper extends Methods_1.default { animeSearch(query) { return __awaiter(this, void 0, void 0, function* () { let searchURL = `${this.baseURL}/filter?keyword=${encodeURIComponent(query).replace(/%20/g, "+")}`; return new Promise((resolve, _reject) => { (0, axios_1.default)({ url: searchURL, method: "GET", headers: { "User-Agent": `${useragent}` } }).then((res) => { let $ = cheerio_1.default.load(res.data); let animes = []; $("body").find(".aside-wrapper.mt-5 > .main > section > .body").find("#list-items > .item").each((_i, elem) => this.getItems(animes, elem)); resolve(animes); }).catch(() => { return console.error(errmsg.join(". ")); }); }); }); } recentRelease() { return __awaiter(this, arguments, void 0, function* (type = "all", page = 1) { const recentURL = (type === "trending" || type === "random") ? `${this.baseURL}/ajax/home/widget/${type}?page=${page}` : `${this.baseURL}/ajax/home/widget/updated-${type}?page=${page}`; return new Promise((resolve, _reject) => { (0, axios_1.default)({ url: recentURL, method: "GET", headers: { "User-Agent": `${useragent}` } }).then((res) => { let $ = cheerio_1.default.load(res.data.result); let animes = []; $(".ani.items > .item").each((_i, elem) => { this.getItems(animes, elem); }); resolve(animes); }).catch(() => { return console.error(errmsg[0]); }); }); }); } topAnime() { return __awaiter(this, arguments, void 0, function* (duration = "day") { const topURL = `${this.baseURL}/home`; return new Promise((resolve, _reject) => { (0, axios_1.default)({ url: topURL, method: "GET", headers: { "User-Agent": `${useragent}` } }).then((res) => { const $ = cheerio_1.default.load(res.data); const wrapper = $(`.home > #wrapper > #body > .container`).find(`.sidebar > #top-anime > .body > div[data-name="${duration}"] > .scaff.side.items`); let animes = []; $(wrapper).find(".item").each((i, elem) => { this.getItems(animes, elem); animes[i].rank = (i + 1); }); resolve(animes); }).catch(() => { return console.error(errmsg[0]); }); }); }); } animeInfo(url) { return __awaiter(this, void 0, void 0, function* () { return new Promise((resolve, _reject) => { (0, axios_1.default)({ url: url, method: "GET", headers: { "User-Agent": `${useragent}` } }).then((res) => { let $ = cheerio_1.default.load(res.data); const metaContainer = $("#body").find(".aside-wrapper > .main > #w-info > .binfo"); const relatedContainer = $("#body").find(".aside-wrapper > .sidebar > #w-related > .body"); let anime = {}; this.getAnimeMeta(anime, metaContainer); if ($(relatedContainer).html() === null) anime.related = []; else this.getAnimeRelated(anime, relatedContainer); resolve(anime); }).catch(() => { return console.error(errmsg.join(". ")); }); }); }); } } exports.default = AniwaveScraper;