rsshub
Version:
Make RSS Great Again!
43 lines (42 loc) • 1.68 kB
JavaScript
import { t as rofetch } from "./ofetch-W1aeTHCo.mjs";
import { t as parseDate } from "./parse-date-CjhZE69i.mjs";
import { t as cache_default } from "./cache-CiDoUSLo.mjs";
import { load } from "cheerio";
import sanitizeHtml from "sanitize-html";
//#region lib/routes/gab/user.ts
const route = {
path: "/user/:username",
categories: ["social-media"],
example: "/gab/user/AmericanFamAssc",
parameters: { username: "Username" },
name: "User's Posts",
maintainers: ["zphw"],
handler
};
async function handler(ctx) {
const { username } = ctx.req.param();
const account = await cache_default.tryGet(`gab:user:${username}`, () => rofetch(`https://gab.com/api/v1/account_by_username/${username}`));
const gabs = await rofetch(`https://gab.com/api/v2/accounts/${account.id}/statuses?sort_by=no-reposts`);
const results = gabs.s.map((item) => {
const media = (item.mai ?? []).map((id) => gabs.ma.find((attachment) => attachment.i === id)).filter(Boolean).map((attachment) => attachment.t === "video" ? `<video src="${attachment.smp4}" poster="${attachment.pu}" controls></video>` : `<img src="${attachment.u ?? attachment.pu}">`).join("<br>");
return {
title: load(item.c).root().text() || "Untitled",
description: item.c + (media && "<br>" + media),
link: item.ul || `https://gab.com/${username}`,
pubDate: parseDate(item.ca),
author: gabs.a.find((author) => author.i === item.ai)?.dn
};
});
return {
title: `Gab - ${account.display_name}`,
description: sanitizeHtml(account.note, {
allowedTags: [],
allowedAttributes: {}
}),
link: `https://gab.com/${username}`,
image: account.avatar,
item: results
};
}
//#endregion
export { route };