UNPKG

rsshub

Version:
88 lines (87 loc) 2.9 kB
import { t as rofetch } from "./ofetch-W1aeTHCo.mjs"; import { t as config } from "./config-Bpyy15zS.mjs"; import { t as logger } from "./logger-BPV-Cx6k.mjs"; import { t as cache_default } from "./cache-CiDoUSLo.mjs"; import { t as ConfigNotFoundError } from "./config-not-found-fQ5mxvDU.mjs"; import { i as processWork, t as baseUrl } from "./utils-DuaAgure.mjs"; import { FetchError } from "ofetch"; //#region lib/routes/skeb/works.ts const route = { path: "/works/:username", categories: ["picture"], example: "/skeb/works/@brm2_1925", parameters: { username: "Skeb Username with @" }, features: { requireConfig: [{ name: "SKEB_BEARER_TOKEN", optional: false, description: "在瀏覽器開發者工具(F12)的主控台中輸入 `localStorage.getItem(\"token\")` 獲取" }], requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false, nsfw: true }, name: "Creator Works", maintainers: ["SnowAgar25"], handler, radar: [{ title: "Creator Works", source: ["skeb.jp/:username"], target: "/works/:username" }], description: "Get the latest works of a specific creator on Skeb" }; async function handler(ctx) { const username = ctx.req.param("username"); if (!config.skeb || !config.skeb.bearerToken) throw new ConfigNotFoundError("Skeb works RSS is disabled due to the lack of <a href=\"https://docs.rsshub.app/deploy/config#route-specific-configurations\">relevant config</a>"); const url = `${baseUrl}/api/users/${username.replace("@", "")}/works`; await ensureRequestKey(url); const items = await cache_default.tryGet(url, async () => { const data = await rofetch(url, { retry: 0, method: "GET", query: { role: "creator", sort: "date", offset: "0" }, headers: { "User-Agent": config.ua, Cookie: `request_key=${await cache_default.get("skeb:request_key")}`, Authorization: `Bearer ${config.skeb.bearerToken}` } }); if (!data || !Array.isArray(data)) throw new Error("Invalid data received from API"); return data.map((item) => processWork(item)).filter((item) => item !== null); }); return { title: `Skeb - ${username}'s Works`, link: `${baseUrl}/${username}`, item: items }; } async function ensureRequestKey(url) { if (await cache_default.get("skeb:request_key")) return; try { await rofetch(url, { retry: 0, headers: { "User-Agent": config.ua, Authorization: `Bearer ${config.skeb.bearerToken}` } }); } catch (error) { if (error instanceof FetchError && error.data) { const newRequestKey = String(error.data).match(/request_key=(.*?);/)?.[1]; if (newRequestKey) { cache_default.set("skeb:request_key", newRequestKey); logger.debug(`Retrieved new request_key: ${newRequestKey}`); } else logger.error("Failed to extract request_key from error response"); } } } //#endregion export { route };