feat(episodeServers): added scrapeEpisodeServers parser

This commit is contained in:
Ritesh Ghosh
2023-08-28 17:48:57 +05:30
parent dfe284a9a7
commit 64ede2033c
+75
View File
@@ -0,0 +1,75 @@
import {
SRC_BASE_URL,
SRC_AJAX_URL,
ACCEPT_HEADER,
USER_AGENT_HEADER,
ACCEPT_ENCODING_HEADER,
} from "../utils";
import axios, { AxiosError } from "axios";
import createHttpError, { HttpError } from "http-errors";
import { load, CheerioAPI, SelectorType } from "cheerio";
import { ScrapedEpisodeServers } from "../models/parsers";
// /anime/servers?episodeId=${id}
async function scrapeEpisodeServers(
episodeId: string
): Promise<ScrapedEpisodeServers | HttpError> {
const res: ScrapedEpisodeServers = {
sub: [],
dub: [],
episodeId,
episodeNo: 0,
};
try {
const epId = episodeId.split("?ep=")[1];
const { data } = await axios.get(
`${SRC_AJAX_URL}/v2/episode/servers?episodeId=${epId}`,
{
headers: {
Accept: ACCEPT_HEADER,
"User-Agent": USER_AGENT_HEADER,
"X-Requested-With": "XMLHttpRequest",
"Accept-Encoding": ACCEPT_ENCODING_HEADER,
Referer: new URL(`/watch/${episodeId}`, SRC_BASE_URL).href,
},
}
);
const $: CheerioAPI = load(data.html);
const epNoSelector: SelectorType = ".server-notice strong";
res.episodeNo = Number($(epNoSelector).text().split(" ").pop()) || 0;
$(`.ps_-block.ps_-block-sub.servers-sub .ps__-list .server-item`).each(
(_, el) => {
res.sub.push({
serverName: $(el).find("a").text().toLowerCase().trim(),
serverId: Number($(el)?.attr("data-server-id")?.trim()) || null,
});
}
);
$(`.ps_-block.ps_-block-sub.servers-dub .ps__-list .server-item`).each(
(_, el) => {
res.dub.push({
serverName: $(el).find("a").text().toLowerCase().trim(),
serverId: Number($(el)?.attr("data-server-id")?.trim()) || null,
});
}
);
return res;
} catch (err: any) {
if (err instanceof AxiosError) {
throw createHttpError(
err?.response?.status || 500,
err?.response?.statusText || "Something went wrong"
);
}
throw createHttpError.InternalServerError(err?.message);
}
}
export default scrapeEpisodeServers;