UNPKG

rsshub

Version:
100 lines (98 loc) 3.4 kB
import "./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 "./ofetch-BIyrKU3Y.mjs"; import "./helpers-DxBp0Pty.mjs"; import { t as got_default } from "./got-KxxWdaxq.mjs"; import { load } from "cheerio"; //#region lib/routes/nytimes/book.ts const categoryList = { "combined-print-and-e-book-nonfiction": "Combined Print & E-Book Nonfiction", "hardcover-nonfiction": "Hardcover Nonfiction", "paperback-nonfiction": "Paperback Nonfiction", "advice-how-to-and-miscellaneous": "Advice, How-To & Miscellaneous", "combined-print-and-e-book-fiction": "Combined Print & E-Book Fiction", "hardcover-fiction": "Hardcover Fiction", "trade-fiction-paperback": "Paperback Trade Fiction", "childrens-middle-grade-hardcover": "Children's Middle Grade Hardcover", "picture-books": "Picture Books", "series-books": "Series Books", "young-adult-hardcover": "Young Adult Hardcover" }; const route = { path: "/book/:category?", categories: ["traditional-media"], view: ViewType.Notifications, example: "/nytimes/book/combined-print-and-e-book-nonfiction", parameters: { category: { description: "Category, can be found on the [official page](https://www.nytimes.com/books/best-sellers/)", options: Object.keys(categoryList).map((key) => ({ value: key, label: categoryList[key] })), default: "combined-print-and-e-book-nonfiction" } }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["nytimes.com/"], target: "" }], name: "Best Seller Books", maintainers: ["melvinto", "pseudoyu"], handler, url: "nytimes.com/" }; async function handler(ctx) { const category = ctx.req.param("category") ?? "combined-print-and-e-book-nonfiction"; const url = `https://www.nytimes.com/books/best-sellers/${category}`; let items = []; let dataTitle = ""; if (categoryList[category]) { const data = (await got_default({ method: "get", url })).data; const $ = load(data); dataTitle = $("h1").eq(0).text(); items = $("article[itemprop=itemListElement]").toArray().map((elem, index) => { const $item = $(elem); const firstInfo = $item.find("p").eq(0).text(); const $name = $item.find("h3[itemprop=name]"); const author = $item.find("p[itemprop=author]").text(); const publisher = $item.find("p[itemprop=publisher]").text(); const description = $item.find("p[itemprop=description]").text(); const imageLink = $item.find("img[itemprop=image]").attr("src"); const links = $item.find("ul[aria-label=\"Links to Book Retailers\"]").find("a").toArray(); let primaryLink = links.length > 0 ? $(links[0]).attr("href") : ""; for (const link of links) { const l = $(link); if (l.text() === "Amazon") { primaryLink = l.attr("href"); break; } } return { title: `${index + 1}: ${$name.text()}`, author, description: `<figure><img src="${imageLink}" alt="test"/><figcaption><span>${description}</span></figcaption></figure><br/>${firstInfo}<br/>Author: ${author}<br/>Publisher: ${publisher}`, link: primaryLink }; }); } return { title: `The New York Times Best Sellers - ${dataTitle}`, link: url, item: items }; } //#endregion export { route };