aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWBRK-dev <[email protected]>2024-04-28 11:25:12 +0200
committerWBRK-dev <[email protected]>2024-04-28 11:25:12 +0200
commit8abde11e7b09652447938afda936b0fa2bca7c76 (patch)
tree9732e6f17f851d3dcd602355a16a54f5eb1aec0f /src
parent0a291ad659aa9095fa443cfd55b094b2036920da (diff)
downloadaniwatch-api-8abde11e7b09652447938afda936b0fa2bca7c76.tar.xz
aniwatch-api-8abde11e7b09652447938afda936b0fa2bca7c76.zip
feat: added promotional videos to `/info` endpoint response
Diffstat (limited to 'src')
-rw-r--r--src/parsers/animeAboutInfo.ts16
-rw-r--r--src/types/anime.ts7
2 files changed, 23 insertions, 0 deletions
diff --git a/src/parsers/animeAboutInfo.ts b/src/parsers/animeAboutInfo.ts
index 54af57f..7b2e422 100644
--- a/src/parsers/animeAboutInfo.ts
+++ b/src/parsers/animeAboutInfo.ts
@@ -10,6 +10,8 @@ import axios, { AxiosError } from "axios";
import createHttpError, { type HttpError } from "http-errors";
import { load, type CheerioAPI, type SelectorType } from "cheerio";
import { type ScrapedAnimeAboutInfo } from "../types/parsers/index.js";
+import type { AnimePromotionalVideo } from "../types/anime.js";
+import * as fs from "fs/promises";
// /anime/info?id=${anime-id}
async function scrapeAnimeAboutInfo(
@@ -34,6 +36,7 @@ async function scrapeAnimeAboutInfo(
type: null,
duration: null,
},
+ promotionalVideos: [],
},
moreInfo: {},
},
@@ -55,6 +58,8 @@ async function scrapeAnimeAboutInfo(
const $: CheerioAPI = load(mainPage.data);
+ // fs.writeFile("./about.html", mainPage.data);
+
try {
res.anime.info.anilistId = Number(
JSON.parse($("body")?.find("#syncData")?.text())?.anilist_id
@@ -116,6 +121,17 @@ async function scrapeAnimeAboutInfo(
?.replace(/[\s\n]+/g, " ")
?.split(" ")
?.pop() || null;
+
+ // get promotional videos
+ $(".block_area.block_area-promotions .block_area-promotions-list .screen-items .item").each(
+ (_, el) => {
+ res.anime.info.promotionalVideos.push({
+ title: $(el).attr("data-title"),
+ source: $(el).attr("data-src"),
+ thumbnail: $(el).find("img").attr("src"),
+ });
+ }
+ );
// more information
$(`${selector} .anisc-info-wrap .anisc-info .item:not(.w-hide)`).each(
diff --git a/src/types/anime.ts b/src/types/anime.ts
index 9af00bc..cbb80c5 100644
--- a/src/types/anime.ts
+++ b/src/types/anime.ts
@@ -48,6 +48,7 @@ export interface AnimeGeneralAboutInfo
stats: {
quality: string | null;
} & Pick<Anime, "duration" | "episodes" | "rating" | "type">;
+ promotionalVideos: AnimePromotionalVideo[];
}
export interface RecommendedAnime extends Anime {}
@@ -59,6 +60,12 @@ export interface Season extends Pick<Anime, CommonAnimeProps> {
title: string | null;
}
+export interface AnimePromotionalVideo {
+ title: string | undefined;
+ source: string | undefined;
+ thumbnail: string | undefined;
+}
+
export interface AnimeSearchSuggestion
extends Omit<MostPopularAnime, "episodes" | "type"> {
moreInfo: Array<string>;