rsshub
Version:
Make RSS Great Again!
71 lines (70 loc) • 2.5 kB
JavaScript
import { t as got_default } from "./got-BDnf4rdT.mjs";
import { jsx } from "hono/jsx/jsx-runtime";
import { load } from "cheerio";
import { renderToString } from "hono/jsx/dom/server";
//#region lib/routes/patagonia/new-arrivals.tsx
const host = "https://www.patagonia.com";
const categoryMap = {
mens: ["mens-new", "mens-new-arrivals"],
womens: ["womens-new", "womens-new-arrivals"],
kids: ["kids-new-arrivals", "kids-baby-new-arrivals"],
luggage: ["luggage-new-arrivals", "luggage-new-arrivals"]
};
function extractSfrmUrl(url) {
const urlObj = new URL(url);
const sfrmValue = urlObj.searchParams.get("sfrm");
urlObj.search = new URLSearchParams({ sfrm: String(sfrmValue) }).toString();
return urlObj.href;
}
const route = {
path: "/new-arrivals/:category",
categories: ["shopping"],
example: "/patagonia/new-arrivals/mens",
parameters: { category: "category, see below" },
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false
},
name: "New Arrivals",
maintainers: ["IvanWng97"],
handler,
description: `| Men's | Women's | Kids' & Baby | Packs & Gear |
| ----- | ------- | ------------ | ------------ |
| mens | womens | kids | luggage |`
};
async function handler(ctx) {
const category = ctx.req.param("category");
const data = (await got_default({
method: "get",
url: `${host}/on/demandware.store/Sites-patagonia-us-Site/en_US/Search-LazyGrid`,
searchParams: {
cgid: categoryMap[category][0],
isLazyGrid: true
}
})).data;
const $ = load(data);
const list = $(".product").toArray().map((element) => {
const data = {
title: $(element).find(".product-tile").data("tealium").product_name[0],
link: "https://www.patagonia.com/" + $(element).find("[itemprop=\"url\"]").attr("href"),
description: "",
category: $(element).find("[itemprop=\"category\"]").attr("content")
};
let imgUrl = new URL($(element).find("[itemprop=\"image\"]").attr("content"));
imgUrl = extractSfrmUrl(imgUrl);
data.description = $(element).find("[itemprop=\"price\"]").eq(0).text() + renderToString(/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("img", { src: imgUrl }) }));
return data;
});
return {
title: `Patagonia - New Arrivals - ${category.toUpperCase()}`,
link: `${host}/shop/${categoryMap[category][1]}`,
description: `Patagonia - New Arrivals - ${category.toUpperCase()}`,
item: list
};
}
//#endregion
export { route };