UNPKG

rsshub

Version:
100 lines (97 loc) 3.53 kB
import { n as init_esm_shims, t as __dirname } from "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import { t as art } from "./render-BQo6B4tL.mjs"; import { t as rss_parser_default } from "./rss-parser-Dtop7M8f.mjs"; import path from "node:path"; //#region lib/routes/papers/query.ts init_esm_shims(); const pdfUrlGenerators = { arxiv: (id) => `https://arxiv.org/pdf/${id}.pdf` }; const handler = async (ctx) => { const { keyword = "query/Detection" } = ctx.req.param(); const limit = ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit"), 10) : 150; const rootUrl = "https://papers.cool"; const currentUrl = new URL(`arxiv/search?highlight=1&query=${keyword}&sort=0`, rootUrl).href; const feedUrl = new URL(`arxiv/search/feed?query=${keyword}`, rootUrl).href; const site = keyword.split(/\//)[0]; const apiKimiUrl = new URL(`${site}/kimi?paper=`, rootUrl).href; const feed = await rss_parser_default.parseURL(feedUrl); const language = "en"; const items = feed.items.slice(0, limit).map((item) => { const title = item.title; const guid = item.guid; const id = item.link?.split(/\//).pop() ?? ""; const kimiUrl = new URL(id, apiKimiUrl).href; const pdfUrl = Object.hasOwn(pdfUrlGenerators, site) ? pdfUrlGenerators[site](id) : void 0; const authorString = item.author; const description = art(path.join(__dirname, "templates/description-89554856.art"), { pdfUrl, siteUrl: item.link, kimiUrl, authorString, summary: item.summary }); return { title, description, pubDate: parseDate(item.pubDate ?? ""), link: item.link, category: item.categories, author: authorString, doi: `${site}${id}`, guid, id: guid, content: { html: description, text: item.content }, language, enclosure_url: pdfUrl, enclosure_type: "application/pdf", enclosure_title: title }; }); return { title: feed.title, description: feed.description, link: currentUrl, item: items, allowEmpty: true, image: feed.image?.url, language: feed.language }; }; const route = { path: "/query/:keyword{.+}?", name: "Topic", url: "papers.cool", maintainers: ["Muyun99"], handler, example: "/papers/query/Detection", parameters: { keyword: "Keyword to search for papers, e.g., Detection, Segmentation, etc." }, description: `::: tip If you subscibe to [arXiv Paper queryed by Detection](https://papers.cool/arxiv/search?highlight=1&query=Detection), where the URL is \`https://papers.cool/arxiv/search?highlight=1&query=Detection\`, extract the part \`https://papers.cool/\` to the end, and use it as the parameter to fill in. Therefore, the route will be [\`/papers/query/Detection\`](https://rsshub.app/papers/query/Detection). ::: | Category | id | | ----------------------------------------------------- | ------------------- | | arXiv Paper queryed by Detection | query/Detection | | arXiv Paper queryed by Segmentation | query/Segmentation | `, categories: ["journal"], features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportRadar: true, supportBT: false, supportPodcast: false, supportScihub: true }, radar: [{ title: "arXiv Paper queryed by Keyword", source: ["papers.cool/arxiv/search?highlight=1&query=*&sort=0"], target: "/papers/query/:keyword" }] }; //#endregion export { handler, route };