rsshub
Version:
Make RSS Great Again!
55 lines (54 loc) • 2.94 kB
JavaScript
import { t as rofetch } from "./ofetch-C3ts-Hud.mjs";
import { t as cache_default } from "./cache-BkqOokyU.mjs";
import { Fragment, jsx } from "hono/jsx/jsx-runtime";
import { renderToString } from "hono/jsx/dom/server";
//#region lib/routes/meteor/templates/desc.tsx
const Media = ({ youTube, img, video }) => /* @__PURE__ */ jsx(Fragment, { children: youTube ? /* @__PURE__ */ jsx("iframe", {
width: "560",
height: "315",
src: `https://www.youtube-nocookie.com/embed/${youTube}`,
frameborder: "0",
allowfullscreen: true,
referrerpolicy: "strict-origin-when-cross-origin"
}) : img ? /* @__PURE__ */ jsx("img", { src: img }) : video ? /* @__PURE__ */ jsx("video", {
src: video,
controls: true
}) : null });
const renderMedia = (props) => renderToString(/* @__PURE__ */ jsx(Media, { ...props }));
//#endregion
//#region lib/routes/meteor/utils.ts
const baseUrl = "https://meteor.today";
const getBoards = () => cache_default.tryGet("meteor:boards", async () => {
const response = await rofetch(`${baseUrl}/board/get_boards`, {
method: "POST",
body: { isCollege: "false" }
});
return JSON.parse(decodeURIComponent(response.result)).map((item) => ({
title: `${item.category ? `${item.category} - ` : ""}${item.name}`,
description: item.id,
feedDescription: item.description,
category: item.articleCategory,
link: `${baseUrl}/board/${item.alias ?? item.name}`,
alias: item.alias,
imgUrl: item.imageUrl,
id: item.id
})).filter((item, index, arr) => arr.findIndex((i) => i.link === item.link) === index);
});
const renderDesc = (desc) => {
const youTube = /(?:https?:\/\/)?(?:www\.)?youtu\.?be.*(?:v=|v\/|\/)([\w-]+)&?/g;
const matchYouTube = desc.match(youTube);
const matchImgur = desc.match(/https:\/\/i.imgur.com\/\w*.(jpg|png|gif|jpeg)/g);
const matchImage = desc.match(/https:\/\/storage\.meteor\.today\/image\/[\da-f]{24}\.(jpg|png)/g);
const matchVideo = desc.match(/(https:\/\/storage\.meteor\.today\/video\/[\da-f]{24}\.)(mp4|mov|avi|flv|wmv|mpeg|mkv)/gi);
const matchSticker = desc.match(/assets\/images\/stickers\/(duck|ep2|ep1)\/\w*.(jpg|png|gif|jpeg)/g);
const matchEmoji = desc.match(/assets\/images\/emoji\/\w*.(jpg|png|gif|jpeg)/g);
if (matchYouTube) desc = desc.replaceAll(youTube, (_match, p1) => renderMedia({ youTube: p1 }));
if (matchImgur) for (const img of matchImgur) desc = desc.replace(img, () => renderMedia({ img }));
if (matchImage) for (const img of matchImage) desc = desc.replace(img, () => renderMedia({ img }));
if (matchVideo) for (const video of matchVideo) desc = desc.replace(video, () => renderMedia({ video }));
if (matchSticker) for (const sticker of matchSticker) desc = desc.replace(sticker, () => renderMedia({ img: sticker }));
if (matchEmoji) for (const emoji of matchEmoji) desc = desc.replace(emoji, () => renderMedia({ img: emoji }));
return desc.replaceAll("\n", "<br>");
};
//#endregion
export { getBoards as n, renderDesc as r, baseUrl as t };