UNPKG

rsshub

Version:
78 lines (76 loc) 2.56 kB
import { n as init_esm_shims, t as __dirname } from "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import { t as ViewType } from "./types-D84BRIt4.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import { t as ofetch_default } from "./ofetch-BIyrKU3Y.mjs"; import { t as art } from "./render-BQo6B4tL.mjs"; import path from "node:path"; import * as cheerio from "cheerio"; //#region lib/routes/imdb/chart.ts init_esm_shims(); const render = (data) => art(path.join(__dirname, "templates/chart-2e926210.art"), data); const route = { path: "/chart/:chart?", categories: ["multimedia"], view: ViewType.Notifications, parameters: { chart: { description: "The chart to display, `top` by default", options: [ { value: "top", label: "Top 250 Movies" }, { value: "moviemeter", label: "Most Popular Movies" }, { value: "toptv", label: "Top 250 TV Shows" }, { value: "tvmeter", label: "Most Popular TV Shows" } ], default: "top" } }, example: "/imdb/chart", radar: [{ source: ["www.imdb.com/chart/:chart/"] }], name: "Charts", maintainers: ["TonyRL"], handler, url: "www.imdb.com/chart/top/", description: `| Top 250 Movies | Most Popular Movies | Top 250 TV Shows | Most Popular TV Shows | | -------------- | ------------------- | ---------------- | --------------------- | | top | moviemeter | toptv | tvmeter |` }; async function handler(ctx) { const { chart = "top" } = ctx.req.param(); const baseUrl = "https://www.imdb.com"; const link = `${baseUrl}/chart/${chart}/`; const response = await ofetch_default(link); const $ = cheerio.load(response); const chartTitles = JSON.parse($("script#__NEXT_DATA__").text()).props.pageProps.pageData.chartTitles; const items = chartTitles.edges.map(({ currentRank, node }) => ({ title: `${currentRank}. ${node.titleText.text} (${node.releaseYear.year}${node.releaseYear.endYear ? `-${node.releaseYear.endYear}` : ""})`, description: render({ primaryImage: node.primaryImage, originalTitleText: node.originalTitleText, certificate: node.certificate, ratingsSummary: node.ratingsSummary, plot: node.plot }), link: `${baseUrl}/title/${node.id}`, category: node.titleGenres.genres.map((g) => chartTitles.genres.find((genre) => genre.filterId === g.genre.text)?.text) })); return { title: $("head title").text(), description: $("head meta[name=\"description\"]").attr("content"), link, item: items }; } //#endregion export { route };