Skip to content

Commit

Permalink
[update] update
Browse files Browse the repository at this point in the history
  • Loading branch information
Muyun99 committed Dec 17, 2024
1 parent 7345ca9 commit ccd782b
Show file tree
Hide file tree
Showing 2 changed files with 125 additions and 33 deletions.
39 changes: 6 additions & 33 deletions lib/routes/papers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,12 @@ const pdfUrlGenerators = {
};

export const handler = async (ctx) => {
const { category } = ctx.req.param();
const { category = 'arxiv/cs.AI' } = ctx.req.param();
const limit = ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit'), 10) : 150;

const rootUrl = 'https://papers.cool';
let currentUrl;
let feedUrl;

if (category.startsWith('arxiv/')) {
currentUrl = new URL(category, rootUrl).href;
feedUrl = new URL(`${category}/feed`, rootUrl).href;
} else if (category.startsWith('query')) {
const query = category.split(/\//)[1];
currentUrl = new URL(`arxiv/search?highlight=1&query=${query}&sort=0`, rootUrl).href;
feedUrl = new URL(`arxiv/search/feed?query=${query}`, rootUrl).href;
} else {
ctx.throw(400, 'Invalid category');
}
const currentUrl = new URL(category, rootUrl).href;
const feedUrl = new URL(`arxiv/${category}/feed`, rootUrl).href;

const site = category.split(/\//)[0];
const apiKimiUrl = new URL(`${site}/kimi?paper=`, rootUrl).href;
Expand Down Expand Up @@ -87,19 +76,15 @@ export const handler = async (ctx) => {
};

export const route: Route = {
path: '/:category{.+}?',
path: '/arxiv/:category{.+}?',
name: 'Topic',
url: 'papers.cool',
maintainers: ['nczitzk', 'Muyun99'],
handler,
example: '/papers/arxiv/cs.AI or /papers/query/Detection',
parameters: {
category: 'Category, arXiv Artificial Intelligence (cs.AI) by default',
keyword: 'Keyword to search for papers, e.g., Detection, Segmentation, etc.',
},
example: 'https://rsshub.app/papers/arxiv/cs.AI or /papers/query/Detection',
parameters: { category: 'Category, arXiv Artificial Intelligence (cs.AI) by default' },
description: `:::tip
If you subscribe to [arXiv Artificial Intelligence (cs.AI)](https://papers.cool/arxiv/cs.AI), where the URL is \`https://papers.cool/arxiv/cs.AI\`, extract the part \`https://papers.cool/\` to the end, and use it as the parameter to fill in. Therefore, the route will be [\`/papers/arxiv/cs.AI\`](https://rsshub.app/papers/arxiv/cs.AI).
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 |
Expand All @@ -109,8 +94,6 @@ export const route: Route = {
| arXiv Computer Vision and Pattern Recognition (cs.CV) | arxiv/cs.CV |
| arXiv Machine Learning (cs.LG) | arxiv/cs.LG |
| arXiv Robotics (cs.RO) | arxiv/cs.RO |
| arXiv Paper queryed by Detection | query/Detection |
| arXiv Paper queryed by Segmentation | query/Segmentation |
`,
categories: ['journal'],

Expand Down Expand Up @@ -149,15 +132,5 @@ export const route: Route = {
source: ['papers.cool/arxiv/cs.RO'],
target: '/arxiv/cs.RO',
},
{
title: 'arXiv Paper queryed by Detection',
source: ['papers.cool/arxiv/search?highlight=1&query=Detection&sort=0`'],
target: '/papers/query/Detection',
},
{
title: 'arXiv Paper queryed by Segmentation',
source: ['papers.cool/arxiv/search?highlight=1&query=Segmentation&sort=0`'],
target: '/papers/query/Segmentation',
},
],
};
119 changes: 119 additions & 0 deletions lib/routes/papers/query.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
import { Route } from '@/types';
import { getCurrentPath } from '@/utils/helpers';
const __dirname = getCurrentPath(import.meta.url);

import { parseDate } from '@/utils/parse-date';
import { art } from '@/utils/render';
import path from 'node:path';
import parser from '@/utils/rss-parser';

const pdfUrlGenerators = {
arxiv: (id: string) => `https://arxiv.org/pdf/${id}.pdf`,
};

export const handler = async (ctx) => {
const { keyword } = ctx.req.param();
const limit = ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit'), 10) : 150;

const rootUrl = 'https://papers.cool';
const query = keyword.split(/\//)[1];
const currentUrl = new URL(`arxiv/search?highlight=1&query=${query}&sort=0`, rootUrl).href;
const feedUrl = new URL(`arxiv/search/feed?query=${query}`, rootUrl).href;

const site = keyword.split(/\//)[0];
const apiKimiUrl = new URL(`${site}/kimi?paper=`, rootUrl).href;

const feed = await parser.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) : undefined;

const authorString = item.author;
const description = art(path.join(__dirname, 'templates/description.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,
};
};

export const route: 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 Detection',
source: ['papers.cool/arxiv/search?highlight=1&query=Detection&sort=0`'],
target: '/papers/query/Detection',
},
{
title: 'arXiv Paper queryed by Segmentation',
source: ['papers.cool/arxiv/search?highlight=1&query=Segmentation&sort=0`'],
target: '/papers/query/Segmentation',
},
],
};

0 comments on commit ccd782b

Please sign in to comment.