UNPKG

rsshub

Version:
66 lines (64 loc) 2.4 kB
import "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import { t as ofetch_default } from "./ofetch-BIyrKU3Y.mjs"; import { t as cache_default } from "./cache-Bo__VnGm.mjs"; import "./render-BQo6B4tL.mjs"; import { t as invalid_parameter_default } from "./invalid-parameter-rr4AgGpp.mjs"; import { i as processWork, t as baseUrl } from "./utils-BrYAWfDx.mjs"; //#region lib/routes/skeb/search.ts const route = { path: "/search/:keyword", categories: ["picture"], example: "/skeb/search/初音ミク", parameters: { keyword: "Search keyword" }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false, nsfw: true }, name: "Search Results", maintainers: ["SnowAgar25"], handler, description: "Get the search results for works on Skeb" }; async function handler(ctx) { const keyword = ctx.req.param("keyword"); if (!keyword) throw new invalid_parameter_default("Invalid search keyword"); const url = "https://hb1jt3kre9-dsn.algolia.net/1/indexes/*/queries"; const items = await cache_default.tryGet(`skeb:search:${keyword}`, async () => { const data = await ofetch_default(url, { method: "POST", headers: { "x-algolia-application-id": "HB1JT3KRE9", "x-algolia-api-key": "9a4ce7d609e71bf29e977925e4c6740c" }, body: { requests: [{ indexName: "User", query: keyword, params: "hitsPerPage=40", filters: "genres:art OR genres:comic OR genres:voice OR genres:novel OR genres:video OR genres:music OR genres:correction" }, { indexName: "Request", query: keyword, params: "hitsPerPage=40&filters=genre%3Aart%20OR%20genre%3Acomic%20OR%20genre%3Avoice%20OR%20genre%3Anovel%20OR%20genre%3Avideo%20OR%20genre%3Amusic%20OR%20genre%3Acorrection" }] } }); if (!data || !data.results || !Array.isArray(data.results) || data.results.length < 2) throw new Error("Invalid data received from API"); const works = data.results[1].hits; if (!Array.isArray(works)) throw new TypeError("Invalid hits data received from API"); return works.map((item) => processWork(item)).filter(Boolean); }); return { title: `Skeb - Search Results for "${keyword}"`, link: `${baseUrl}/search?q=${encodeURIComponent(keyword)}`, item: items }; } //#endregion export { route };