rsshub
Version:
Make RSS Great Again!
101 lines (96 loc) • 2.61 kB
JavaScript
import "./esm-shims-CzJ_djXG.mjs";
import "./config-C37vj7VH.mjs";
import "./dist-BInvbO1W.mjs";
import "./logger-Czu8UMNd.mjs";
import { t as ofetch_default } from "./ofetch-BIyrKU3Y.mjs";
import { t as parseDate } from "./parse-date-BrP7mxXf.mjs";
import "./cache-Bo__VnGm.mjs";
import { t as getArticle } from "./utils-CVZPiRM4.mjs";
//#region lib/routes/mirrormedia/category.ts
const route = {
path: ["/category/:category", "/section/:section"],
categories: ["traditional-media"],
example: "/mirrormedia/category/political",
parameters: {
category: "分类名",
section: "子板名"
},
name: "分类",
maintainers: ["dzx-dzx"],
radar: [{ source: ["mirrormedia.mg/category/:category", "mirrormedia.mg/section/:section"] }],
handler
};
async function handler(ctx) {
const { category, section } = ctx.req.param();
const categoryFilter = category ? { categories: { some: { slug: { equals: category } } } } : {};
const sectionFilter = section ? { sections: { some: { slug: { equals: section } } } } : {};
const rootUrl = "https://www.mirrormedia.mg";
const items = (await ofetch_default("https://adam-weekly-api-server-prod-ufaummkd5q-de.a.run.app/content/graphql", {
method: "POST",
body: {
variables: {
take: ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit"), 10) : 24,
skip: 0,
orderBy: { publishedDate: "desc" },
filter: {
state: { equals: "published" },
...categoryFilter,
...sectionFilter
}
},
query: `
fragment section on Section {
id
name
slug
state
__typename
}
fragment category on Category {
id
name
slug
state
__typename
}
fragment listingPost on Post {
id
slug
title
brief
publishedDate
state
sections(where: {state: {equals: "active"}}) {
...section
__typename
}
categories(where: {state: {equals: "active"}}) {
...category
__typename
}
isFeatured
__typename
}
query ($take: Int, $skip: Int, $orderBy: [PostOrderByInput!]!, $filter: PostWhereInput!) {
postsCount(where: $filter)
posts(take: $take, skip: $skip, orderBy: $orderBy, where: $filter) {
...listingPost
__typename
}
}`
}
})).data.posts.map((e) => ({
title: e.title,
pubDate: parseDate(e.publishedDate),
category: [...(e.sections ?? []).map((_) => `section:${_.name}`), ...(e.categories ?? []).map((_) => `category:${_.name}`)],
link: `${rootUrl}/story/${e.slug}`
}));
const list = await Promise.all(items.map((item) => getArticle(item)));
return {
title: `鏡週刊 Mirror Media - ${category}`,
link: rootUrl,
item: list
};
}
//#endregion
export { route };