diff --git a/README.md b/README.md index d80b96f..0c58fc2 100644 --- a/README.md +++ b/README.md @@ -903,6 +903,13 @@ console.log(data); }, {...} ], + raw: [ + { + serverId: 1, + serverName: "megacloud", + }, + {...} + ], } ``` @@ -918,11 +925,11 @@ https://api-aniwatch.onrender.com/anime/episode-srcs?id={episodeId}&server={serv #### Query Parameters -| Parameter | Type | Description | Required? | Default | -| :--------: | :----: | :-------------------------------------------: | :-------: | :--------------: | -| `id` | string | The id of the episode. | Yes | -- | -| `server` | string | The name of the server. | No | `"vidstreaming"` | -| `category` | string | The category of the episode ('sub' or 'dub'). | No | `"sub"` | +| Parameter | Type | Description | Required? | Default | +| :--------: | :----: | :--------------------------------------------------: | :-------: | :--------------: | +| `id` | string | The id of the episode. | Yes | -- | +| `server` | string | The name of the server. | No | `"vidstreaming"` | +| `category` | string | The category of the episode ('sub', 'dub' or 'raw'). | No | `"sub"` | #### Request sample diff --git a/src/parsers/animeEpisodeSrcs.ts b/src/parsers/animeEpisodeSrcs.ts index 104bc4d..913c535 100644 --- a/src/parsers/animeEpisodeSrcs.ts +++ b/src/parsers/animeEpisodeSrcs.ts @@ -25,7 +25,7 @@ import { type ScrapedAnimeEpisodesSources } from "../types/parsers/index.js"; async function scrapeAnimeEpisodeSources( episodeId: string, server: AnimeServers = Servers.VidStreaming, - category: "sub" | "dub" = "sub" + category: "sub" | "dub" | "raw" = "sub" ): Promise { if (episodeId.startsWith("http")) { const serverUrl = new URL(episodeId); diff --git a/src/parsers/episodeServers.ts b/src/parsers/episodeServers.ts index 97b4237..8f95229 100644 --- a/src/parsers/episodeServers.ts +++ b/src/parsers/episodeServers.ts @@ -17,6 +17,7 @@ async function scrapeEpisodeServers( const res: ScrapedEpisodeServers = { sub: [], dub: [], + raw: [], episodeId, episodeNo: 0, }; @@ -60,6 +61,15 @@ async function scrapeEpisodeServers( } ); + $(`.ps_-block.ps_-block-sub.servers-raw .ps__-list .server-item`).each( + (_, el) => { + res.raw.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) { diff --git a/src/types/anime.ts b/src/types/anime.ts index abb15f2..9af00bc 100644 --- a/src/types/anime.ts +++ b/src/types/anime.ts @@ -75,6 +75,7 @@ export interface SubEpisode { serverId: number | null; } export interface DubEpisode extends SubEpisode {} +export interface RawEpisode extends SubEpisode {} export type AnimeCategories = | "most-favorite" diff --git a/src/types/parsers/episodeServers.ts b/src/types/parsers/episodeServers.ts index 2d8cb5e..a003149 100644 --- a/src/types/parsers/episodeServers.ts +++ b/src/types/parsers/episodeServers.ts @@ -1,8 +1,9 @@ -import type { SubEpisode, DubEpisode } from "../anime.js"; +import type { SubEpisode, DubEpisode, RawEpisode } from "../anime.js"; export interface ScrapedEpisodeServers { sub: SubEpisode[]; dub: DubEpisode[]; + raw: RawEpisode[]; episodeNo: number; episodeId: string; } diff --git a/src/utils/methods.ts b/src/utils/methods.ts index 9d89822..1ed0c88 100644 --- a/src/utils/methods.ts +++ b/src/utils/methods.ts @@ -191,7 +191,7 @@ export const extractMostPopularAnimes = ( export function retrieveServerId( $: CheerioAPI, index: number, - category: "sub" | "dub" + category: "sub" | "dub" | "raw" ) { return ( $(`.ps_-block.ps_-block-sub.servers-${category} > .ps__-list .server-item`)