rsshub
Version:
Make RSS Great Again!
142 lines (140 loc) • 3.56 kB
JavaScript
import "./esm-shims-CzJ_djXG.mjs";
import "./config-C37vj7VH.mjs";
import "./dist-BInvbO1W.mjs";
import "./logger-Czu8UMNd.mjs";
import "./ofetch-BIyrKU3Y.mjs";
import { t as parseDate } from "./parse-date-BrP7mxXf.mjs";
import "./helpers-DxBp0Pty.mjs";
import { t as got_default } from "./got-KxxWdaxq.mjs";
//#region lib/routes/geocaching/blogs.ts
const route = {
path: "/blogs/:language?",
categories: ["blog"],
example: "/geocaching/blogs/en",
parameters: { language: {
description: "language",
default: "en",
options: [
{
value: "en",
label: "English"
},
{
value: "de",
label: "Deutsch"
},
{
value: "fr",
label: "Français"
},
{
value: "es",
label: "Español"
},
{
value: "nl",
label: "Nederlands"
},
{
value: "cs",
label: "Čeština"
},
{
value: "all",
label: "Not Specified"
}
]
} },
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false
},
radar: [{ source: ["geocaching.com/blog/", "geocaching.com/"] }],
name: "Official Blogs",
maintainers: ["HankChow", "Konano"],
handler,
url: "geocaching.com/blog/"
};
const languageToCategory = {
de: 140,
fr: 138,
es: 702,
nl: 737,
cs: 1404
};
const languageToLabel = {
de: "Deutsch",
fr: "Français",
es: "Español",
nl: "Nederlands",
cs: "Čeština"
};
async function handler(ctx) {
const baseUrl = "https://www.geocaching.com";
const language = ctx.req.param("language") ?? "en";
const searchParams = {
per_page: ctx.req.query("limit") ?? 20,
_embed: 1,
_fields: [
"id",
"title",
"link",
"guid",
"content",
"date_gmt",
"modified_gmt",
"_embedded",
"_links"
].join(",")
};
if (language === "en") searchParams.categories_exclude = Object.values(languageToCategory).join(",");
else if (language in languageToCategory) searchParams.categories = languageToCategory[language];
else if (language === "all") {} else throw new Error(`Unsupported language: ${language}`);
const { data: response } = await got_default(`${baseUrl}/blog/wp-json/wp/v2/posts`, { searchParams });
const items = response.map((item) => {
const media = item._embedded["wp:featuredmedia"][0];
const mediaDetails = media?.media_details;
const mediaSize = mediaDetails?.sizes.large || mediaDetails?.sizes.full;
return {
title: item.title.rendered.trim(),
link: item.link,
guid: item.guid.rendered,
description: item.content.rendered,
pubDate: parseDate(item.date_gmt),
updated: parseDate(item.modified_gmt),
author: item._embedded.author[0].name,
category: item._embedded["wp:term"][0].map((category) => category.name.trim()),
media: mediaSize ? {
content: {
url: media.source_url,
type: media.mime_type,
height: mediaDetails.height,
width: mediaDetails.width,
fileSize: mediaDetails.filesize
},
thumbnail: {
url: mediaSize.source_url,
height: mediaSize.height,
width: mediaSize.width
}
} : void 0
};
});
return {
title: language in languageToLabel ? `Geocaching Blog - ${languageToLabel[language]}` : "Geocaching Blog",
link: `${baseUrl}/blog/`,
language: language in languageToCategory ? language : "en",
image: "https://i.ytimg.com/vi_webp/G28VxvBoSLQ/maxresdefault.webp",
icon: `${baseUrl}/blog/favicon.ico`,
logo: `${baseUrl}/blog/favicon.ico`,
description: "Geocaching Official Blog",
item: items,
allowEmpty: true
};
}
//#endregion
export { route };