animob 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +245 -0
- package/animb.png +0 -0
- package/dist/extractors/index.d.ts +11 -0
- package/dist/extractors/index.js +27 -0
- package/dist/extractors/index.js.map +1 -0
- package/dist/extractors/kwik.d.ts +18 -0
- package/dist/extractors/kwik.js +117 -0
- package/dist/extractors/kwik.js.map +1 -0
- package/dist/extractors/lplayer.d.ts +11 -0
- package/dist/extractors/lplayer.js +131 -0
- package/dist/extractors/lplayer.js.map +1 -0
- package/dist/extractors/megacloud.d.ts +10 -0
- package/dist/extractors/megacloud.js +44 -0
- package/dist/extractors/megacloud.js.map +1 -0
- package/dist/extractors/megaup.d.ts +31 -0
- package/dist/extractors/megaup.js +79 -0
- package/dist/extractors/megaup.js.map +1 -0
- package/dist/extractors/mixdrop.d.ts +7 -0
- package/dist/extractors/mixdrop.js +32 -0
- package/dist/extractors/mixdrop.js.map +1 -0
- package/dist/extractors/movearnpre.d.ts +9 -0
- package/dist/extractors/movearnpre.js +154 -0
- package/dist/extractors/movearnpre.js.map +1 -0
- package/dist/extractors/sendvid.d.ts +8 -0
- package/dist/extractors/sendvid.js +76 -0
- package/dist/extractors/sendvid.js.map +1 -0
- package/dist/extractors/sibnet.d.ts +8 -0
- package/dist/extractors/sibnet.js +44 -0
- package/dist/extractors/sibnet.js.map +1 -0
- package/dist/extractors/streamsb.d.ts +11 -0
- package/dist/extractors/streamsb.js +65 -0
- package/dist/extractors/streamsb.js.map +1 -0
- package/dist/extractors/streamtape.d.ts +7 -0
- package/dist/extractors/streamtape.js +32 -0
- package/dist/extractors/streamtape.js.map +1 -0
- package/dist/extractors/streamwish.d.ts +11 -0
- package/dist/extractors/streamwish.js +46 -0
- package/dist/extractors/streamwish.js.map +1 -0
- package/dist/extractors/vidcloud.d.ts +11 -0
- package/dist/extractors/vidcloud.js +109 -0
- package/dist/extractors/vidcloud.js.map +1 -0
- package/dist/extractors/videostr.d.ts +10 -0
- package/dist/extractors/videostr.js +44 -0
- package/dist/extractors/videostr.js.map +1 -0
- package/dist/extractors/vidmoly.d.ts +7 -0
- package/dist/extractors/vidmoly.js +75 -0
- package/dist/extractors/vidmoly.js.map +1 -0
- package/dist/extractors/voe.d.ts +10 -0
- package/dist/extractors/voe.js +44 -0
- package/dist/extractors/voe.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/models/anime-parser.d.ts +26 -0
- package/dist/models/anime-parser.js +14 -0
- package/dist/models/anime-parser.js.map +1 -0
- package/dist/models/base-parser.d.ts +10 -0
- package/dist/models/base-parser.js +7 -0
- package/dist/models/base-parser.js.map +1 -0
- package/dist/models/base-provider.d.ts +40 -0
- package/dist/models/base-provider.js +45 -0
- package/dist/models/base-provider.js.map +1 -0
- package/dist/models/base-types.d.ts +22 -0
- package/dist/models/base-types.js +3 -0
- package/dist/models/base-types.js.map +1 -0
- package/dist/models/book-parser.d.ts +4 -0
- package/dist/models/book-parser.js +7 -0
- package/dist/models/book-parser.js.map +1 -0
- package/dist/models/comic-parser.d.ts +4 -0
- package/dist/models/comic-parser.js +7 -0
- package/dist/models/comic-parser.js.map +1 -0
- package/dist/models/index.d.ts +13 -0
- package/dist/models/index.js +39 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/lightnovel-parser.d.ts +16 -0
- package/dist/models/lightnovel-parser.js +7 -0
- package/dist/models/lightnovel-parser.js.map +1 -0
- package/dist/models/manga-parser.d.ts +17 -0
- package/dist/models/manga-parser.js +10 -0
- package/dist/models/manga-parser.js.map +1 -0
- package/dist/models/movie-parser.d.ts +26 -0
- package/dist/models/movie-parser.js +7 -0
- package/dist/models/movie-parser.js.map +1 -0
- package/dist/models/news-parser.d.ts +4 -0
- package/dist/models/news-parser.js +7 -0
- package/dist/models/news-parser.js.map +1 -0
- package/dist/models/proxy.d.ts +25 -0
- package/dist/models/proxy.js +83 -0
- package/dist/models/proxy.js.map +1 -0
- package/dist/models/type-objects.d.ts +48 -0
- package/dist/models/type-objects.js +57 -0
- package/dist/models/type-objects.js.map +1 -0
- package/dist/models/types.d.ts +515 -0
- package/dist/models/types.js +118 -0
- package/dist/models/types.js.map +1 -0
- package/dist/models/video-extractor.d.ts +19 -0
- package/dist/models/video-extractor.js +10 -0
- package/dist/models/video-extractor.js.map +1 -0
- package/dist/providers/anime/animekai.d.ts +94 -0
- package/dist/providers/anime/animekai.js +661 -0
- package/dist/providers/anime/animekai.js.map +1 -0
- package/dist/providers/anime/animepahe.d.ts +41 -0
- package/dist/providers/anime/animepahe.js +270 -0
- package/dist/providers/anime/animepahe.js.map +1 -0
- package/dist/providers/anime/animesama.d.ts +25 -0
- package/dist/providers/anime/animesama.js +504 -0
- package/dist/providers/anime/animesama.js.map +1 -0
- package/dist/providers/anime/animesaturn.d.ts +32 -0
- package/dist/providers/anime/animesaturn.js +298 -0
- package/dist/providers/anime/animesaturn.js.map +1 -0
- package/dist/providers/anime/animeunity.d.ts +27 -0
- package/dist/providers/anime/animeunity.js +157 -0
- package/dist/providers/anime/animeunity.js.map +1 -0
- package/dist/providers/anime/hianime.d.ts +150 -0
- package/dist/providers/anime/hianime.js +825 -0
- package/dist/providers/anime/hianime.js.map +1 -0
- package/dist/providers/anime/index.d.ts +17 -0
- package/dist/providers/anime/index.js +22 -0
- package/dist/providers/anime/index.js.map +1 -0
- package/dist/providers/anime/kickassanime.d.ts +65 -0
- package/dist/providers/anime/kickassanime.js +582 -0
- package/dist/providers/anime/kickassanime.js.map +1 -0
- package/dist/providers/books/index.d.ts +2 -0
- package/dist/providers/books/index.js +4 -0
- package/dist/providers/books/index.js.map +1 -0
- package/dist/providers/comics/getComics.d.ts +9 -0
- package/dist/providers/comics/getComics.js +54 -0
- package/dist/providers/comics/getComics.js.map +1 -0
- package/dist/providers/comics/index.d.ts +5 -0
- package/dist/providers/comics/index.js +8 -0
- package/dist/providers/comics/index.js.map +1 -0
- package/dist/providers/index.d.ts +9 -0
- package/dist/providers/index.js +23 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/light-novels/index.d.ts +5 -0
- package/dist/providers/light-novels/index.js +8 -0
- package/dist/providers/light-novels/index.js.map +1 -0
- package/dist/providers/light-novels/novelupdates.d.ts +26 -0
- package/dist/providers/light-novels/novelupdates.js +155 -0
- package/dist/providers/light-novels/novelupdates.js.map +1 -0
- package/dist/providers/manga/asurascans.d.ts +16 -0
- package/dist/providers/manga/asurascans.js +143 -0
- package/dist/providers/manga/asurascans.js.map +1 -0
- package/dist/providers/manga/comick.d.ts +36 -0
- package/dist/providers/manga/comick.js +141 -0
- package/dist/providers/manga/comick.js.map +1 -0
- package/dist/providers/manga/comix.d.ts +36 -0
- package/dist/providers/manga/comix.js +265 -0
- package/dist/providers/manga/comix.js.map +1 -0
- package/dist/providers/manga/index.d.ts +21 -0
- package/dist/providers/manga/index.js +26 -0
- package/dist/providers/manga/index.js.map +1 -0
- package/dist/providers/manga/mangadex.d.ts +26 -0
- package/dist/providers/manga/mangadex.js +301 -0
- package/dist/providers/manga/mangadex.js.map +1 -0
- package/dist/providers/manga/mangahere.d.ts +29 -0
- package/dist/providers/manga/mangahere.js +376 -0
- package/dist/providers/manga/mangahere.js.map +1 -0
- package/dist/providers/manga/mangakakalot.d.ts +56 -0
- package/dist/providers/manga/mangakakalot.js +461 -0
- package/dist/providers/manga/mangakakalot.js.map +1 -0
- package/dist/providers/manga/mangapill.d.ts +15 -0
- package/dist/providers/manga/mangapill.js +104 -0
- package/dist/providers/manga/mangapill.js.map +1 -0
- package/dist/providers/manga/mangareader.d.ts +15 -0
- package/dist/providers/manga/mangareader.js +110 -0
- package/dist/providers/manga/mangareader.js.map +1 -0
- package/dist/providers/manga/weebcentral.d.ts +12 -0
- package/dist/providers/manga/weebcentral.js +169 -0
- package/dist/providers/manga/weebcentral.js.map +1 -0
- package/dist/providers/meta/anilist.d.ts +206 -0
- package/dist/providers/meta/anilist.js +2025 -0
- package/dist/providers/meta/anilist.js.map +1 -0
- package/dist/providers/meta/index.d.ts +9 -0
- package/dist/providers/meta/index.js +10 -0
- package/dist/providers/meta/index.js.map +1 -0
- package/dist/providers/meta/mal.d.ts +39 -0
- package/dist/providers/meta/mal.js +529 -0
- package/dist/providers/meta/mal.js.map +1 -0
- package/dist/providers/meta/tmdb.d.ts +48 -0
- package/dist/providers/meta/tmdb.js +364 -0
- package/dist/providers/meta/tmdb.js.map +1 -0
- package/dist/providers/movies/dramacool.d.ts +98 -0
- package/dist/providers/movies/dramacool.js +367 -0
- package/dist/providers/movies/dramacool.js.map +1 -0
- package/dist/providers/movies/flixhq.d.ts +90 -0
- package/dist/providers/movies/flixhq.js +438 -0
- package/dist/providers/movies/flixhq.js.map +1 -0
- package/dist/providers/movies/goku.d.ts +80 -0
- package/dist/providers/movies/goku.js +369 -0
- package/dist/providers/movies/goku.js.map +1 -0
- package/dist/providers/movies/himovies.d.ts +102 -0
- package/dist/providers/movies/himovies.js +445 -0
- package/dist/providers/movies/himovies.js.map +1 -0
- package/dist/providers/movies/index.d.ts +17 -0
- package/dist/providers/movies/index.js +22 -0
- package/dist/providers/movies/index.js.map +1 -0
- package/dist/providers/movies/netmirror.d.ts +27 -0
- package/dist/providers/movies/netmirror.js +259 -0
- package/dist/providers/movies/netmirror.js.map +1 -0
- package/dist/providers/movies/sflix.d.ts +106 -0
- package/dist/providers/movies/sflix.js +490 -0
- package/dist/providers/movies/sflix.js.map +1 -0
- package/dist/providers/movies/turkish123.d.ts +32 -0
- package/dist/providers/movies/turkish123.js +141 -0
- package/dist/providers/movies/turkish123.js.map +1 -0
- package/dist/providers/news/animenewsnetwork.d.ts +30 -0
- package/dist/providers/news/animenewsnetwork.js +105 -0
- package/dist/providers/news/animenewsnetwork.js.map +1 -0
- package/dist/providers/news/index.d.ts +5 -0
- package/dist/providers/news/index.js +8 -0
- package/dist/providers/news/index.js.map +1 -0
- package/dist/providers/others/index.d.ts +0 -0
- package/dist/providers/others/index.js +2 -0
- package/dist/providers/others/index.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +33 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/providers-list.d.ts +11 -0
- package/dist/utils/providers-list.js +40 -0
- package/dist/utils/providers-list.js.map +1 -0
- package/dist/utils/queries.d.ts +13 -0
- package/dist/utils/queries.js +31 -0
- package/dist/utils/queries.js.map +1 -0
- package/dist/utils/utils.d.ts +32 -0
- package/dist/utils/utils.js +324 -0
- package/dist/utils/utils.js.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const cheerio_1 = require("cheerio");
|
|
7
|
+
const models_1 = require("../../models");
|
|
8
|
+
const utils_1 = require("../../utils");
|
|
9
|
+
const hianime_1 = __importDefault(require("../anime/hianime"));
|
|
10
|
+
class Myanimelist extends models_1.AnimeParser {
|
|
11
|
+
/**
|
|
12
|
+
* This class maps myanimelist to kitsu with any other anime provider.
|
|
13
|
+
* kitsu is used for episode images, titles and description.
|
|
14
|
+
* @param provider anime provider (optional) default: Gogoanime
|
|
15
|
+
*/
|
|
16
|
+
constructor(provider) {
|
|
17
|
+
super();
|
|
18
|
+
this.name = 'Myanimelist';
|
|
19
|
+
this.baseUrl = 'https://myanimelist.net/';
|
|
20
|
+
this.logo = 'https://en.wikipedia.org/wiki/MyAnimeList#/media/File:MyAnimeList.png';
|
|
21
|
+
this.classPath = 'META.Myanimelist';
|
|
22
|
+
this.anilistGraphqlUrl = 'https://graphql.anilist.co';
|
|
23
|
+
this.kitsuGraphqlUrl = 'https://kitsu.app/api/graphql';
|
|
24
|
+
this.malSyncUrl = 'https://api.malsync.moe';
|
|
25
|
+
this.anifyUrl = 'https://anify.eltik.cc';
|
|
26
|
+
this.search = async (query, page = 1) => {
|
|
27
|
+
const searchResults = {
|
|
28
|
+
currentPage: page,
|
|
29
|
+
results: [],
|
|
30
|
+
};
|
|
31
|
+
const { data } = await this.client.request({
|
|
32
|
+
method: 'get',
|
|
33
|
+
url: `https://myanimelist.net/anime.php?q=${query}&cat=anime&show=${50 * (page - 1)}`,
|
|
34
|
+
headers: {
|
|
35
|
+
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.35',
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
const $ = (0, cheerio_1.load)(data);
|
|
39
|
+
const pages = $('.normal_header').find('span').children();
|
|
40
|
+
const maxPage = parseInt(pages.last().text());
|
|
41
|
+
const hasNextPage = page < maxPage;
|
|
42
|
+
searchResults.hasNextPage = hasNextPage;
|
|
43
|
+
$('tr').each((i, item) => {
|
|
44
|
+
var _a;
|
|
45
|
+
const id = (_a = $(item).find('.hoverinfo_trigger').attr('href')) === null || _a === void 0 ? void 0 : _a.split('anime/')[1].split('/')[0];
|
|
46
|
+
const title = $(item).find('strong').text();
|
|
47
|
+
const description = $(item).find('.pt4').text().replace('...read more.', '...');
|
|
48
|
+
const type = $(item).children().eq(2).text().trim();
|
|
49
|
+
const episodeCount = $(item).children().eq(3).text().trim();
|
|
50
|
+
const score = (parseFloat($(item).children().eq(4).text()) * 10).toFixed(0);
|
|
51
|
+
const imageTmp = $(item).children().first().find('img').attr('data-src');
|
|
52
|
+
const imageUrl = `https://cdn.myanimelist.net/images/anime/${imageTmp === null || imageTmp === void 0 ? void 0 : imageTmp.split('anime/')[1]}`;
|
|
53
|
+
if (title != '') {
|
|
54
|
+
searchResults.results.push({
|
|
55
|
+
id: id !== null && id !== void 0 ? id : '',
|
|
56
|
+
title: title,
|
|
57
|
+
image: imageUrl,
|
|
58
|
+
rating: parseInt(score),
|
|
59
|
+
description: description,
|
|
60
|
+
totalEpisodes: parseInt(episodeCount),
|
|
61
|
+
type: type == 'TV'
|
|
62
|
+
? models_1.MediaFormat.TV
|
|
63
|
+
: type == 'TV_SHORT'
|
|
64
|
+
? models_1.MediaFormat.TV_SHORT
|
|
65
|
+
: type == 'MOVIE'
|
|
66
|
+
? models_1.MediaFormat.MOVIE
|
|
67
|
+
: type == 'SPECIAL'
|
|
68
|
+
? models_1.MediaFormat.SPECIAL
|
|
69
|
+
: type == 'OVA'
|
|
70
|
+
? models_1.MediaFormat.OVA
|
|
71
|
+
: type == 'ONA'
|
|
72
|
+
? models_1.MediaFormat.ONA
|
|
73
|
+
: type == 'MUSIC'
|
|
74
|
+
? models_1.MediaFormat.MUSIC
|
|
75
|
+
: type == 'MANGA'
|
|
76
|
+
? models_1.MediaFormat.MANGA
|
|
77
|
+
: type == 'NOVEL'
|
|
78
|
+
? models_1.MediaFormat.NOVEL
|
|
79
|
+
: type == 'ONE_SHOT'
|
|
80
|
+
? models_1.MediaFormat.ONE_SHOT
|
|
81
|
+
: undefined,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
return searchResults;
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
*
|
|
89
|
+
* @param animeId anime id
|
|
90
|
+
* @param fetchFiller fetch filler episodes
|
|
91
|
+
*/
|
|
92
|
+
this.fetchAnimeInfo = async (animeId, dub = false, fetchFiller = false) => {
|
|
93
|
+
var _a, _b, _c, _d, _e;
|
|
94
|
+
try {
|
|
95
|
+
const animeInfo = await this.fetchMalInfoById(animeId);
|
|
96
|
+
const titleWithLanguages = animeInfo === null || animeInfo === void 0 ? void 0 : animeInfo.title;
|
|
97
|
+
let fillerEpisodes;
|
|
98
|
+
if (this.provider instanceof hianime_1.default &&
|
|
99
|
+
!dub &&
|
|
100
|
+
(animeInfo.status === models_1.MediaStatus.ONGOING ||
|
|
101
|
+
(0, utils_1.range)({ from: 2000, to: new Date().getFullYear() + 1 }).includes((_a = animeInfo.startDate) === null || _a === void 0 ? void 0 : _a.year))) {
|
|
102
|
+
try {
|
|
103
|
+
// NOTE: gotta fix in future
|
|
104
|
+
// animeInfo.episodes = (
|
|
105
|
+
// await new Anify(
|
|
106
|
+
// this.proxyConfig,
|
|
107
|
+
// this.adapter,
|
|
108
|
+
// this.provider.name.toLowerCase() as 'gogoanime' | 'Hianime' | '9anime' | 'animepahe'
|
|
109
|
+
// ).fetchAnimeInfo(animeId)
|
|
110
|
+
// ).episodes?.map((item: any) => ({
|
|
111
|
+
// id: item.slug,
|
|
112
|
+
// title: item.title,
|
|
113
|
+
// description: item.description,
|
|
114
|
+
// number: item.number,
|
|
115
|
+
// image: item.image,
|
|
116
|
+
// }));
|
|
117
|
+
// animeInfo.episodes?.reverse();
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
animeInfo.episodes = await this.findAnimeSlug((titleWithLanguages === null || titleWithLanguages === void 0 ? void 0 : titleWithLanguages.english) ||
|
|
121
|
+
(titleWithLanguages === null || titleWithLanguages === void 0 ? void 0 : titleWithLanguages.romaji) ||
|
|
122
|
+
(titleWithLanguages === null || titleWithLanguages === void 0 ? void 0 : titleWithLanguages.native) ||
|
|
123
|
+
(titleWithLanguages === null || titleWithLanguages === void 0 ? void 0 : titleWithLanguages.userPreferred), animeInfo.season, (_b = animeInfo.startDate) === null || _b === void 0 ? void 0 : _b.year, animeId, dub);
|
|
124
|
+
animeInfo.episodes = (_c = animeInfo.episodes) === null || _c === void 0 ? void 0 : _c.map((episode) => {
|
|
125
|
+
if (!episode.image)
|
|
126
|
+
episode.image = animeInfo.image;
|
|
127
|
+
return episode;
|
|
128
|
+
});
|
|
129
|
+
return animeInfo;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else
|
|
133
|
+
animeInfo.episodes = await this.findAnimeSlug((titleWithLanguages === null || titleWithLanguages === void 0 ? void 0 : titleWithLanguages.english) ||
|
|
134
|
+
(titleWithLanguages === null || titleWithLanguages === void 0 ? void 0 : titleWithLanguages.romaji) ||
|
|
135
|
+
(titleWithLanguages === null || titleWithLanguages === void 0 ? void 0 : titleWithLanguages.native) ||
|
|
136
|
+
(titleWithLanguages === null || titleWithLanguages === void 0 ? void 0 : titleWithLanguages.userPreferred), animeInfo.season, (_d = animeInfo.startDate) === null || _d === void 0 ? void 0 : _d.year, animeId, dub);
|
|
137
|
+
if (fetchFiller) {
|
|
138
|
+
const { data: fillerData } = await this.client({
|
|
139
|
+
baseURL: `https://raw.githubusercontent.com/saikou-app/mal-id-filler-list/main/fillers/${animeId}.json`,
|
|
140
|
+
method: 'GET',
|
|
141
|
+
validateStatus: () => true,
|
|
142
|
+
});
|
|
143
|
+
if (!fillerData.toString().startsWith('404')) {
|
|
144
|
+
fillerEpisodes = [];
|
|
145
|
+
fillerEpisodes === null || fillerEpisodes === void 0 ? void 0 : fillerEpisodes.push(...fillerData.episodes);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
animeInfo.episodes = (_e = animeInfo.episodes) === null || _e === void 0 ? void 0 : _e.map((episode) => {
|
|
149
|
+
if (!episode.image)
|
|
150
|
+
episode.image = animeInfo.image;
|
|
151
|
+
if (fetchFiller &&
|
|
152
|
+
(fillerEpisodes === null || fillerEpisodes === void 0 ? void 0 : fillerEpisodes.length) > 0 &&
|
|
153
|
+
(fillerEpisodes === null || fillerEpisodes === void 0 ? void 0 : fillerEpisodes.length) >= animeInfo.episodes.length) {
|
|
154
|
+
if (fillerEpisodes[episode.number - 1])
|
|
155
|
+
episode.isFiller = new Boolean(fillerEpisodes[episode.number - 1]['filler-bool']).valueOf();
|
|
156
|
+
}
|
|
157
|
+
return episode;
|
|
158
|
+
});
|
|
159
|
+
return animeInfo;
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
console.error(err);
|
|
163
|
+
throw err;
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
this.fetchEpisodeSources = async (episodeId, ...args) => {
|
|
167
|
+
try {
|
|
168
|
+
return this.provider.fetchEpisodeSources(episodeId, ...args);
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
throw new Error(`Failed to fetch episode sources from ${this.provider.name}: ${err}`);
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
this.findAnimeRaw = async (slug, externalLinks) => {
|
|
175
|
+
const findAnime = (await this.provider.search(slug));
|
|
176
|
+
if (findAnime.results.length === 0)
|
|
177
|
+
return [];
|
|
178
|
+
// Sort the retrieved info for more accurate results.
|
|
179
|
+
findAnime.results.sort((a, b) => {
|
|
180
|
+
var _a, _b, _c, _d;
|
|
181
|
+
const targetTitle = slug.toLowerCase();
|
|
182
|
+
let firstTitle;
|
|
183
|
+
let secondTitle;
|
|
184
|
+
if (typeof a.title == 'string')
|
|
185
|
+
firstTitle = a.title;
|
|
186
|
+
else
|
|
187
|
+
firstTitle = (_b = (_a = a.title.english) !== null && _a !== void 0 ? _a : a.title.romaji) !== null && _b !== void 0 ? _b : '';
|
|
188
|
+
if (typeof b.title == 'string')
|
|
189
|
+
secondTitle = b.title;
|
|
190
|
+
else
|
|
191
|
+
secondTitle = (_d = (_c = b.title.english) !== null && _c !== void 0 ? _c : b.title.romaji) !== null && _d !== void 0 ? _d : '';
|
|
192
|
+
const firstRating = (0, utils_1.compareTwoStrings)(targetTitle, firstTitle.toLowerCase());
|
|
193
|
+
const secondRating = (0, utils_1.compareTwoStrings)(targetTitle, secondTitle.toLowerCase());
|
|
194
|
+
// Sort in descending order
|
|
195
|
+
return secondRating - firstRating;
|
|
196
|
+
});
|
|
197
|
+
// TODO: use much better way than this
|
|
198
|
+
return (await this.provider.fetchAnimeInfo(findAnime.results[0].id));
|
|
199
|
+
};
|
|
200
|
+
this.findAnimeSlug = async (title, season, startDate, malId, dub, externalLinks) => {
|
|
201
|
+
var _a, _b, _c;
|
|
202
|
+
// console.log({ title });
|
|
203
|
+
const slug = title === null || title === void 0 ? void 0 : title.replace(/[^0-9a-zA-Z]+/g, ' ');
|
|
204
|
+
let possibleAnime;
|
|
205
|
+
// To avoid a new request, lets match and see if the anime show found is in sub/dub
|
|
206
|
+
const expectedType = dub ? models_1.SubOrSub.DUB : models_1.SubOrSub.SUB;
|
|
207
|
+
if (possibleAnime.subOrDub != models_1.SubOrSub.BOTH && possibleAnime.subOrDub != expectedType) {
|
|
208
|
+
return [];
|
|
209
|
+
}
|
|
210
|
+
if (this.provider instanceof hianime_1.default) {
|
|
211
|
+
// Set the correct episode sub/dub request type
|
|
212
|
+
possibleAnime.episodes.forEach((_, index) => {
|
|
213
|
+
if (possibleAnime.subOrDub === models_1.SubOrSub.BOTH) {
|
|
214
|
+
possibleAnime.episodes[index].id = possibleAnime.episodes[index].id.replace(`$both`, dub ? '$dub' : '$sub');
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
const possibleProviderEpisodes = possibleAnime.episodes;
|
|
219
|
+
if (typeof ((_a = possibleProviderEpisodes[0]) === null || _a === void 0 ? void 0 : _a.image) !== 'undefined' &&
|
|
220
|
+
typeof ((_b = possibleProviderEpisodes[0]) === null || _b === void 0 ? void 0 : _b.title) !== 'undefined' &&
|
|
221
|
+
typeof ((_c = possibleProviderEpisodes[0]) === null || _c === void 0 ? void 0 : _c.description) !== 'undefined')
|
|
222
|
+
return possibleProviderEpisodes;
|
|
223
|
+
const options = {
|
|
224
|
+
headers: { 'Content-Type': 'application/json' },
|
|
225
|
+
query: (0, utils_1.kitsuSearchQuery)(slug),
|
|
226
|
+
};
|
|
227
|
+
const newEpisodeList = await this.findKitsuAnime(possibleProviderEpisodes, options, season, startDate);
|
|
228
|
+
return newEpisodeList;
|
|
229
|
+
};
|
|
230
|
+
this.findKitsuAnime = async (possibleProviderEpisodes, options, season, startDate) => {
|
|
231
|
+
const kitsuEpisodes = await this.client.post(this.kitsuGraphqlUrl, options);
|
|
232
|
+
const episodesList = new Map();
|
|
233
|
+
if (kitsuEpisodes === null || kitsuEpisodes === void 0 ? void 0 : kitsuEpisodes.data.data) {
|
|
234
|
+
const { nodes } = kitsuEpisodes.data.data.searchAnimeByTitle;
|
|
235
|
+
if (nodes) {
|
|
236
|
+
nodes.forEach((node) => {
|
|
237
|
+
var _a, _b;
|
|
238
|
+
if (node.season === season && node.startDate.trim().split('-')[0] === (startDate === null || startDate === void 0 ? void 0 : startDate.toString())) {
|
|
239
|
+
const episodes = node.episodes.nodes;
|
|
240
|
+
for (const episode of episodes) {
|
|
241
|
+
const i = episode === null || episode === void 0 ? void 0 : episode.number.toString().replace(/"/g, '');
|
|
242
|
+
let name = undefined;
|
|
243
|
+
let description = undefined;
|
|
244
|
+
let thumbnail = undefined;
|
|
245
|
+
if ((_a = episode === null || episode === void 0 ? void 0 : episode.description) === null || _a === void 0 ? void 0 : _a.en)
|
|
246
|
+
description = episode === null || episode === void 0 ? void 0 : episode.description.en.toString().replace(/"/g, '').replace('\\n', '\n');
|
|
247
|
+
if (episode === null || episode === void 0 ? void 0 : episode.thumbnail)
|
|
248
|
+
thumbnail = episode === null || episode === void 0 ? void 0 : episode.thumbnail.original.url.toString().replace(/"/g, '');
|
|
249
|
+
if (episode) {
|
|
250
|
+
if ((_b = episode.titles) === null || _b === void 0 ? void 0 : _b.canonical)
|
|
251
|
+
name = episode.titles.canonical.toString().replace(/"/g, '');
|
|
252
|
+
episodesList.set(i, {
|
|
253
|
+
episodeNum: episode === null || episode === void 0 ? void 0 : episode.number.toString().replace(/"/g, ''),
|
|
254
|
+
title: name,
|
|
255
|
+
description,
|
|
256
|
+
thumbnail,
|
|
257
|
+
});
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
episodesList.set(i, {
|
|
261
|
+
episodeNum: undefined,
|
|
262
|
+
title: undefined,
|
|
263
|
+
description: undefined,
|
|
264
|
+
thumbnail,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
const newEpisodeList = [];
|
|
272
|
+
if ((possibleProviderEpisodes === null || possibleProviderEpisodes === void 0 ? void 0 : possibleProviderEpisodes.length) !== 0) {
|
|
273
|
+
possibleProviderEpisodes === null || possibleProviderEpisodes === void 0 ? void 0 : possibleProviderEpisodes.forEach((ep, i) => {
|
|
274
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
275
|
+
const j = (i + 1).toString();
|
|
276
|
+
newEpisodeList.push({
|
|
277
|
+
id: ep.id,
|
|
278
|
+
title: (_c = (_a = ep.title) !== null && _a !== void 0 ? _a : (_b = episodesList.get(j)) === null || _b === void 0 ? void 0 : _b.title) !== null && _c !== void 0 ? _c : null,
|
|
279
|
+
image: (_f = (_d = ep.image) !== null && _d !== void 0 ? _d : (_e = episodesList.get(j)) === null || _e === void 0 ? void 0 : _e.thumbnail) !== null && _f !== void 0 ? _f : null,
|
|
280
|
+
number: ep.number,
|
|
281
|
+
description: (_j = (_g = ep.description) !== null && _g !== void 0 ? _g : (_h = episodesList.get(j)) === null || _h === void 0 ? void 0 : _h.description) !== null && _j !== void 0 ? _j : null,
|
|
282
|
+
url: (_k = ep.url) !== null && _k !== void 0 ? _k : null,
|
|
283
|
+
});
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
return newEpisodeList;
|
|
287
|
+
};
|
|
288
|
+
/**
|
|
289
|
+
*
|
|
290
|
+
* @param id anime id
|
|
291
|
+
* @returns anime info without streamable episodes
|
|
292
|
+
*/
|
|
293
|
+
this.fetchMalInfoById = async (id) => {
|
|
294
|
+
const animeInfo = {
|
|
295
|
+
id: id,
|
|
296
|
+
title: '',
|
|
297
|
+
};
|
|
298
|
+
const { data } = await this.client.request({
|
|
299
|
+
method: 'GET',
|
|
300
|
+
url: `https://myanimelist.net/anime/${id}`,
|
|
301
|
+
headers: {
|
|
302
|
+
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.35',
|
|
303
|
+
},
|
|
304
|
+
});
|
|
305
|
+
const $ = (0, cheerio_1.load)(data);
|
|
306
|
+
const episodes = [];
|
|
307
|
+
const desc = $('[itemprop="description"]').first().text();
|
|
308
|
+
const imageElem = $('[itemprop="image"]').first();
|
|
309
|
+
const image = imageElem.attr('src') || imageElem.attr('data-image') || imageElem.attr('data-src');
|
|
310
|
+
const genres = [];
|
|
311
|
+
const genreDOM = $('[itemprop="genre"]').get();
|
|
312
|
+
genreDOM.forEach(elem => genres.push($(elem).text()));
|
|
313
|
+
animeInfo.genres = genres;
|
|
314
|
+
animeInfo.image = image;
|
|
315
|
+
animeInfo.description = desc;
|
|
316
|
+
animeInfo.title = {
|
|
317
|
+
english: $('.js-alternative-titles.hide').children().eq(0).text().replace('English: ', '').trim(),
|
|
318
|
+
romaji: $('.title-name').text(),
|
|
319
|
+
native: $('.js-alternative-titles.hide').parent().children().eq(9).text().trim(),
|
|
320
|
+
userPreferred: $('.js-alternative-titles.hide').children().eq(0).text().replace('English: ', '').trim(),
|
|
321
|
+
};
|
|
322
|
+
animeInfo.synonyms = $('.js-alternative-titles.hide')
|
|
323
|
+
.parent()
|
|
324
|
+
.children()
|
|
325
|
+
.eq(8)
|
|
326
|
+
.text()
|
|
327
|
+
.replace('Synonyms:', '')
|
|
328
|
+
.trim()
|
|
329
|
+
.split(',');
|
|
330
|
+
animeInfo.studios = [];
|
|
331
|
+
animeInfo.popularity = parseInt($('.numbers.popularity').text().trim().replace('Popularity #', '').trim());
|
|
332
|
+
const producers = [];
|
|
333
|
+
$('a').each(function (i, link) {
|
|
334
|
+
var _a;
|
|
335
|
+
if (((_a = $(link).attr('href')) === null || _a === void 0 ? void 0 : _a.includes('producer')) &&
|
|
336
|
+
$(link).parent().children().eq(0).text() == 'Producers:') {
|
|
337
|
+
producers.push($(link).text());
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
animeInfo.producers = producers;
|
|
341
|
+
// animeInfo.episodes = episodes;
|
|
342
|
+
const teaserDOM = $('.video-promotion > a');
|
|
343
|
+
if (teaserDOM.length > 0) {
|
|
344
|
+
const teaserURL = $(teaserDOM).attr('href');
|
|
345
|
+
const style = $(teaserDOM).attr('style');
|
|
346
|
+
if (teaserURL) {
|
|
347
|
+
animeInfo.trailer = {
|
|
348
|
+
id: (0, utils_1.substringAfter)(teaserURL, 'embed/').split('?')[0],
|
|
349
|
+
site: 'https://youtube.com/watch?v=',
|
|
350
|
+
thumbnail: style ? (0, utils_1.substringBefore)((0, utils_1.substringAfter)(style, "url('"), "'") : '',
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
const ops = $('.theme-songs.js-theme-songs.opnening').find('tr').get();
|
|
355
|
+
const ignoreList = ['Apple Music', 'Youtube Music', 'Amazon Music', 'Spotify'];
|
|
356
|
+
animeInfo.openings = ops.map((element) => {
|
|
357
|
+
//console.log($(element).text().trim());
|
|
358
|
+
const name = $(element).children().eq(1).children().first().text().trim();
|
|
359
|
+
if (!ignoreList.includes(name)) {
|
|
360
|
+
if ($(element).find('.theme-song-index').length != 0) {
|
|
361
|
+
const index = $(element).find('.theme-song-index').text().trim();
|
|
362
|
+
const band = $(element).find('.theme-song-artist').text().trim();
|
|
363
|
+
const episodes = $(element).find('.theme-song-episode').text().trim();
|
|
364
|
+
//console.log($(element).children().eq(1).text().trim().split(index)[1]);
|
|
365
|
+
return {
|
|
366
|
+
name: $(element).children().eq(1).text().trim().split(index)[1].split(band)[0].trim(),
|
|
367
|
+
band: band.replace('by ', ''),
|
|
368
|
+
episodes: episodes,
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
const band = $(element).find('.theme-song-artist').text().trim();
|
|
373
|
+
const episodes = $(element).find('.theme-song-episode').text().trim();
|
|
374
|
+
return {
|
|
375
|
+
name: $(element).children().eq(1).text().trim().split(band)[0].trim(),
|
|
376
|
+
band: band.replace('by ', ''),
|
|
377
|
+
episodes: episodes,
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
animeInfo.openings = animeInfo.openings.filter(function (element) {
|
|
383
|
+
return element !== undefined;
|
|
384
|
+
});
|
|
385
|
+
const eds = $('.theme-songs.js-theme-songs.ending').find('tr').get();
|
|
386
|
+
animeInfo.endings = eds.map((element) => {
|
|
387
|
+
//console.log($(element).text().trim());
|
|
388
|
+
const name = $(element).children().eq(1).children().first().text().trim();
|
|
389
|
+
if (!ignoreList.includes(name)) {
|
|
390
|
+
if ($(element).find('.theme-song-index').length != 0) {
|
|
391
|
+
const index = $(element).find('.theme-song-index').text().trim();
|
|
392
|
+
const band = $(element).find('.theme-song-artist').text().trim();
|
|
393
|
+
const episodes = $(element).find('.theme-song-episode').text().trim();
|
|
394
|
+
//console.log($(element).children().eq(1).text().trim().split(index)[1]);
|
|
395
|
+
return {
|
|
396
|
+
name: $(element).children().eq(1).text().trim().split(index)[1].split(band)[0].trim(),
|
|
397
|
+
band: band.replace('by ', ''),
|
|
398
|
+
episodes: episodes,
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
const band = $(element).find('.theme-song-artist').text().trim();
|
|
403
|
+
const episodes = $(element).find('.theme-song-episode').text().trim();
|
|
404
|
+
return {
|
|
405
|
+
name: $(element).children().eq(1).text().trim().split(band)[0].trim(),
|
|
406
|
+
band: band.replace('by ', ''),
|
|
407
|
+
episodes: episodes,
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
});
|
|
412
|
+
animeInfo.endings = animeInfo.endings.filter(function (element) {
|
|
413
|
+
return element !== undefined;
|
|
414
|
+
});
|
|
415
|
+
const description = $('.spaceit_pad').get();
|
|
416
|
+
description.forEach((elem) => {
|
|
417
|
+
var _a;
|
|
418
|
+
const text = $(elem).text().toLowerCase().trim();
|
|
419
|
+
const key = text.split(':')[0];
|
|
420
|
+
const value = (0, utils_1.substringAfter)(text, `${key}:`).trim();
|
|
421
|
+
switch (key) {
|
|
422
|
+
case 'status':
|
|
423
|
+
animeInfo.status = this.malStatusToMediaStatus(value);
|
|
424
|
+
break;
|
|
425
|
+
case 'episodes':
|
|
426
|
+
animeInfo.totalEpisodes = parseInt(value);
|
|
427
|
+
if (isNaN(animeInfo.totalEpisodes))
|
|
428
|
+
animeInfo.totalEpisodes = 0;
|
|
429
|
+
break;
|
|
430
|
+
case 'premiered':
|
|
431
|
+
animeInfo.season = value.split(' ')[0].toUpperCase();
|
|
432
|
+
break;
|
|
433
|
+
case 'aired':
|
|
434
|
+
const dates = value.split('to');
|
|
435
|
+
if (dates.length >= 2) {
|
|
436
|
+
const start = dates[0].trim();
|
|
437
|
+
const end = dates[1].trim();
|
|
438
|
+
const startDate = new Date(start);
|
|
439
|
+
const endDate = new Date(end);
|
|
440
|
+
if (startDate.toString() !== 'Invalid Date') {
|
|
441
|
+
animeInfo.startDate = {
|
|
442
|
+
day: startDate.getDate(),
|
|
443
|
+
month: startDate.getMonth(),
|
|
444
|
+
year: startDate.getFullYear(),
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
if (endDate.toString() != 'Invalid Date') {
|
|
448
|
+
animeInfo.endDate = {
|
|
449
|
+
day: endDate.getDate(),
|
|
450
|
+
month: endDate.getMonth(),
|
|
451
|
+
year: endDate.getFullYear(),
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
break;
|
|
456
|
+
case 'score':
|
|
457
|
+
animeInfo.rating = parseFloat(value);
|
|
458
|
+
break;
|
|
459
|
+
case 'studios':
|
|
460
|
+
for (const studio of $(elem).find('a'))
|
|
461
|
+
(_a = animeInfo.studios) === null || _a === void 0 ? void 0 : _a.push($(studio).text());
|
|
462
|
+
break;
|
|
463
|
+
case 'rating':
|
|
464
|
+
animeInfo.ageRating = value;
|
|
465
|
+
}
|
|
466
|
+
});
|
|
467
|
+
// Only works on certain animes, so it is unreliable
|
|
468
|
+
// let videoLink = $('.mt4.ar a').attr('href');
|
|
469
|
+
// if (videoLink) {
|
|
470
|
+
// await this.populateEpisodeList(episodes, videoLink);
|
|
471
|
+
// }
|
|
472
|
+
return animeInfo;
|
|
473
|
+
};
|
|
474
|
+
this.provider = provider || new hianime_1.default();
|
|
475
|
+
}
|
|
476
|
+
malStatusToMediaStatus(status) {
|
|
477
|
+
if (status == 'currently airing')
|
|
478
|
+
return models_1.MediaStatus.ONGOING;
|
|
479
|
+
else if (status == 'finished airing')
|
|
480
|
+
return models_1.MediaStatus.COMPLETED;
|
|
481
|
+
else if (status == 'not yet aired')
|
|
482
|
+
return models_1.MediaStatus.NOT_YET_AIRED;
|
|
483
|
+
return models_1.MediaStatus.UNKNOWN;
|
|
484
|
+
}
|
|
485
|
+
async populateEpisodeList(episodes, url, count = 1) {
|
|
486
|
+
try {
|
|
487
|
+
const { data } = await this.client.request({
|
|
488
|
+
method: 'get',
|
|
489
|
+
url: `${url}?p=${count}`,
|
|
490
|
+
headers: {
|
|
491
|
+
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.35',
|
|
492
|
+
},
|
|
493
|
+
});
|
|
494
|
+
let hasEpisodes = false;
|
|
495
|
+
const $ = (0, cheerio_1.load)(data);
|
|
496
|
+
for (const elem of $('.video-list').toArray()) {
|
|
497
|
+
const href = $(elem).attr('href');
|
|
498
|
+
const image = $(elem).find('img').attr('data-src');
|
|
499
|
+
const titleDOM = $(elem).find('.episode-title');
|
|
500
|
+
const title = titleDOM === null || titleDOM === void 0 ? void 0 : titleDOM.text();
|
|
501
|
+
titleDOM.remove();
|
|
502
|
+
const numberDOM = $(elem).find('.title').text().split(' ');
|
|
503
|
+
let number = 0;
|
|
504
|
+
if (numberDOM.length > 1) {
|
|
505
|
+
number = Number(numberDOM[1]);
|
|
506
|
+
}
|
|
507
|
+
if (href && href.indexOf('myanimelist.net/anime') > -1) {
|
|
508
|
+
hasEpisodes = true;
|
|
509
|
+
episodes.push({
|
|
510
|
+
id: '',
|
|
511
|
+
number,
|
|
512
|
+
title,
|
|
513
|
+
image,
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
if (hasEpisodes)
|
|
518
|
+
await this.populateEpisodeList(episodes, url, ++count);
|
|
519
|
+
}
|
|
520
|
+
catch (err) {
|
|
521
|
+
console.error(err);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
fetchEpisodeServers(episodeId) {
|
|
525
|
+
return this.provider.fetchEpisodeServers(episodeId);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
exports.default = Myanimelist;
|
|
529
|
+
//# sourceMappingURL=mal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mal.js","sourceRoot":"","sources":["../../../src/providers/meta/mal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ISearch, IAnimeInfo, IAnimeResult, ISource, IEpisodeServer, MovieParser, TvType, IMovieResult, IMovieInfo, ProxyConfig } from '../../models';
|
|
2
|
+
import { IPeopleResult } from '../../models/types';
|
|
3
|
+
import { AxiosAdapter } from 'axios';
|
|
4
|
+
declare class TMDB extends MovieParser {
|
|
5
|
+
private apiKey;
|
|
6
|
+
readonly name = "TMDB";
|
|
7
|
+
protected baseUrl: string;
|
|
8
|
+
protected apiUrl: string;
|
|
9
|
+
protected logo: string;
|
|
10
|
+
protected classPath: string;
|
|
11
|
+
supportedTypes: Set<TvType>;
|
|
12
|
+
private provider;
|
|
13
|
+
constructor(apiKey?: string, provider?: MovieParser, proxyConfig?: ProxyConfig, adapter?: AxiosAdapter);
|
|
14
|
+
/**
|
|
15
|
+
* @param type trending type: tv series, movie, people or all
|
|
16
|
+
* @param timePeriod trending time period day or week
|
|
17
|
+
* @param page page number
|
|
18
|
+
*/
|
|
19
|
+
fetchTrending: (type: string | "all", timePeriod?: "day" | "week", page?: number) => Promise<ISearch<IMovieResult | IAnimeResult | IPeopleResult>>;
|
|
20
|
+
/**
|
|
21
|
+
* @param query search query
|
|
22
|
+
* @param page page number
|
|
23
|
+
*/
|
|
24
|
+
search: (query: string, page?: number) => Promise<ISearch<IMovieResult | IAnimeResult>>;
|
|
25
|
+
/**
|
|
26
|
+
* @param id media id (anime or movie/tv)
|
|
27
|
+
* @param type movie or tv
|
|
28
|
+
*/
|
|
29
|
+
fetchMediaInfo: (mediaId: string, type: string) => Promise<IMovieInfo | IAnimeInfo>;
|
|
30
|
+
/**
|
|
31
|
+
* Find the id of a media from its title. and extra data. (year, totalSeasons, totalEpisodes)
|
|
32
|
+
* @param title
|
|
33
|
+
* @param extraData
|
|
34
|
+
* @returns id of the media
|
|
35
|
+
*/
|
|
36
|
+
private findIdFromTitle;
|
|
37
|
+
/**
|
|
38
|
+
* @param id media id (anime or movie/tv)
|
|
39
|
+
* @param args optional arguments
|
|
40
|
+
*/
|
|
41
|
+
fetchEpisodeSources: (id: string, ...args: any) => Promise<ISource>;
|
|
42
|
+
/**
|
|
43
|
+
* @param episodeId episode id
|
|
44
|
+
* @param args optional arguments
|
|
45
|
+
**/
|
|
46
|
+
fetchEpisodeServers: (episodeId: string, ...args: any) => Promise<IEpisodeServer[]>;
|
|
47
|
+
}
|
|
48
|
+
export default TMDB;
|