UNPKG

consumet.custom

Version:

Nodejs library that provides high-level APIs for obtaining information on various entertainment media such as books, movies, comic books, anime, manga, and so on.

181 lines 7.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const models_1 = require("../../models"); const utils_1 = require("../../utils/utils"); class Anify extends models_1.AnimeParser { constructor(proxyConfig, adapter, providerId = 'gogoanime') { super(proxyConfig, adapter); this.proxyConfig = proxyConfig; this.adapter = adapter; this.providerId = providerId; this.name = 'Anify'; this.baseUrl = utils_1.ANIFY_URL; this.classPath = 'ANIME.Anify'; this.actions = { gogoanime: { format: (episodeId) => `/${episodeId}`, unformat: (episodeId) => episodeId.replace('/', ''), }, zoro: { format: (episodeId) => `watch/${episodeId.replace('$episode$', '?ep=')}`, unformat: (episodeId) => episodeId.replace('?ep=', '$episode$').split('watch/')[1] + '$sub', }, animepahe: { format: (episodeId) => episodeId, unformat: (episodeId) => episodeId, }, '9anime': { format: (episodeId) => episodeId, unformat: (episodeId) => episodeId, }, }; /** * @param query Search query * @param page Page number (optional) */ this.rawSearch = async (query, page = 1) => { const { data } = await this.client.get(`${this.baseUrl}/search/anime/${query}?page=${page}`); return data.results; }; /** * @param query Search query * @param page Page number (optional) */ this.search = async (query, page = 1) => { const res = { currentPage: page, hasNextPage: false, results: [], }; const { data } = await this.client.get(`${this.baseUrl}/search-advanced?type=anime&query=${query}&page=${page}`); if (data.currentPage !== res.currentPage) res.hasNextPage = true; res.results = data === null || data === void 0 ? void 0 : data.results.map((anime) => { var _a, _b; return ({ id: anime.id, anilistId: anime.id, title: (_b = (_a = anime.title.english) !== null && _a !== void 0 ? _a : anime.title.romaji) !== null && _b !== void 0 ? _b : anime.title.native, image: anime.coverImage, cover: anime.bannerImage, releaseDate: anime.year, description: anime.description, genres: anime.genres, rating: anime.rating.anilist, status: anime.status, mappings: anime.mappings, type: anime.type, }); }); return res; }; /** * @param id Anime id */ this.fetchAnimeInfo = async (id) => { var _a, _b; const animeInfo = { id: id, title: '', }; const { data } = await this.client.get(`${this.baseUrl}/info/${id}`).catch(() => { throw new Error('Anime not found. Please use a valid id!'); }); animeInfo.anilistId = data.id; animeInfo.title = (_b = (_a = data.title.english) !== null && _a !== void 0 ? _a : data.title.romaji) !== null && _b !== void 0 ? _b : data.title.native; animeInfo.image = data.coverImage; animeInfo.cover = data.bannerImage; animeInfo.season = data.season; animeInfo.releaseDate = data.year; animeInfo.duration = data.duration; animeInfo.popularity = data.popularity.anilist; animeInfo.description = data.description; animeInfo.genres = data.genres; animeInfo.rating = data.rating.anilist; animeInfo.status = data.status; animeInfo.synonyms = data.synonyms; animeInfo.mappings = data.mappings; animeInfo.type = data.type; animeInfo.artwork = data.artwork; const providerData = data.episodes.data.filter((e) => e.providerId === this.providerId)[0]; animeInfo.episodes = providerData.episodes.map((episode) => ({ id: this.actions[this.providerId].unformat(episode.id), number: episode.number, isFiller: episode.isFiller, title: episode.title, description: episode.description, image: episode.img, rating: episode.rating, })); return animeInfo; }; this.fetchAnimeInfoByIdRaw = async (id) => { const { data } = await this.client.get(`${this.baseUrl}/info/${id}`).catch(err => { throw new Error("Backup api seems to be down! Can't fetch anime info"); }); return data; }; /** * @param id anilist id */ this.fetchAnimeInfoByAnilistId = async (id, providerId = 'gogoanime') => { var _a, _b; const animeInfo = { id: id, title: '', }; const { data } = await this.client.get(`${this.baseUrl}/media?providerId=${providerId}&id=${id}`); animeInfo.anilistId = data.id; animeInfo.title = (_b = (_a = data.title.english) !== null && _a !== void 0 ? _a : data.title.romaji) !== null && _b !== void 0 ? _b : data.title.native; animeInfo.image = data.coverImage; animeInfo.cover = data.bannerImage; animeInfo.season = data.season; animeInfo.releaseDate = data.year; animeInfo.duration = data.duration; animeInfo.popularity = data.popularity.anilist; animeInfo.description = data.description; animeInfo.genres = data.genres; animeInfo.rating = data.rating.anilist; animeInfo.status = data.status; animeInfo.synonyms = data.synonyms; animeInfo.mappings = data.mappings; animeInfo.type = data.type; animeInfo.artwork = data.artwork; const providerData = data.episodes.data.filter((e) => e.providerId === this.providerId)[0]; animeInfo.episodes = providerData.episodes.map((episode) => ({ id: this.actions[this.providerId].unformat(episode.id), number: episode.number, isFiller: episode.isFiller, title: episode.title, description: episode.description, image: episode.img, rating: episode.rating, })); return animeInfo; }; this.fetchEpisodeSources = async (episodeId, episodeNumber, id) => { try { const { data } = await this.client.get(`${this.baseUrl}/sources?providerId=${this.providerId}&watchId=${this.actions[this.providerId].format(episodeId)}&episodeNumber=${episodeNumber}&id=${id}&subType=sub`); return data; } catch (err) { throw new Error('Episode not found!\n' + err); } }; } /** * @deprecated */ fetchEpisodeServers(episodeId) { throw new Error('Method not implemented.'); } } exports.default = Anify; // (async () => { // const anify = new Anify(); // const res = await anify.fetchAnimeInfo('1'); // console.log(res); // const souces = await anify.fetchEpisodeSources(res.episodes![0].id, 1, 1); // console.log(souces); // })(); //# sourceMappingURL=anify.js.map