UNPKG

rsshub

Version:
88 lines (86 loc) 3.89 kB
import { t as parseDate } from "./parse-date-Cr0wQjV_.mjs"; import { t as got_default } from "./got-BTowW50G.mjs"; import { jsx } from "hono/jsx/jsx-runtime"; import { load } from "cheerio"; import { renderToString } from "hono/jsx/dom/server"; //#region lib/routes/aqara/post.tsx const route = { path: "/:path{.+}?", categories: ["other"], example: "/aqara/en/category/press-release", parameters: { path: "路径,默认为首页" }, description: `路径处填写对应页面 URL 中 \`https://aqara.com/\` 后的字段,形如 \`:region/category/:id\` 或 \`:region/tag/:id\`。 | 参数 | 说明 | | ------ | -------------------------------------------------------- | | region | 地区 id,可在对应分类页 URL 中找到,默认为 en,即 Global | | id | 分类 id 或标签 id,可在对应分类页或标签页 URL 中找到 |`, name: "分类、标签", maintainers: ["nczitzk"], handler }; async function handler(ctx) { const limit = ctx.req.query("limit") ? Number(ctx.req.query("limit")) : 50; const rootUrl = "https://aqara.com"; const apiSlug = "wp-json/wp/v2"; let filterName; let currentUrl = rootUrl; let apiUrl = new URL(`${apiSlug}/posts?_embed=true&per_page=${limit}`, rootUrl).href; const filterMatches = (ctx.req.param("path") ?? "").match(/^([^/]*)\/([^/]*)\/(.*)$/); if (filterMatches) { const filterRegion = filterMatches[1]; const filterType = filterMatches[2] === "tag" ? "tags" : filterMatches[2] === "category" ? "categories" : filterMatches[2]; const filterKeyword = decodeURI(filterMatches[3].split("/").pop()); const filterApiUrl = new URL(`${filterRegion}/${apiSlug}/${filterType}?search=${filterKeyword}`, rootUrl).href; const { data: filterResponse } = await got_default(filterApiUrl); const filter = filterResponse.pop(); if (filter?.id ?? void 0) { filterName = filter.name ?? filterKeyword; currentUrl = filter.link ?? currentUrl; apiUrl = new URL(`${filterRegion}/${apiSlug}/posts?_embed=true&per_page=${limit}&${filterType}=${filter.id}`, rootUrl).href; } } const { data: response } = await got_default(apiUrl); const items = response.slice(0, limit).map((item) => { const terminologies = item._embedded["wp:term"]; const content = load(item.content?.rendered ?? item.content); content("figure").each((_, el) => { const image = content(el).find("img"); const src = (image.prop("data-actualsrc") ?? image.prop("data-original") ?? image.prop("src")).replace(/(-\d+x\d+)/, ""); const width = image.prop("data-rawwidth") ?? image.prop("width"); const height = image.prop("data-rawheight") ?? image.prop("height"); content(el).replaceWith(renderToString(/* @__PURE__ */ jsx("figure", { children: /* @__PURE__ */ jsx("img", { src, width, height }) }))); }); return { title: item.title?.rendered ?? item.title, link: item.link, description: content.html(), author: item._embedded.author.map((a) => a.name).join("/"), category: terminologies.flat().map((c) => c.name), guid: item.guid?.rendered ?? item.guid, pubDate: parseDate(item.date_gmt), updated: parseDate(item.modified_gmt) }; }); const { data: currentResponse } = await got_default(currentUrl); const $ = load(currentResponse); const icon = $("link[rel=\"apple-touch-icon\"]").first().prop("href"); const title = $("meta[property=\"og:site_name\"]").prop("content") ?? "Aqara"; return { item: items, title: `${title}${filterName ? ` - ${filterName}` : ""}`, link: currentUrl, description: $("meta[property=\"og:title\"]").prop("content"), language: $("meta[property=\"og:locale\"]").prop("content"), image: $("meta[name=\"msapplication-TileImage\"]").prop("content"), icon, logo: icon, subtitle: $("meta[property=\"og:type\"]").prop("content"), author: title }; } //#endregion export { route };