rsshub
Version:
Make RSS Great Again!
89 lines (87 loc) • 2.89 kB
JavaScript
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 };