Files
justanime.fun/src/extractors/watchlist.extractor.js
2026-03-01 12:39:28 +05:30

64 lines
1.9 KiB
JavaScript

import axios from "axios";
import * as cheerio from "cheerio";
import { v1_base_url } from "../utils/base_v1.js";
export default async function extractWatchlist(userId, page = 1) {
try {
const url = `https://${v1_base_url}/community/user/${userId}/watch-list?page=${page}`;
const { data } = await axios.get(url);
const $ = cheerio.load(data);
const watchlist = [];
const totalPages =
Number(
$('.pre-pagination nav .pagination > .page-item a[title="Last"]')
?.attr("href")
?.split("=")
.pop() ??
$('.pre-pagination nav .pagination > .page-item a[title="Next"]')
?.attr("href")
?.split("=")
.pop() ??
$(".pre-pagination nav .pagination > .page-item.active a")
?.text()
?.trim()
) || 1;
$(".flw-item").each((index, element) => {
const title = $(".film-name a", element).text().trim();
const poster = $(".film-poster img", element).attr("data-src");
const duration = $(".fdi-duration", element).text().trim();
const type = $(".fdi-item", element).first().text().trim();
const id = $(".film-poster a", element).attr("data-id");
const subCount = $(".tick-item.tick-sub", element).text().trim();
const dubCount = $(".tick-item.tick-dub", element).text().trim();
const link = $(".film-name a", element).attr("href");
const animeId = link.split("/").pop();
watchlist.push({
id: animeId,
title,
poster,
duration,
type,
subCount,
dubCount,
link: `https://${v1_base_url}${link}`,
showType: type,
tvInfo: {
showType: type,
duration: duration,
sub: subCount,
dub: dubCount,
},
});
});
return { watchlist, totalPages };
} catch (error) {
console.error("Error fetching watchlist:", error.message);
throw error;
}
}