import { Info, Link, ProviderContext } from "../types"; const headers = { Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cache-Control": "no-store", "Accept-Language": "en-US,en;q=0.9", DNT: "1", "sec-ch-ua": '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"', "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": '"Windows"', "Sec-Fetch-Dest": "document", "Sec-Fetch-Mode": "navigate", "Sec-Fetch-Site": "none", "Sec-Fetch-User": "?1", Cookie: "xla=s4t; _ga=GA1.1.1081149560.1756378968; _ga_BLZGKYN5PF=GS2.1.s1756378968$o1$g1$t1756378984$j44$l0$h0", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0", }; export const getMeta = async ({ link, providerContext, }: { link: string; providerContext: ProviderContext; }): Promise => { try { const { axios, cheerio } = providerContext; const url = link; console.log("url", url); const baseUrl = url.split("/").slice(0, 3).join("/"); const response = await axios.get(url, { headers: { ...headers, Referer: baseUrl, }, }); const $ = cheerio.load(response.data); const infoContainer = $( ".entry-content, .post-inner, .post-content, .page-body" ); // title let title = $("h1.post-title").text().trim(); if (!title) { const heading = infoContainer?.find("h3"); const titleRegex = /Name: (.+)/; title = heading?.next("p")?.text()?.match(titleRegex)?.[1] || ""; } // console.log(title); // imdbId let imdbId = $('a[href*="imdb.com"]').attr("href")?.match(/tt\d+/)?.[0] || ""; if (!imdbId) { const heading = infoContainer?.find("h3"); imdbId = //@ts-ignore heading ?.next("p") ?.find("a")?.[0] ?.attribs?.href?.match(/tt\d+/g)?.[0] || infoContainer.text().match(/tt\d+/g)?.[0] || ""; } // console.log(imdbId) // type let type = "movie"; const categories = $(".post-categories a") .map((i, el) => $(el).text().toLowerCase()) .get(); if ( categories.some( (c) => c.includes("series") || c.includes("drama") || c.includes("anime") ) || title.toLowerCase().includes("season") ) { type = "series"; } else { const heading = infoContainer?.find("h3"); if (heading?.next("p")?.text()?.includes("Series Name")) { type = "series"; } } // console.log(type); // synopsis let synopsis = ""; const synopsisHeader = $("h3").filter( (i, el) => $(el).text().includes("SYNOPSIS/PLOT") || $(el).text().includes("Plot") ); if (synopsisHeader.length > 0) { synopsis = synopsisHeader.next("p").text().trim(); } if (!synopsis) { const synopsisNode = //@ts-ignore infoContainer?.find("p")?.next("h3,h4")?.next("p")?.[0]?.children?.[0]; synopsis = synopsisNode && "data" in synopsisNode ? synopsisNode.data : ""; } // console.log(synopsis); // image let image = infoContainer?.find("img[data-lazy-src]")?.attr("data-lazy-src") || infoContainer ?.find("img") ?.filter((i, el) => { const src = $(el).attr("src"); return ( !!src && !src.includes("logo") && !src.includes("svg") && !src.includes("placeholder") && !src.includes("icon") ); }) ?.first() ?.attr("src") || ""; if (image.startsWith("//")) { image = "https:" + image; } // console.log(image); console.log({ title, synopsis, image, imdbId, type }); /// Links let hr = infoContainer?.first()?.find("hr"); // Try to find the HR before the download buttons if possible const firstButton = $(".dwd-button").first(); if (firstButton.length > 0) { const containerP = firstButton.closest("p"); let prev = containerP.prev(); while (prev.length && !prev.is("hr")) { prev = prev.prev(); } if (prev.is("hr")) { hr = prev; } } const list = hr?.nextUntil("hr"); const links: Link[] = []; list.each((index, element: any) => { element = $(element); // title const title = element?.text() || ""; const quality = element?.text().match(/\d+p\b/)?.[0] || ""; // console.log(title); // movieLinks const movieLinks = element ?.next() .find(".dwd-button") .text() .toLowerCase() .includes("download") || element .next() .find("a") .text() .toLowerCase() .includes("download") ? element?.next().find(".dwd-button")?.parent()?.attr("href") || element?.next().find("a[href]")?.attr("href") : ""; // episode links const vcloudLinks = element ?.next() .find( ".btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: white;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: #fdf8f2;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152);color: white']" ) ?.parent() ?.attr("href"); const episodesLink = (vcloudLinks ? vcloudLinks : element ?.next() .find(".dwd-button") .text() .toLowerCase() .includes("episode") ? element?.next().find(".dwd-button")?.parent()?.attr("href") : "") || element ?.next() .find( ".btn-outline[style='background:linear-gradient(135deg,#0ebac3,#09d261); color: white;']" ) ?.parent() ?.attr("href"); if (movieLinks || episodesLink) { links.push({ title, directLinks: movieLinks ? [{ title: "Movie", link: movieLinks, type: "movie" }] : [], episodesLink, quality, }); } }); // console.log(links); return { title, synopsis, image, imdbId, type, linkList: links, }; } catch (error) { console.log("getInfo error"); console.error(error); // ToastAndroid.show('No response', ToastAndroid.SHORT); return { title: "", synopsis: "", image: "", imdbId: "", type: "", linkList: [], }; } };