aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRitesh Ghosh <[email protected]>2023-12-16 20:50:51 +0530
committerRitesh Ghosh <[email protected]>2023-12-16 20:50:51 +0530
commit4cf7e460cfc5449fdeea29634fa24c4709473178 (patch)
treec391fffefa5afec2116ce6c2676112da2abbb1d8 /src
parent24538046561b2134e48a2fa576394eb3b9e2a10f (diff)
downloadaniwatch-api-4cf7e460cfc5449fdeea29634fa24c4709473178.tar.xz
aniwatch-api-4cf7e460cfc5449fdeea29634fa24c4709473178.zip
feat: add `anilistID` in response
Diffstat (limited to 'src')
-rw-r--r--src/controllers/animeEpisodeSrcs.controller.ts36
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);