UNPKG

rsshub

Version:
89 lines (87 loc) 2.89 kB
import "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import "./dist-BInvbO1W.mjs"; import { t as logger_default } from "./logger-Czu8UMNd.mjs"; import { t as ofetch_default } from "./ofetch-BIyrKU3Y.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import { t as invalid_parameter_default } from "./invalid-parameter-rr4AgGpp.mjs"; //#region lib/routes/baselang/index.ts const ROOT_URL = "https://baselang.com"; const API_BASE = `${ROOT_URL}/wp-json/wp/v2`; const CATEGORY_SLUG_TO_ID = { "advanced-grammar": 5, "basic-grammar": 4, company: 8, confidence: 9, french: 24, humor: 15, medellin: 23, motivation: 6, pronunciation: 11, "study-tips": 7, "success-stories": 14, travel: 13, uncategorized: 1, vocabulary: 12 }; const CATEGORY_OPTIONS = Object.keys(CATEGORY_SLUG_TO_ID).map((slug) => ({ label: slug, value: slug })); const route = { path: "/blog/:category?", categories: ["blog"], example: "/baselang/blog", parameters: { category: { description: "Optional category filter", options: CATEGORY_OPTIONS } }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["baselang.com/blog", "baselang.com/blog/:category"], target: "/blog/:category" }], name: "Blog", maintainers: ["johan456789"], handler }; async function handler(ctx) { const categoryParam = (ctx.req.param("category") ?? "").toLowerCase(); logger_default.debug(`BaseLang: received request, category='${categoryParam || "all"}'`); if (categoryParam && !Object.hasOwn(CATEGORY_SLUG_TO_ID, categoryParam)) { logger_default.debug(`BaseLang: invalid category '${categoryParam}'`); throw new invalid_parameter_default(`Invalid category: ${categoryParam}. Valid categories are: ${Object.keys(CATEGORY_SLUG_TO_ID).join(", ")}`); } const searchParams = ["per_page=20", "_embed=author,wp:term"]; if (categoryParam) { const id = CATEGORY_SLUG_TO_ID[categoryParam]; searchParams.push(`categories=${id}`); } const data = await ofetch_default(`${API_BASE}/posts?${searchParams.join("&")}`); logger_default.debug(`BaseLang: fetched ${data.length} posts`); const items = data.map((post) => ({ title: post.title?.rendered, description: post.content?.rendered ?? post.excerpt?.rendered ?? "", link: post.link, pubDate: parseDate(post.date_gmt ?? post.date), author: post._embedded?.author?.[0]?.name, category: Array.isArray(post._embedded?.["wp:term"]) ? post._embedded["wp:term"].flat().map((term) => term?.name).filter(Boolean) : void 0 })); const titleSuffix = categoryParam ? ` - ${categoryParam}` : ""; const link = categoryParam ? `${ROOT_URL}/blog/${categoryParam}/` : `${ROOT_URL}/blog/`; return { title: `BaseLang Blog${titleSuffix}`, link, language: "en", item: items }; } //#endregion export { route };