diff options
| author | Ritesh Ghosh <[email protected]> | 2023-12-16 20:50:51 +0530 |
|---|---|---|
| committer | Ritesh Ghosh <[email protected]> | 2023-12-16 20:50:51 +0530 |
| commit | 4cf7e460cfc5449fdeea29634fa24c4709473178 (patch) | |
| tree | c391fffefa5afec2116ce6c2676112da2abbb1d8 /src/controllers | |
| parent | 24538046561b2134e48a2fa576394eb3b9e2a10f (diff) | |
| download | aniwatch-api-4cf7e460cfc5449fdeea29634fa24c4709473178.tar.xz aniwatch-api-4cf7e460cfc5449fdeea29634fa24c4709473178.zip | |
feat: add `anilistID` in response
Diffstat (limited to 'src/controllers')
| -rw-r--r-- | src/controllers/animeEpisodeSrcs.controller.ts | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/src/controllers/animeEpisodeSrcs.controller.ts b/src/controllers/animeEpisodeSrcs.controller.ts index ece094c..e7988df 100644 --- a/src/controllers/animeEpisodeSrcs.controller.ts +++ b/src/controllers/animeEpisodeSrcs.controller.ts @@ -1,13 +1,18 @@ +import axios from "axios"; import createHttpError from "http-errors"; import { type RequestHandler } from "express"; +import { type CheerioAPI, load } from "cheerio"; import { scrapeAnimeEpisodeSources } from "../parsers/index.js"; +import { USER_AGENT_HEADER, SRC_BASE_URL } from "../utils/constants.js"; import { type AnimeServers, Servers } from "../models/anime.js"; import { type AnimeEpisodeSrcsQueryParams } from "../models/controllers/index.js"; +type AnilistID = number | null; + // /anime/episode-srcs?id=${episodeId}?server=${server}&category=${category (dub or sub)} const getAnimeEpisodeSources: RequestHandler< unknown, - Awaited<ReturnType<typeof scrapeAnimeEpisodeSources>>, + Awaited<ReturnType<typeof scrapeAnimeEpisodeSources & AnilistID>>, unknown, AnimeEpisodeSrcsQueryParams > = async (req, res, next) => { @@ -28,9 +33,34 @@ const getAnimeEpisodeSources: RequestHandler< throw createHttpError.BadRequest("Anime episode id required"); } - const data = await scrapeAnimeEpisodeSources(episodeId, server, category); + let anilistID: AnilistID; + const animeURL = new URL(episodeId?.split("?ep=")[0], SRC_BASE_URL)?.href; + + const [episodeSrcData, animeSrc] = await Promise.all([ + scrapeAnimeEpisodeSources(episodeId, server, category), + axios.get(animeURL, { + headers: { + Referer: SRC_BASE_URL, + "User-Agent": USER_AGENT_HEADER, + "X-Requested-With": "XMLHttpRequest", + }, + }), + ]); + + const $: CheerioAPI = load(animeSrc?.data); + + try { + anilistID = Number( + JSON.parse($("body")?.find("#syncData")?.text())?.anilist_id + ); + } catch (err) { + anilistID = null; + } - res.status(200).json(data); + res.status(200).json({ + ...episodeSrcData, + anilistID, + }); } catch (err: any) { console.error(err); next(err); |
