|
|
||
|---|---|---|
| .. | ||
| README.md | ||
README.md
| sidebar |
|---|
| auto |
Join Us
We welcome all pull requests. Suggestions and feedback are also welcomed here.
Submit new RSS source
-
Add a new route in /router.js
-
Add the script to the corresponding directory /routes/
-
Update README (/en/README.md) and Documentation (/docs/en/README.md) , preview the docs via
npm run docs:dev -
Execute
npm run formatto lint the code before you commit and open a pull request
Write the script
Access the target data source API
Use axios to access the target data source API, assign the acquired title, link, description and datetime to ctx.state.data(refer to Data for the list of parameters), typically it looks like this: /routes/bilibili/bangumi.js
Acquire data from HTML
If an API is not provided, data need to be scraped from HTML. Use axios to acquire the HTML and then use cheerio for scraping the relevant data and assign them to ctx.state.data, typically it looks like this: /routes/jianshu/home.js
Enable caching
All routes has a default cache expiry time set in config.js, it should be increased when the data source is not subject to frequent updates.
Add to cache:
ctx.cache.set((key: string), (value: string), (time: number)); // time: the cache expiry time in seconds
Access the cache:
const value = await ctx.cache.get((key: string));
In this example: /routes/zhihu/daily.js, the full text of each article is required resulting in many requests being sent. The update frequency for this source is known (daily), we can safely set the cache to a day to avoid wasting resources.
Data
Assign the acquired data to ctx.state.data, the middleware template.js will then process the data and render the RSS output /views/rss.art, the list of parameters:
ctx.state.data = {
title: '', // The feed title
link: '', // The feed link
description: '', // The feed description
item: [
// An article of the feed
{
title: '', // The article title
description: '', // The article content
pubDate: '', // The article publishing datetime
guid: '', // The article unique identifier, optional, default to the article link below
link: '', // The article link
},
],
};