docs: i18n sidebar, fix code block (#13085)
* docs: i18n sidebar * docs: `code-group` to `tabs` * docs: admonitions use default title * docs: fix route * docs: fix build * docs: fix add-docs admonitions * docs: unwrap `details` wrapped content * docs: mention no i18n switch in dev mode * docs: fix add-docs rendering * docs: fix typo
This commit is contained in:
parent
485013e950
commit
17da3677d9
|
|
@ -84,7 +84,7 @@ function parseMd(name) {
|
|||
// })
|
||||
// })
|
||||
|
||||
let newContent = `import Route from '@site/src/components/Route';\n\n` + `# ${cnParsed.h1}\n\n`;
|
||||
let newContent = `# ${cnParsed.h1}\n\n`;
|
||||
cnParsed.h2.forEach((item) => {
|
||||
newContent += `## ${item.h2}\n\n`;
|
||||
if (item.content) {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
|
||||
|
||||
# Introduction
|
||||
|
||||
<p align="center" class="logo-img">
|
||||
|
|
|
|||
|
|
@ -1,15 +1,19 @@
|
|||
# API
|
||||
|
||||
:::caution Warning
|
||||
:::caution
|
||||
|
||||
The API is under active development and is subject to change. All suggestions are welcome!
|
||||
|
||||
:::
|
||||
|
||||
RSSHub provides the following APIs:
|
||||
|
||||
## List of Public Routes
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
This API **will not** return any routes under `lib/protected_router.js`.
|
||||
|
||||
:::
|
||||
|
||||
Eg: <https://rsshub.app/api/routes/github>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Badge from '@site/src/components/Badge';
|
||||
|
||||
# FAQs
|
||||
|
||||
**Q: How does RSSHub work?**
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ Edit `environment` in [docker-compose.yml](https://github.com/DIYgod/RSSHub/blob
|
|||
|
||||
## Docker Deployment
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
To enable puppeteer, replace `diygod/rsshub` with `diygod/rsshub:chromium-bundled` in **EACH** command.
|
||||
|
||||
|
|
@ -186,44 +186,58 @@ $ cd RSSHub
|
|||
|
||||
Execute the following commands to install dependencies (Do not add the `--production` parameter for development).
|
||||
|
||||
<code-group>
|
||||
<code-block title="pnpm" active>
|
||||
<Tabs groupId="package-manager">
|
||||
<TabItem value="pnpm" label="pnpm" default>
|
||||
|
||||
```bash
|
||||
pnpm install --prod
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="yarnv1">
|
||||
</TabItem>
|
||||
<TabItem value="yarn" label="yarnv1">
|
||||
|
||||
```bash
|
||||
yarn --production
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="npm">
|
||||
</TabItem>
|
||||
<TabItem value="npm" label="npm">
|
||||
|
||||
```bash
|
||||
npm install --omit=dev
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
### Launch
|
||||
|
||||
Under `RSSHub`'s root directory, execute the following commands to launch
|
||||
|
||||
<Tabs groupId="package-manager">
|
||||
<TabItem value="pnpm" label="pnpm" default>
|
||||
|
||||
```bash
|
||||
pnpm start
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="yarn" label="yarnv1">
|
||||
|
||||
```bash
|
||||
$ yarn start
|
||||
```
|
||||
|
||||
Or
|
||||
</TabItem>
|
||||
<TabItem value="npm" label="npm">
|
||||
|
||||
```bash
|
||||
$ npm start
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
Or use [PM2](https://pm2.io/docs/plus/quick-start/)
|
||||
|
||||
```bash
|
||||
|
|
@ -236,7 +250,7 @@ Refer to our [Guide](https://docs.rsshub.app/) for usage. Replace `https://rsshu
|
|||
|
||||
### Configuration
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
On arm/arm64, this deployment method does not include puppeteer dependencies. To enable puppeteer, install Chromium from your distribution repositories first, then set `CHROMIUM_EXECUTABLE_PATH` to its executable path.
|
||||
|
||||
|
|
@ -491,7 +505,7 @@ If you would like to test routes or avoid IP limits, etc., you may build your ow
|
|||
|
||||
[](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/DIYgod/RSSHub/master/docker-compose.yml)
|
||||
|
||||
:::caution Warning
|
||||
:::caution
|
||||
|
||||
- [DockerHub](https://hub.docker.com) account required
|
||||
- [Play with Docker](https://labs.play-with-docker.com/) instance will last for 4 hours at most. It should only be used for testing purpose
|
||||
|
|
@ -725,7 +739,7 @@ Configs in this sections are in beta stage, and **are turn off by default**. Ple
|
|||
|
||||
### Route-specific Configurations
|
||||
|
||||
:::tip Notice
|
||||
:::tip
|
||||
|
||||
Configs here are incomplete.
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,6 @@
|
|||
sidebar_position: 1
|
||||
---
|
||||
|
||||
import Route from '@site/src/components/Route';
|
||||
|
||||
# RSS Feed Fundamentals
|
||||
|
||||
This guide is intended for advanced users who want to know how to create an RSS feed in detail. If you're new to creating RSS feeds, we recommend reading [Create Your Own RSSHub Route](/joinus/new-rss/start-code) first.
|
||||
|
|
@ -56,6 +54,7 @@ Each item in an RSS feed is represented by an object with a set of fields that d
|
|||
| **`doi`** | *(Optional)* The Digital Object Identifier of the item, which should be a string in the format `10.xxxx/xxxxx.xxxx` | `undefinded` | R |
|
||||
|
||||
:::caution Formatting Considerations
|
||||
|
||||
When specifying certain fields in an RSS feed, it's important to keep in mind some formatting considerations. Specifically, you should avoid including any linebreaks, consecutive whitespace, or leading/trailing whitespace in the following fields: **`title`**, **`subtitle`** (only for Atom), **`author`** (only for Atom), **`item.title`**, and **`item.author`**.
|
||||
|
||||
While most RSS readers will automatically trim these fields, some may not process them properly. Therefore, to ensure compatibility with all RSS readers, we recommend trimming these fields before outputting them. If your route cannot tolerate trimming these fields, you should consider changing their format.
|
||||
|
|
@ -63,6 +62,7 @@ While most RSS readers will automatically trim these fields, some may not proces
|
|||
Additionally, while other fields will not be forced to be trimmed, we suggest avoiding violations of the above formatting rules as much as possible. If you are using Cheerio to extract content from web pages, be aware that Cheerio will retain line breaks and indentation. For the **`item.description`** field, in particular, any intended linebreaks should be converted to `<br>` tags to prevent them from being trimmed by the RSS reader. If you're extracting an RSS feed from JSON data, be aware that the JSON may contain linebreaks that need to be displayed, so you should convert them to `<br>` tags in this case.
|
||||
|
||||
It's important to keep these formatting considerations in mind to ensure your RSS feed is compatible with all RSS readers.
|
||||
|
||||
:::
|
||||
|
||||
## Create a BitTorrent/Magnet Feed
|
||||
|
|
@ -89,7 +89,7 @@ By including these fields in your RSS feed, you'll be able to create BitTorrent/
|
|||
|
||||
If you're adding support for BitTorrent/Magnet feeds in your RSSHub route, it's important to update the documentation to reflect this change. To do this, you'll need to set the `supportBT` attribute of the `Route` component to `"1"`. Here's an example:
|
||||
|
||||
```vue
|
||||
```tsx
|
||||
<Route author="..." example="..." path="..." supportBT="1" />
|
||||
```
|
||||
|
||||
|
|
@ -115,7 +115,7 @@ By including this `doi` field in your RSS feed, you'll be able to create journal
|
|||
|
||||
To update the documentation for your route with support for Sci-hub, you'll need to set the `supportScihub` attribute of the Route component to `"1"`. Here's an example:
|
||||
|
||||
```vue
|
||||
```tsx
|
||||
<Route author="..." example="..." path="..." supportScihub="1" />
|
||||
```
|
||||
|
||||
|
|
@ -155,7 +155,7 @@ By including these fields in your RSS feed, you'll be able to create podcast fee
|
|||
|
||||
To update the documentation for your route with support for podcast feeds, you'll need to set the `supportPodcast` attribute of the `Route` component to `"1"`. Here's an example:
|
||||
|
||||
```vue
|
||||
```tsx
|
||||
<Route author="..." example="..." path="..." supportPodcast="1" />
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -36,8 +36,10 @@ const pubDate = parseDate('2020/12/30');
|
|||
const pubDate = parseDate('2020/12/30', 'YYYY/MM/DD');
|
||||
```
|
||||
|
||||
:::tip Tips
|
||||
:::tip
|
||||
|
||||
You can refer to the [day.js documentation](https://day.js.org/docs/en/parse/string-format#list-of-all-available-parsing-tokens) for all available date formats.
|
||||
|
||||
:::
|
||||
|
||||
If you need to parse a relative date, use `parseRelativeDate`.
|
||||
|
|
|
|||
|
|
@ -111,8 +111,10 @@ The `maintainer.js` file should export an object that provides maintainer inform
|
|||
|
||||
To generate a list of maintainers, use the following command: `pnpm run build:maintainer`, which will create the list under `assets/build/`.
|
||||
|
||||
:::danger Warning
|
||||
:::danger
|
||||
|
||||
The path in the `@koa/router` object should be the same as the `path` in the corresponding documentation before the namespace appended in front of it.
|
||||
|
||||
:::
|
||||
|
||||
### Radar Rules
|
||||
|
|
@ -121,8 +123,10 @@ All routes are required to include the `radar.js` file, which includes the corre
|
|||
|
||||
To generate a complete `radar-rules.js` file, use the following command: `yarn build:radar`, which will create the file under `assets/build/`.
|
||||
|
||||
:::tip Tips
|
||||
:::tip
|
||||
|
||||
Remember to remove all build artifacts in `assets/build/` before committing.
|
||||
|
||||
:::
|
||||
|
||||
### Rendering Templates
|
||||
|
|
@ -154,7 +158,7 @@ const renderAuthor = (author) => art(path.join(__dirname, 'templates/author.art'
|
|||
|
||||
### v1 Route Standard
|
||||
|
||||
:::danger Warning
|
||||
:::danger
|
||||
|
||||
The v1 Route Standard is deprecated. All new routes should be following the [v2 Route Standard](/joinus/advanced/script-standard#v2-route-standard).
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,8 @@ The above code snippet from [Create Your Own RSSHub Route](/joinus/new-rss/start
|
|||
|
||||
The object returned from the previous statement will be reused, and an extra `description` property will be added to it. The returned cache for each `item.link` will be `{ title, link, pubDate, author, category, description }`. The next time the same path is requested, this processed cache will be used instead of making a request to the server and recomputing the data.
|
||||
|
||||
:::caution Warning
|
||||
:::caution
|
||||
|
||||
Any assignments to variables that are declared outside of the `tryGet()` function will not be processed under a cache-hit scenario. For example, the following code will not work as expected:
|
||||
|
||||
```js
|
||||
|
|
@ -62,10 +63,12 @@ Any assignments to variables that are declared outside of the `tryGet()` functio
|
|||
|
||||
[lib/middleware/cache/index.js](https://github.com/DIYgod/RSSHub/blob/master/lib/middleware/cache/index.js#L58)
|
||||
|
||||
:::tip Tips
|
||||
:::tip
|
||||
|
||||
Below are advanced methods for using cache. You should use `ctx.cache.tryGet()` most of the time.
|
||||
|
||||
Note that you need to use `JSON.parse()` when retrieving the cache using `ctx.cache.get()`.
|
||||
|
||||
:::
|
||||
|
||||
### ctx.cache.get(key [, refresh ])
|
||||
|
|
|
|||
|
|
@ -40,13 +40,14 @@ The first inner object key is `_name`, which is the name of the website. This sh
|
|||
|
||||
The rest of the inner object keys are the subdomains of a website. If a website you want to match does not have any subdomains, or you want to match both `www.example.com` and `example.com`, use `'.'` instead. In this case, we will use `'.'` since we want to match `github.com`. Note that each subdomain should return **an array of objects**.
|
||||
|
||||
<code-group>
|
||||
<code-block title="github.com and www.github.com">
|
||||
<Tabs>
|
||||
<TabItem value="github.com" label="github.com and www.github.com">
|
||||
|
||||
```js{4}
|
||||
```js
|
||||
module.exports = {
|
||||
'github.com': {
|
||||
_name: 'GitHub',
|
||||
// highlight-next-line
|
||||
'.': [
|
||||
{
|
||||
title: '...',
|
||||
|
|
@ -59,13 +60,14 @@ module.exports = {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="abc.github.com">
|
||||
</TabItem>
|
||||
<TabItem value="abc.github.com" label="abc.github.com">
|
||||
|
||||
```js{4}
|
||||
```js
|
||||
module.exports = {
|
||||
'github.com': {
|
||||
_name: 'GitHub',
|
||||
// highlight-next-line
|
||||
abc: [
|
||||
{
|
||||
title: '...',
|
||||
|
|
@ -78,13 +80,14 @@ module.exports = {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="abc.def.github.com">
|
||||
</TabItem>
|
||||
<TabItem value="abc.def.github.com" label="abc.def.github.com">
|
||||
|
||||
```js{4}
|
||||
```js
|
||||
module.exports = {
|
||||
'github.com': {
|
||||
_name: 'GitHub',
|
||||
// highlight-next-line
|
||||
'abc.def': [
|
||||
{
|
||||
title: '...',
|
||||
|
|
@ -97,8 +100,8 @@ module.exports = {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
### `title`
|
||||
|
||||
|
|
@ -116,8 +119,10 @@ The source field is *optional* and should specifies the URL path. Leave it blank
|
|||
|
||||
The source should be an array of strings. For example, if the source for `GitHub Repo Issues` is `/:user/:repo`, it means that when you visit `https://github.com/DIYgod/RSSHub`, which matches the `github.com/:user/:repo` pattern, the parameters for this URL will be: `{user: 'DIYgod', repo: 'RSSHub'}`. The browser extension uses these parameters to create an RSSHub subscription address based on the `target` field.
|
||||
|
||||
:::caution Warning
|
||||
:::caution
|
||||
|
||||
If the value you want to extract is in the URL search parameters or URL hash, use target as a function instead of the `source` field. Also, remember that the `source` field only matches the URL path and not any other parts of the URL.
|
||||
|
||||
:::
|
||||
|
||||
You can use the `*` symbol to perform wildcard matching. Note that the syntax here is not the same as the [path-to-regexp](https://github.com/pillarjs/path-to-regexp). For instance, `/:user/:repo/*` will match both `https://github.com/DIYgod/RSSHub/issues` and `https://github.com/DIYgod/RSSHub/issues/1234`. If you want to name the matching result, you can place the variable name after the `*` symbol. For example, `/user/:repo/*path`, whereby path will be `issues` and `issues/1234` in the above scenario.
|
||||
|
|
@ -140,10 +145,10 @@ It is essential to note that the `target` method runs in a sandbox, and any chan
|
|||
|
||||
Here are two examples of how to use the `target` field as a function:
|
||||
|
||||
<code-group>
|
||||
<code-block title="Match using params">
|
||||
<Tabs>
|
||||
<TabItem value="params" label="Match using params">
|
||||
|
||||
```js{9}
|
||||
```js
|
||||
module.exports = {
|
||||
'github.com': {
|
||||
_name: 'GitHub',
|
||||
|
|
@ -152,6 +157,7 @@ module.exports = {
|
|||
title: 'Repo Issues',
|
||||
docs: 'https://docs.rsshub.app/routes/programming#github',
|
||||
source: ['/:user/:repo/issues/:id', '/:user/:repo/issues', '/:user/:repo'],
|
||||
// highlight-next-line
|
||||
target: (params) => `/github/issue/${params.user}/${params.repo}`,
|
||||
},
|
||||
],
|
||||
|
|
@ -159,10 +165,10 @@ module.exports = {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="Match using URL">
|
||||
</TabItem>
|
||||
<TabItem value="url" label="Match using URL">
|
||||
|
||||
```js{9}
|
||||
```js
|
||||
module.exports = {
|
||||
'github.com': {
|
||||
_name: 'GitHub',
|
||||
|
|
@ -171,6 +177,7 @@ module.exports = {
|
|||
title: 'Repo Issues',
|
||||
docs: 'https://docs.rsshub.app/routes/programming#github',
|
||||
source: ['/:user/:repo'],
|
||||
// highlight-next-line
|
||||
target: (_, url) => `/github/issue${new URL(url).pathname}`
|
||||
},
|
||||
],
|
||||
|
|
@ -178,8 +185,8 @@ module.exports = {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
Both the above examples will return the same RSSHub subscription address as the [first example](/joinus/new-radar#code-the-rule).
|
||||
|
||||
|
|
|
|||
|
|
@ -2,67 +2,71 @@
|
|||
sidebar_position: 4
|
||||
---
|
||||
|
||||
import Route from '@site/src/components/Route';
|
||||
|
||||
# Add documentation
|
||||
|
||||
Now that we have completed the code, it's time to add the documentation for your route. Open the appropriate file in the [document (/website/docs)](https://github.com/DIYgod/RSSHub/blob/master/website/docs), which in this example is `/website/i18n/en/docusaurus-plugin-content-docs/current/routes/programming.md`.
|
||||
|
||||
In order to preview the documentation in real-time, you need to install the dependencies for the documentation. Run the following command in the **`website` directory**:
|
||||
|
||||
<code-group>
|
||||
<code-block title="pnpm" active>
|
||||
<Tabs groupId="package-manager">
|
||||
<TabItem value="pnpm" label="pnpm" default>
|
||||
|
||||
```bash
|
||||
pnpm i
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="yarn">
|
||||
</TabItem>
|
||||
<TabItem value="yarn" label="yarn">
|
||||
|
||||
```bash
|
||||
yarn
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="npm">
|
||||
</TabItem>
|
||||
<TabItem value="npm" label="npm">
|
||||
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
You can now preview the documentation in real-time by running the following command in the **`website` directory**:
|
||||
|
||||
<code-group>
|
||||
<code-block title="pnpm" active>
|
||||
<Tabs groupId="package-manager">
|
||||
<TabItem value="pnpm" label="pnpm" default>
|
||||
|
||||
```bash
|
||||
pnpm run start -- --locale en
|
||||
pnpm run start
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="yarn">
|
||||
</TabItem>
|
||||
<TabItem value="yarn" label="yarn">
|
||||
|
||||
```bash
|
||||
yarn start --locale en
|
||||
yarn start
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="npm">
|
||||
</TabItem>
|
||||
<TabItem value="npm" label="npm">
|
||||
|
||||
```bash
|
||||
npm run start -- --locale en
|
||||
npm run start
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
The documentation is written in Markdown and rendered with [VuePress v1](https://v1.vuepress.vuejs.org).
|
||||
:::caution
|
||||
|
||||
To add documentation to your route, use Vue components. They work like HTML tags. The following are the most commonly used components:
|
||||
You cannot switch to other languages in development mode. This is a [technical limitation](https://docusaurus.io/docs/i18n/tutorial#start-your-site) from Docusaurus.
|
||||
|
||||
:::
|
||||
|
||||
The documentation is written in MDX and rendered with [Docusaurus v2](https://docusaurus.io/docs).
|
||||
|
||||
To add documentation to your route, use the `Route` React component. It works like HTML tag. The following are the most commonly used component properties:
|
||||
|
||||
- `author`: The route maintainer(s), separated by a single space. It should be the same as [`maintainer.js`](/joinus/new-rss/before-start#understand-the-basics-maintainer-js)
|
||||
- `example`: The route example, with a leading `/`
|
||||
|
|
@ -79,7 +83,7 @@ To add documentation to your route, use Vue components. They work like HTML tags
|
|||
|
||||
### Repo Issues (No parameter)
|
||||
|
||||
```vue
|
||||
```tsx
|
||||
<Route author="HenryQW" example="/sspai/series" path="/sspai/series" />
|
||||
```
|
||||
|
||||
|
|
@ -91,7 +95,7 @@ To add documentation to your route, use Vue components. They work like HTML tags
|
|||
|
||||
### Repo Issues (Multiple parameters)
|
||||
|
||||
```vue
|
||||
```tsx
|
||||
<Route author="HenryQW" example="/github/issue/DIYgod/RSSHub" path="/github/issue/:user/:repo?" paramsDesc={['GitHub username', 'GitHub repo name, `RSSHub` by default']} />
|
||||
```
|
||||
|
||||
|
|
@ -103,7 +107,7 @@ To add documentation to your route, use Vue components. They work like HTML tags
|
|||
|
||||
### Keyword (Description with table)
|
||||
|
||||
```vue
|
||||
```tsx
|
||||
<Route author="DIYgod" example="/pixiv/search/麻衣/popular/2" path="/pixiv/search/:keyword/:order?/:mode?" paramsDesc={['keyword', 'rank mode, empty or other for time order, `popular` for popular order, `date` by default', 'filte R18 content, see table below, empty by default']}>
|
||||
|
||||
| only not R18 | only R18 | no filter |
|
||||
|
|
@ -130,46 +134,84 @@ To add documentation to your route, use Vue components. They work like HTML tags
|
|||
If you'd like to provide additional information about a particular route, you can use these custom containers:
|
||||
|
||||
```md
|
||||
<details>
|
||||
<summary>Click to expand</summary>
|
||||
This is a detail block. Title is optional and does not support Markdown.
|
||||
</details>
|
||||
|
||||
:::note
|
||||
|
||||
This is a note.
|
||||
|
||||
:::
|
||||
|
||||
:::tip Tips title
|
||||
This is a tip.
|
||||
|
||||
Title is optional.
|
||||
|
||||
:::
|
||||
|
||||
:::caution Warning title
|
||||
This is a warning.
|
||||
:::info
|
||||
|
||||
Supprts Markdown.
|
||||
|
||||
:::
|
||||
|
||||
:::danger Danger title
|
||||
This is a dangerous warning.
|
||||
:::caution
|
||||
|
||||
Add a empty line around the starting and ending directive `:::`
|
||||
|
||||
:::
|
||||
|
||||
:::note Details title
|
||||
This is a details block.
|
||||
:::danger
|
||||
|
||||
Otherwise the content may not be rendered properly.
|
||||
|
||||
:::
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>Click to expand</summary>
|
||||
This is a detail block. Title is optional and does not support Markdown.
|
||||
</details>
|
||||
|
||||
:::note
|
||||
|
||||
This is a note.
|
||||
|
||||
:::
|
||||
|
||||
:::tip Tips title
|
||||
This is a tip.
|
||||
|
||||
Title is optional.
|
||||
|
||||
:::
|
||||
|
||||
:::caution Warning title
|
||||
This is a warning.
|
||||
:::info
|
||||
|
||||
Supprts Markdown.
|
||||
|
||||
:::
|
||||
|
||||
:::danger Danger title
|
||||
This is a dangerous warning.
|
||||
:::caution
|
||||
|
||||
Add a empty line around the starting and ending directive `:::`
|
||||
|
||||
:::
|
||||
|
||||
:::note Details title
|
||||
This is a details block.
|
||||
:::danger
|
||||
|
||||
Otherwise the content may not be rendered properly.
|
||||
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### Other components
|
||||
|
||||
In addition to the route components, there are several other components you can use to provide more information about your route:
|
||||
In addition to the aforementioned component properties, there are several other properties you can use to provide more information about your route:
|
||||
|
||||
- `anticrawler`: set to `1` if the target website has an anti-crawler mechanism.
|
||||
- `puppeteer`: set to `1` if the feed uses puppeteer.
|
||||
|
|
@ -180,9 +222,9 @@ In addition to the route components, there are several other components you can
|
|||
- `supportPodcast`: set to `1` if the feed supports podcasts.
|
||||
- `supportScihub`: set to `1` if the feed supports Sci-Hub.
|
||||
|
||||
By using these components, you can provide valuable information to users and make it easier for them to understand and use your route. Adding these components to your route documentation will add a badge in front of it.
|
||||
By using these properties, you can provide valuable information to users and make it easier for them to understand and use your route. Adding these properties to your route documentation will add a badge in front of it.
|
||||
|
||||
```vue
|
||||
```tsx
|
||||
<Route author="HenryQW" example="/github/issue/DIYgod/RSSHub" path="/github/issue/:user/:repo?" paramsDesc={['GitHub username', 'GitHub repo name, `RSSHub` by default']} anticrawler="1" puppeteer="1" radar="1" rssbud="1" selfhost="1" supportBT="1" supportPodcast="1" supportScihub="1" />
|
||||
```
|
||||
|
||||
|
|
@ -201,26 +243,26 @@ By using these components, you can provide valuable information to users and mak
|
|||
- **Remember to close the tag!**
|
||||
- Don't forget to run the following command in the **root directory** of the project to check and format your code before committing and submitting a merge request:
|
||||
|
||||
<code-group>
|
||||
<code-block title="pnpm" active>
|
||||
<Tabs groupId="package-manager">
|
||||
<TabItem value="pnpm" label="pnpm" default>
|
||||
|
||||
```bash
|
||||
pnpm run format
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="yarn">
|
||||
</TabItem>
|
||||
<TabItem value="yarn" label="yarn">
|
||||
|
||||
```bash
|
||||
yarn format
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="npm">
|
||||
</TabItem>
|
||||
<TabItem value="npm" label="npm">
|
||||
|
||||
```bash
|
||||
npm run format
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
|
|
|||
|
|
@ -10,57 +10,57 @@ In this tutorial, we will walk you through the process of creating an RSS feed f
|
|||
|
||||
Before you start, you need to install the dependencies for RSSHub. You can do this by running the following command in the root directory of RSSHub:
|
||||
|
||||
<code-group>
|
||||
<code-block title="pnpm" active>
|
||||
<Tabs groupId="package-manager">
|
||||
<TabItem value="pnpm" label="pnpm" default>
|
||||
|
||||
```bash
|
||||
pnpm i
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="yarn">
|
||||
</TabItem>
|
||||
<TabItem value="yarn" label="yarn">
|
||||
|
||||
```bash
|
||||
yarn
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="npm">
|
||||
</TabItem>
|
||||
<TabItem value="npm" label="npm">
|
||||
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## Start debugging
|
||||
|
||||
Once you have successfully installed the dependencies, you can start debugging RSSHub by running the following command:
|
||||
|
||||
<code-group>
|
||||
<code-block title="pnpm" active>
|
||||
<Tabs groupId="package-manager">
|
||||
<TabItem value="pnpm" label="pnpm" default>
|
||||
|
||||
```bash
|
||||
pnpm run dev
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="yarn">
|
||||
</TabItem>
|
||||
<TabItem value="yarn" label="yarn">
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="npm">
|
||||
</TabItem>
|
||||
<TabItem value="npm" label="npm">
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
Make sure to keep an eye on the console output for any error messages or other useful information that can help you diagnose and resolve issues. Additionally, don't hesitate to consult the RSSHub documentation or seek help from the community if you encounter any difficulties.
|
||||
|
||||
|
|
@ -78,8 +78,10 @@ Before submitting your Pull Request, make sure to carefully review the [Script S
|
|||
|
||||
The first step in creating a new RSS route is to create a namespace. The namespace should be the **same** as the second level domain name of the main website for which you are creating the RSS feed. For example, if you are creating an RSS feed for <https://github.com/DIYgod/RSSHub/issues>, the second level domain name is `github`. Therefore, you should create a folder called `github` under `lib/v2` to serve as the namespace for your RSS route.
|
||||
|
||||
:::tip Tips
|
||||
:::tip
|
||||
|
||||
When creating a namespace, it's important to avoid creating multiple namespaces for variations of the same domain. For example, if you are creating an RSS feed for both `yahoo.co.jp` and `yahoo.com`, you should stick with a single namespace `yahoo`, rather than creating multiple namespaces like `yahoo-jp`, `yahoojp`, `yahoo.jp`, `jp.yahoo`, `yahoocojp`, etc.
|
||||
|
||||
:::
|
||||
|
||||
## Understand the Basics
|
||||
|
|
@ -90,26 +92,28 @@ Once you have created the namespace for your RSS route, the next step is to regi
|
|||
|
||||
For example, if you are creating an RSS feed for [GitHub Repo Issues](/routes/programming#github-repo-issues) and suppose you want users to enter a GitHub username and a repository name, and fall back to `RSSHub` if they don't enter the repository name, you can register your new RSS route in `github/router.js` using the following code:
|
||||
|
||||
<code-group>
|
||||
<code-block title="Arrow Functions" active>
|
||||
<Tabs>
|
||||
<TabItem value="Arrow Functions" label="Arrow Functions" default>
|
||||
|
||||
```js{2}
|
||||
```js
|
||||
module.exports = (router) => {
|
||||
// highlight-next-line
|
||||
router.get('/issue/:user/:repo?', require('./issue'));
|
||||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="Regular Functions">
|
||||
</TabItem>
|
||||
<TabItem value="Regular Functions" label="Regular Functions">
|
||||
|
||||
```js{2}
|
||||
```js
|
||||
module.exports = function (router) {
|
||||
// highlight-next-line
|
||||
router.get('/issue/:user/:repo?', require('./issue'));
|
||||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
When registering your new RSS route in `router.js`, you can define the route path and specify the corresponding function to be executed. In the code above, the `router.get()` method is used to specify the HTTP method and the path of the new RSS route. The first parameter of `router.get()` is the route path using [path-to-regexp](https://github.com/pillarjs/path-to-regexp) syntax. The second parameter is the exported function from your new RSS rule, `issue.js`. Note that you can omit the `.js` extension.
|
||||
|
||||
|
|
@ -121,16 +125,19 @@ Once you have defined the route path, you can retrieve the value of the paramete
|
|||
|
||||
You can use the `*` or `+` symbols to match the rest of the path, like `/some/path/:variable*`. Note that `*` and `+` mean "zero or more" and "one or more", respectively. You can also use patterns like `/some/path/:variable(\\d+)?` or even RegExp.
|
||||
|
||||
:::tip Tips
|
||||
:::tip
|
||||
|
||||
For more advanced usage of `router`, see the [@koa/router API Reference](https://github.com/koajs/router/blob/master/API.md).
|
||||
|
||||
:::
|
||||
|
||||
### maintainer.js
|
||||
|
||||
This file is used to store information about the maintainer of the RSS routes. You can add your GitHub username to the value array. Note that the key here should exactly match the path in `router.js` :
|
||||
|
||||
```js{2}
|
||||
```js
|
||||
module.exports = {
|
||||
// highlight-next-line
|
||||
'/issue/:user/:repo?': ['DIYgod'],
|
||||
};
|
||||
```
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@ Open your code editor and create a new file. Since we are going to create an RSS
|
|||
|
||||
Here's the basic code to get you started:
|
||||
|
||||
<code-group>
|
||||
<code-block title="issue.js">
|
||||
<Tabs>
|
||||
<TabItem value="issue.js" label="issue.js">
|
||||
|
||||
```js
|
||||
// Import the necessary modules
|
||||
|
|
@ -40,18 +40,19 @@ module.exports = async (ctx) => {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
### Retrieving user input
|
||||
|
||||
As mentioned earlier, we need to retrieve the GitHub username and repository name from user input. The repository name should default to `RSSHub` if it is not provided in the request URL. Here's how you can do it:
|
||||
|
||||
<code-group>
|
||||
<code-block title="Object destructuring" active>
|
||||
<Tabs groupId="jsStyle">
|
||||
<TabItem value="Object destructuring" label="Object destructuring" default>
|
||||
|
||||
```js{2}
|
||||
```js
|
||||
module.exports = async (ctx) => {
|
||||
// highlight-next-line
|
||||
const { user, repo = 'RSSHub' } = ctx.params;
|
||||
|
||||
ctx.state.data = {
|
||||
|
|
@ -60,13 +61,15 @@ module.exports = async (ctx) => {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="Traditional assignment">
|
||||
</TabItem>
|
||||
<TabItem value="Traditional assignment" label="Traditional assignment">
|
||||
|
||||
```js{2,3}
|
||||
```js
|
||||
module.exports = async (ctx) => {
|
||||
// highlight-start
|
||||
const user = ctx.params.user;
|
||||
const repo = ctx.params.repo ?? 'RSSHub';
|
||||
// highlight-end
|
||||
|
||||
ctx.state.data = {
|
||||
// Your RSS output here
|
||||
|
|
@ -74,8 +77,8 @@ module.exports = async (ctx) => {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
Both of these code snippets do the same thing. The first one uses object destructuring to assign the `user` and `repo` variables, while the second one uses traditional assignment with a nullish coalescing operator to assign the `repo` variable a default value of `RSSHub` if it is not provided in the request URL.
|
||||
|
||||
|
|
@ -83,12 +86,13 @@ Both of these code snippets do the same thing. The first one uses object destruc
|
|||
|
||||
After we have the user input, we can use it to make a request to the API. In most cases, you will need to use `got` from `@/utils/got` (a customized got wrapper) to make HTTP requests. For more information, please refer to the [got documentation](https://github.com/sindresorhus/got/tree/v11#usage).
|
||||
|
||||
<code-group>
|
||||
<code-block title="Object destructuring" active>
|
||||
<Tabs groupId="jsStyle">
|
||||
<TabItem value="Object destructuring" label="Object destructuring" default>
|
||||
|
||||
```js{3-16}
|
||||
```js
|
||||
module.exports = async (ctx) => {
|
||||
const { user, repo = 'RSSHub' } = ctx.params;
|
||||
// highlight-start
|
||||
// Send an HTTP GET request to the API
|
||||
// and destruct the data object returned by the request
|
||||
const { data } = await got(`https://api.github.com/repos/${user}/${repo}/issues`, {
|
||||
|
|
@ -103,6 +107,7 @@ module.exports = async (ctx) => {
|
|||
per_page: ctx.query.limit ? parseInt(ctx.query.limit, 10) : 30,
|
||||
},
|
||||
});
|
||||
// highlight-end
|
||||
|
||||
ctx.state.data = {
|
||||
// Your RSS output here
|
||||
|
|
@ -110,13 +115,14 @@ module.exports = async (ctx) => {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="Traditional assignment">
|
||||
</TabItem>
|
||||
<TabItem value="Traditional assignment" label="Traditional assignment">
|
||||
|
||||
```js{4-14}
|
||||
```js
|
||||
module.exports = async (ctx) => {
|
||||
const user = ctx.params.user;
|
||||
const repo = ctx.params.repo ?? 'RSSHub';
|
||||
// highlight-start
|
||||
// Send an HTTP GET request to the API
|
||||
const response = await got(`https://api.github.com/repos/${user}/${repo}/issues`, {
|
||||
headers: {
|
||||
|
|
@ -128,6 +134,7 @@ module.exports = async (ctx) => {
|
|||
});
|
||||
// response.data is the data object returned by the above request
|
||||
const data = response.data;
|
||||
// highlight-end
|
||||
|
||||
ctx.state.data = {
|
||||
// Your RSS output here
|
||||
|
|
@ -135,8 +142,8 @@ module.exports = async (ctx) => {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
### Outputting the RSS
|
||||
|
||||
|
|
@ -146,10 +153,10 @@ To do this, we can assign the relevant data to the `ctx.state.data` object, and
|
|||
|
||||
Here is the final code that you should have:
|
||||
|
||||
<code-group>
|
||||
<code-block title="Final code" active>
|
||||
<Tabs>
|
||||
<TabItem value="Final code" label="Final code" default>
|
||||
|
||||
```js{16-30,32-39}
|
||||
```js
|
||||
const got = require('@/utils/got');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
|
||||
|
|
@ -165,6 +172,7 @@ module.exports = async (ctx) => {
|
|||
},
|
||||
});
|
||||
|
||||
// highlight-start
|
||||
// extract the relevant data from the API response
|
||||
const items = data.map((item) => ({
|
||||
// item title
|
||||
|
|
@ -180,7 +188,9 @@ module.exports = async (ctx) => {
|
|||
// item category, if available
|
||||
category: item.labels.map((label) => label.name),
|
||||
}));
|
||||
// highlight-end
|
||||
|
||||
// highlight-start
|
||||
ctx.state.data = {
|
||||
// channel title
|
||||
title: `${user}/${repo} issues`,
|
||||
|
|
@ -189,13 +199,14 @@ module.exports = async (ctx) => {
|
|||
// each feed item
|
||||
item: items,
|
||||
};
|
||||
// highlight-end
|
||||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="Alternative">
|
||||
</TabItem>
|
||||
<TabItem value="Alternative" label="Alternative">
|
||||
|
||||
```js{16-36}
|
||||
```js
|
||||
const got = require('@/utils/got');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
|
||||
|
|
@ -211,6 +222,7 @@ module.exports = async (ctx) => {
|
|||
},
|
||||
});
|
||||
|
||||
// highlight-start
|
||||
ctx.state.data = {
|
||||
// channel title
|
||||
title: `${user}/${repo} issues`,
|
||||
|
|
@ -232,11 +244,12 @@ module.exports = async (ctx) => {
|
|||
category: item.labels.map((label) => label.name),
|
||||
}));
|
||||
};
|
||||
// highlight-end
|
||||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## Via HTML web page using got
|
||||
|
||||
|
|
@ -269,10 +282,12 @@ You will add your own code to extract data from the HTML document, process it, a
|
|||
|
||||
As mentioned before, we want users to enter a GitHub username and a repository name, and fall back to `RSSHub` if they don't enter the repository name in the request URL.
|
||||
|
||||
```js{2-3}
|
||||
```js
|
||||
module.exports = async (ctx) => {
|
||||
// highlight-start
|
||||
// Retrieve user and repository name from the URL parameters
|
||||
const { user, repo = 'RSSHub' } = ctx.params;
|
||||
// highlight-end
|
||||
|
||||
ctx.state.data = {
|
||||
// Your RSS output here
|
||||
|
|
@ -288,20 +303,23 @@ After receiving the user input, we need to make a request to the web page to ret
|
|||
|
||||
To begin, we'll make an HTTP GET request to the API and load the HTML response into Cheerio, a library that helps us parse and manipulate HTML.
|
||||
|
||||
```js{5-6}
|
||||
```js
|
||||
const baseUrl = 'https://github.com';
|
||||
const { user, repo = 'RSSHub' } = ctx.params;
|
||||
|
||||
// Note that the ".data" property contains the full HTML source of the target page returned by the request
|
||||
// highlight-start
|
||||
const { data: response } = await got(`${baseUrl}/${user}/${repo}/issues`);
|
||||
const $ = cheerio.load(response);
|
||||
// highlight-end
|
||||
```
|
||||
|
||||
Next, we'll use Cheerio selectors to select the relevant HTML elements, parse the data we need, and convert it into an array.
|
||||
|
||||
```js{3-21}
|
||||
```js
|
||||
// We use a Cheerio selector to select all 'div' elements with the class name 'js-navigation-container'
|
||||
// that contain child elements with the class name 'flex-auto'.
|
||||
// highlight-start
|
||||
const item = $('div.js-navigation-container .flex-auto')
|
||||
// We use the `toArray()` method to retrieve all the DOM elements selected as an array.
|
||||
.toArray()
|
||||
|
|
@ -321,6 +339,7 @@ Next, we'll use Cheerio selectors to select the relevant HTML elements, parse th
|
|||
.map((item) => $(item).text()),
|
||||
};
|
||||
});
|
||||
// highlight-end
|
||||
|
||||
ctx.state.data = {
|
||||
// Your RSS output here
|
||||
|
|
@ -335,7 +354,7 @@ Assign them to the `ctx.state.data` object, and RSSHub's middleware will take ca
|
|||
|
||||
Here's an example code:
|
||||
|
||||
```js{29-36}
|
||||
```js
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
|
|
@ -364,6 +383,7 @@ module.exports = async (ctx) => {
|
|||
};
|
||||
});
|
||||
|
||||
// highlight-start
|
||||
ctx.state.data = {
|
||||
// channel title
|
||||
title: `${user}/${repo} issues`,
|
||||
|
|
@ -372,6 +392,7 @@ module.exports = async (ctx) => {
|
|||
// each feed item
|
||||
item: items,
|
||||
};
|
||||
// highlight-end
|
||||
};
|
||||
```
|
||||
|
||||
|
|
@ -381,7 +402,7 @@ The previous code provides only part of the information for each feed item. To p
|
|||
|
||||
Here's the updated code:
|
||||
|
||||
```js{12,29-43,48}
|
||||
```js
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
|
|
@ -393,6 +414,7 @@ module.exports = async (ctx) => {
|
|||
const { data: response } = await got(`${baseUrl}/${user}/${repo}/issues`);
|
||||
const $ = cheerio.load(response);
|
||||
|
||||
// highlight-next-line
|
||||
const list = $('div.js-navigation-container .flex-auto')
|
||||
.toArray()
|
||||
.map((item) => {
|
||||
|
|
@ -410,6 +432,7 @@ module.exports = async (ctx) => {
|
|||
};
|
||||
});
|
||||
|
||||
// highlight-start
|
||||
const items = await Promise.all(
|
||||
list.map((item) =>
|
||||
ctx.cache.tryGet(item.link, async () => {
|
||||
|
|
@ -425,10 +448,12 @@ module.exports = async (ctx) => {
|
|||
})
|
||||
)
|
||||
);
|
||||
// highlight-end
|
||||
|
||||
ctx.state.data = {
|
||||
title: `${user}/${repo} issues`,
|
||||
link: `https://github.com/${user}/${repo}/issues`,
|
||||
// highlight-next-line
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -437,10 +462,12 @@ module.exports = async (ctx) => {
|
|||
|
||||
Now the RSS feed will have a similar reading experience to the original website.
|
||||
|
||||
:::tip Note
|
||||
:::tip
|
||||
|
||||
Note that in the previous section, we only needed to send one HTTP request using an API to get all the data we needed. However, in this section, we need to send `1 + n` HTTP requests, where `n` is the number of feed items in the list from the first request.
|
||||
|
||||
Some websites may not want to receive too many requests in a short amount of time, which can cause them to return an error message like `429 Too Many Requests`.
|
||||
|
||||
:::
|
||||
|
||||
## Using the common configured route
|
||||
|
|
@ -477,7 +504,7 @@ module.exports = async (ctx) => {
|
|||
|
||||
Our RSS feed currently lacks content. The `item` must be set to add the content. Here's an example:
|
||||
|
||||
```js{15-22}
|
||||
```js
|
||||
const buildData = require('@/utils/common-config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
@ -492,6 +519,7 @@ module.exports = async (ctx) => {
|
|||
title: `${user}/${repo} issues`,
|
||||
baseUrl: 'https://github.com',
|
||||
},
|
||||
// highlight-start
|
||||
item: {
|
||||
item: 'div.js-navigation-container .flex-auto',
|
||||
// You need to use template literals if you want to use variables
|
||||
|
|
@ -500,6 +528,7 @@ module.exports = async (ctx) => {
|
|||
// description: ..., we don't have description for now
|
||||
pubDate: `parseDate($('relative-time').attr('datetime'))`,
|
||||
},
|
||||
// highlight-end
|
||||
});
|
||||
};
|
||||
```
|
||||
|
|
@ -510,10 +539,12 @@ You'll notice that the code is similar to the [Obtaining data from the webpage](
|
|||
|
||||
To get the full article of each issue, you need to add a few more lines of code. Here is an example:
|
||||
|
||||
```js{2-3,25-34}
|
||||
```js
|
||||
const buildData = require('@/utils/common-config');
|
||||
// highlight-start
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
// highlight-end
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const { user, repo = 'RSSHub' } = ctx.params;
|
||||
|
|
@ -535,6 +566,7 @@ module.exports = async (ctx) => {
|
|||
},
|
||||
});
|
||||
|
||||
// highlight-start
|
||||
await Promise.all(
|
||||
ctx.state.data.item.map((item) =>
|
||||
ctx.cache.tryGet(item.link, async () => {
|
||||
|
|
@ -545,6 +577,7 @@ module.exports = async (ctx) => {
|
|||
})
|
||||
)
|
||||
);
|
||||
// highlight-end
|
||||
};
|
||||
```
|
||||
|
||||
|
|
@ -577,10 +610,10 @@ module.exports = async (ctx) => {
|
|||
|
||||
Now, we will be using `puppeteer` instead of `got` to retrieve data from the web page.
|
||||
|
||||
<code-group>
|
||||
<code-block title="puppeteer">
|
||||
<Tabs>
|
||||
<TabItem value="puppeteer" label="puppeteer">
|
||||
|
||||
```js{9-33,39-40}
|
||||
```js
|
||||
const cheerio = require('cheerio');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
const logger = require('@/utils/logger');
|
||||
|
|
@ -589,6 +622,7 @@ module.exports = async (ctx) => {
|
|||
const baseUrl = 'https://github.com';
|
||||
const { user, repo = 'RSSHub' } = ctx.params;
|
||||
|
||||
// highlight-start
|
||||
// require puppeteer utility class and initialise a browser instance
|
||||
const browser = await require('@/utils/puppeteer')();
|
||||
// open a new tab
|
||||
|
|
@ -614,13 +648,16 @@ module.exports = async (ctx) => {
|
|||
const response = await page.content();
|
||||
// close the tab
|
||||
page.close();
|
||||
// highlight-end
|
||||
|
||||
const $ = cheerio.load(response);
|
||||
|
||||
// const item = ...;
|
||||
|
||||
// highlight-start
|
||||
// don't forget to close the browser instance at the end of the function
|
||||
browser.close();
|
||||
// highlight-end
|
||||
|
||||
ctx.state.data = {
|
||||
// Your RSS output here
|
||||
|
|
@ -628,10 +665,10 @@ module.exports = async (ctx) => {
|
|||
}
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="got">
|
||||
</TabItem>
|
||||
<TabItem value="got" label="got">
|
||||
|
||||
```js{9}
|
||||
```js
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
|
|
@ -640,6 +677,7 @@ module.exports = async (ctx) => {
|
|||
const baseUrl = 'https://github.com';
|
||||
const { user, repo = 'RSSHub' } = ctx.params;
|
||||
|
||||
// highlight-next-line
|
||||
const { data: response } = await got(`${baseUrl}/${user}/${repo}/issues`);
|
||||
const $ = cheerio.load(response);
|
||||
|
||||
|
|
@ -649,14 +687,14 @@ module.exports = async (ctx) => {
|
|||
}
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
### Retrieving full articles
|
||||
|
||||
Retrieving the full articles of each issue using a new browser page is similar to the [previous section](#better-reading-experience). We can use the following code:
|
||||
|
||||
```js{46-60,71-72}
|
||||
```js
|
||||
const cheerio = require('cheerio');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
const logger = require('@/utils/logger');
|
||||
|
|
@ -702,6 +740,7 @@ module.exports = async (ctx) => {
|
|||
const items = await Promise.all(
|
||||
list.map((item) =>
|
||||
ctx.cache.tryGet(item.link, async () => {
|
||||
// highlight-start
|
||||
// reuse the browser instance and open a new tab
|
||||
const page = await browser.newPage();
|
||||
// set up request interception to only allow document requests
|
||||
|
|
@ -717,6 +756,7 @@ module.exports = async (ctx) => {
|
|||
const response = await page.content();
|
||||
// close the tab after retrieving the HTML content
|
||||
page.close();
|
||||
// highlight-end
|
||||
|
||||
const $ = cheerio.load(response);
|
||||
|
||||
|
|
@ -727,8 +767,10 @@ module.exports = async (ctx) => {
|
|||
)
|
||||
);
|
||||
|
||||
// highlight-start
|
||||
// close the browser instance after all requests are done
|
||||
browser.close();
|
||||
// highlight-end
|
||||
|
||||
ctx.state.data = {
|
||||
title: `${user}/${repo} issues`,
|
||||
|
|
|
|||
|
|
@ -20,22 +20,20 @@ E.g.
|
|||
|
||||
## Filtering
|
||||
|
||||
:::caution Warning
|
||||
:::caution
|
||||
|
||||
Please make sure you've [fully URL-encoded](https://gchq.github.io/CyberChef/#recipe=URL_Encode(true)) the parameters. Do not rely on the browser's automatic URL encoding. Some characters, such as `+`, `&`, will not be automatically encoded, resulting in the final parsing result not being correct.
|
||||
|
||||
:::
|
||||
|
||||
:::caution Warning
|
||||
:::caution
|
||||
|
||||
filter supports Regex, and due to the fact that some Regex are vulnerable to DoS (ReDoS), default engine `re2` blocks some of these functionalities available in node `Regexp`. These two engines also behaves a bit different in some corner cases. [Details](https://github.com/uhop/node-re2#limitations-things-re2-does-not-support)
|
||||
|
||||
|
||||
If you need to use a different engine, please refer to [Deploy->Features->FILTER_REGEX_ENGINE](/install/#configuration-features).
|
||||
|
||||
:::
|
||||
|
||||
|
||||
The following URL query parameters are supported, Regex support is built-in.
|
||||
|
||||
Set `filter` to include the content
|
||||
|
|
@ -122,7 +120,7 @@ E.g. <https://rsshub.app/dcard/posts/popular?opencc=t2s>
|
|||
|
||||
## Multimedia processing
|
||||
|
||||
:::caution Warning
|
||||
:::caution
|
||||
|
||||
This is an experimental API
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 🎨️ ACG
|
||||
|
||||
## 005.tv {#005.tv}
|
||||
|
|
@ -20,7 +18,7 @@ import Route from '@site/src/components/Route';
|
|||
|
||||
<Route author="nczitzk" example="/78dm/news" path="/78dm/news/:path+" paramsDesc={['参数,见说明,默认为空']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若订阅 [新品速递](https://www.78dm.net/news),网址为 <https://www.78dm.net/news>。截取 `https://www.78dm.net` 到末尾的部分 `/news` 作为参数,此时路由为 [`/78dm/news`](https://rsshub.app/78dm/news)。
|
||||
|
||||
|
|
@ -34,7 +32,7 @@ import Route from '@site/src/components/Route';
|
|||
|
||||
<Route author="nczitzk" example="/78dm/eval_list" path="/78dm/eval_list/:path+" paramsDesc={['参数,见说明,默认为空']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若订阅 [精彩评测](https://www.78dm.net/eval_list),网址为 <https://www.78dm.net/eval_list>。截取 `https://www.78dm.net` 到末尾的部分 `/eval_list` 作为参数,此时路由为 [`/78dm/eval_list`](https://rsshub.app/78dm/eval_list)。
|
||||
|
||||
|
|
@ -48,7 +46,7 @@ import Route from '@site/src/components/Route';
|
|||
|
||||
<Route author="nczitzk" example="/78dm/ht_list" path="/78dm/ht_list/:path+" paramsDesc={['参数,见说明,默认为空']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若订阅 [好帖推荐](https://www.78dm.net/ht_list),网址为 <https://www.78dm.net/ht_list>。截取 `https://www.78dm.net` 到末尾的部分 `/ht_list` 作为参数,此时路由为 [`/78dm/ht_list`](https://rsshub.app/78dm/ht_list)。
|
||||
|
||||
|
|
@ -64,7 +62,7 @@ import Route from '@site/src/components/Route';
|
|||
|
||||
<Route author="xyqfer" example="/acfun/bangumi/5022158" path="/acfun/bangumi/:id" paramsDesc={['番剧 id']} radar="1" rssbud="1"/>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
番剧 id 不包含开头的 aa。
|
||||
例如:<http://www.acfun.cn/bangumi/aa5022158> 的番剧 id 是 5022158,不包括开头的 aa。
|
||||
|
|
@ -227,7 +225,7 @@ For more tags, please go to [Search torrent](https://bangumi.moe/search/index)
|
|||
|
||||
<Route author="nczitzk" example="/dlsite/home/new" path="/dlsite/:path+" paramsDesc={['Path, `/home/new` by default, as Release Calendar']}>
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
To subscribe to this route, you can first visit the site and specify filters, and then fill in the field after `https://www.dlsite.com/` in the URL of the corresponding page at the path of the route. Here are 2 examples.
|
||||
|
||||
|
|
@ -351,7 +349,7 @@ Sources
|
|||
| ----- | ------- | ------------ | ------- | ------------- | ------ | ------- | ------ |
|
||||
| posts | patreon | fanbox | gumroad | subscribestar | dlsite | discord | fantia |
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
When `posts` is selected as the value of the parameter **source**, the parameter **id** does not take effect.
|
||||
|
||||
|
|
@ -385,8 +383,10 @@ When `posts` is selected as the value of the parameter **source**, the parameter
|
|||
<Route author="axojhf" example="/lovelive-anime/schedules" path="/schedules/:serie?/:category?" paramsDesc={['Love Live! Series sub-projects abbreviation, see the following table', 'The official website lists the categories, see the following table for details']} radar="1">
|
||||
|
||||
:::tip Please note!
|
||||
|
||||
The schedule and other information obtained by this route is subject to the official website announcement!
|
||||
The RSS routing has not been rigorously tested and the information provided cannot be guaranteed accurate!
|
||||
|
||||
:::
|
||||
|
||||
| Sub-project Name (not full name) | 全シリーズ | Lovelive! | Lovelive! Sunshine!! | Lovelive! Nijigasaki High School Idol Club | Lovelive! Superstar!! | ラブライブ!スクールアイドルミュージカル |
|
||||
|
|
@ -411,7 +411,7 @@ The RSS routing has not been rigorously tested and the information provided cann
|
|||
|
||||
<Route author="nczitzk" example="/mox" path="/mox/:category?" paramsDesc={['分类,可在对应分类页 URL 中找到']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
在首页将分类参数选择确定后跳转到的分类页面 URL 中,`/l/` 后的字段即为分类参数。
|
||||
|
||||
|
|
@ -573,7 +573,7 @@ For example: <https://www.webtoons.com/zh-hant/drama/gongzhuweimian/list?title_n
|
|||
|
||||
## 俺の 3D エロ動画 (oreno3d) {#an-%E3%81%AE-3d-%E3%82%A8%E3%83%AD-dong-hua-(oreno3d)}
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
You can use some RSS parsing libraries (like `feedpraser` in `Python`) to receive the video update messages and download them automatically
|
||||
|
||||
|
|
@ -689,7 +689,7 @@ You can use some RSS parsing libraries (like `feedpraser` in `Python`) to receiv
|
|||
|
||||
## 禁漫天堂 {#jin-man-tian-tang}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
禁漫天堂有多个备用域名,本路由默认使用域名 <https://jmcomic.me>,若该域名无法访问,可以通过在路由最后加上 `?domain=<域名>` 指定路由访问的域名。如指定备用域名为 <https://jmcomic1.me>,则在所有禁漫天堂路由最后加上 `?domain=jmcomic1.me` 即可,此时路由为 [`/18comic?domain=jmcomic1.me`](https://rsshub.app/18comic?domain=jmcomic1.me)
|
||||
|
||||
|
|
@ -728,7 +728,7 @@ You can use some RSS parsing libraries (like `feedpraser` in `Python`) to receiv
|
|||
|
||||
<Route author="nczitzk" example="/18comic/search/photos/all/NTR" path="/18comic/search/:option?/:category?/:keyword?/:time?/:order?" paramsDesc={['选项,可选 `video` 和 `photos`,默认为 `photos`', '分类,同上表,默认为 `all` 即全部', '关键字,同上表,默认为空', '时间范围,同上表,默认为 `a` 即全部', '排列顺序,同上表,默认为 `mr` 即最新']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
关键字必须超过两个字,这是来自网站的限制。
|
||||
|
||||
|
|
@ -740,7 +740,7 @@ You can use some RSS parsing libraries (like `feedpraser` in `Python`) to receiv
|
|||
|
||||
<Route author="nczitzk" example="/18comic/album/292282" path="/18comic/album/:id" paramsDesc={['专辑 id,可在专辑页 URL 中找到']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
专辑 id 不包括 URL 中标题的部分。
|
||||
|
||||
|
|
@ -770,7 +770,7 @@ You can use some RSS parsing libraries (like `feedpraser` in `Python`) to receiv
|
|||
|
||||
<Route author="shininome" path="/manhuagui/subscribe" example="/manhuagui/subscribe" radar="1" rssbud="1" selfhost="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
个人订阅需要自建
|
||||
环境变量需要添加 MHGUI_COOKIE
|
||||
|
|
@ -847,7 +847,7 @@ You can use some RSS parsing libraries (like `feedpraser` in `Python`) to receiv
|
|||
| ------ | ------ | ------ | ------ | ------ | ------ | ------ |
|
||||
| mt | rise | new | pay | top | male | female |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
`time` 参数仅在 `type` 参数选为 **月票榜** 的时候生效。
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 💬️ BBS
|
||||
|
||||
## 19 楼 {#19-lou}
|
||||
|
|
@ -128,7 +126,7 @@ import Route from '@site/src/components/Route';
|
|||
|
||||
## Dcard {#dcard}
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
僅能透過台灣 IP 抓取。
|
||||
|
||||
|
|
@ -282,7 +280,7 @@ import Route from '@site/src/components/Route';
|
|||
|
||||
### AV {#playno.1-wan-le-da-ren-av}
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
目前观测到该博客可能禁止日本 IP 访问。建议部署在日本区以外的服务器上。
|
||||
|
||||
|
|
@ -637,7 +635,7 @@ When accessing Joeyray's Bar, `SCBOY_BBS_TOKEN` needs to be filled in `environme
|
|||
| --- | --- | ------ |
|
||||
| nba | cba | soccer |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
电竞分类参见 [游戏热帖](https://bbs.hupu.com/all-gg) 的对应路由 [`/hupu/all/all-gg`](https://rsshub.app/hupu/all/all-gg)。
|
||||
|
||||
|
|
@ -649,7 +647,7 @@ When accessing Joeyray's Bar, `SCBOY_BBS_TOKEN` needs to be filled in `environme
|
|||
|
||||
<Route author="LogicJake nczitzk" example="/hupu/bbs/topic-daily" path="/hupu/bbs/:id?/:order?" paramsDesc={['编号,可在对应社区 URL 中找到,默认为#步行街主干道', '排序方式,可选 `0` 即 最新回复 或 `1` 即 最新发布,默认为最新回复']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
更多社区参见 [社区](https://bbs.hupu.com)
|
||||
|
||||
|
|
@ -661,7 +659,7 @@ When accessing Joeyray's Bar, `SCBOY_BBS_TOKEN` needs to be filled in `environme
|
|||
|
||||
<Route author="nczitzk" example="/hupu/all/topic-daily" path="/hupu/all/:id?" paramsDesc={['编号,可在对应热帖版面 URL 中找到,默认为步行街每日话题']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
更多热帖版面参见 [论坛](https://bbs.hupu.com)
|
||||
|
||||
|
|
@ -997,7 +995,7 @@ When accessing Joeyray's Bar, `SCBOY_BBS_TOKEN` needs to be filled in `environme
|
|||
|
||||
<Route author="nczitzk" example="/muchong/290" path="/muchong/:id/:type?/:sort?" paramsDesc={['板块 id,可在板块页 URL 中找到', '子类别 id,可在板块页导航栏中找到,默认为 `all` 即 全部', '排序,可选 `order-tid` 即 发表排序,默认为 回帖排序']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
尚不支持需要登录访问的版块
|
||||
|
||||
|
|
@ -1194,7 +1192,7 @@ When accessing Joeyray's Bar, `SCBOY_BBS_TOKEN` needs to be filled in `environme
|
|||
|
||||
<Route author="NavePnow" example="/1point3acres/offer/12/null/CMU" path="/1point3acres/offer/:year?/:major?/:school?" paramsDesc={['录取年份 id,空为null', '录取专业 id,空为null', '录取学校 id,空为null']}>
|
||||
|
||||
:::caution 三个 id 获取方式
|
||||
:::tip 三个 id 获取方式
|
||||
|
||||
1. 打开 <https://offer.1point3acres.com>
|
||||
2. 打开控制台
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 🖊️️ Blog
|
||||
|
||||
## Amazon {#amazon}
|
||||
|
|
@ -48,8 +46,10 @@ import Route from '@site/src/components/Route';
|
|||
|
||||
<Route author="trganda" example="/freebuf/articles/web" path="/freebuf/articles/:type" paramsDesc={['文章类别', '文章id号,可选']}>
|
||||
|
||||
:::tip 使用说明
|
||||
:::tip
|
||||
|
||||
Freebuf 的文章页面带有反爬虫机制,所以目前无法获取文章的完整内容。
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
|
@ -82,7 +82,7 @@ Freebuf 的文章页面带有反爬虫机制,所以目前无法获取文章的
|
|||
|
||||
<Route author="hnrainll" example="/hashnode/blog/inklings" path="/hashnode/blog/:username" paramsDesc={['博主名称,用户头像 URL 中找到']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
username 为博主用户名,而非`xxx.hashnode.dev`中`xxx`所代表的 blog 地址。
|
||||
|
||||
|
|
@ -170,7 +170,7 @@ username 为博主用户名,而非`xxx.hashnode.dev`中`xxx`所代表的 blog
|
|||
|
||||
The List ID is the last part of the URL after `-`, for example, the username in "https://medium.com/@imsingee/list/collection-7e67004f23f9" is `imsingee`, and the ID is `7e67004f23f9`.
|
||||
|
||||
:::caution Note
|
||||
:::caution
|
||||
|
||||
To access private lists, only self-hosting is supported.
|
||||
|
||||
|
|
@ -182,7 +182,7 @@ To access private lists, only self-hosting is supported.
|
|||
|
||||
<Route author="ImSingee" example="/medium/for-you/imsingee" path="/medium/for-you/:user" paramsDesc={['Username']} selfhost="1">
|
||||
|
||||
:::caution Note
|
||||
:::caution
|
||||
|
||||
Personalized recommendations require the cookie value after logging in, so only self-hosting is supported. See the configuration module on the deployment page for details.
|
||||
|
||||
|
|
@ -194,7 +194,7 @@ Personalized recommendations require the cookie value after logging in, so only
|
|||
|
||||
<Route author="ImSingee" example="/medium/following/imsingee" path="/medium/following/:user" paramsDesc={['Username']} selfhost="1">
|
||||
|
||||
:::caution Note
|
||||
:::caution
|
||||
|
||||
Personalized recommendations require the cookie value after logging in, so only self-hosting is supported. See the configuration module on the deployment page for details.
|
||||
|
||||
|
|
@ -208,7 +208,7 @@ Personalized recommendations require the cookie value after logging in, so only
|
|||
|
||||
There are many tags, which can be obtained by clicking on a tag from the homepage and looking at the URL. For example, if the URL is `https://medium.com/?tag=web3`, then the tag is `web3`.
|
||||
|
||||
:::caution Note
|
||||
:::caution
|
||||
|
||||
Personalized recommendations require the cookie value after logging in, so only self-hosting is supported. See the configuration module on the deployment page for details.
|
||||
|
||||
|
|
@ -397,7 +397,7 @@ Limit the number of entries to be retrieved by adding `?limit=x` to the end of t
|
|||
|
||||
<Route author="nczitzk" example="/kenshin" path="/kenshin/:category?/:type?" paramsDesc={['分类,见下表,默认为首页', '子分类,见下表,默认为首页']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
如 `藝能新聞` 的 `日劇新聞` 分类,路由为 `/jnews/news_drama`
|
||||
|
||||
|
|
@ -515,7 +515,7 @@ Limit the number of entries to be retrieved by adding `?limit=x` to the end of t
|
|||
|
||||
<Route author="naixy28" example="/zhubai/via" path="/zhubai/:id" paramsDesc={['`id` 为竹白主页 url 中的三级域名,如 via.zhubai.love 的 `id` 为 `via`']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
在路由末尾处加上 `?limit=限制获取数目` 来限制获取条目数量,默认值为`20`
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 🎨️ Design
|
||||
|
||||
## Axis Studios {#axis-studios}
|
||||
|
|
@ -275,7 +273,7 @@ Default is under 'https://www.methodstudios.com/en/features'.
|
|||
|
||||
在 **精选** 分类下的 **运营设计** 子分类全部内容基础上,筛选出有 **视频**,且城市选择 **北京**,可直接使用路由 [`/zcool/discover/0/617/1/北京`](https://rsshub.app/zcool/discover/0/617/1/北京)
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
下方仅提供 **分类及其子分类** 参数的代码。**学校** 参数的代码可以在 [站酷发现页](https://www.zcool.com.cn/discover) 中选择跳转后,从浏览器地址栏中找到。
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 💰 Finance
|
||||
|
||||
## AI 财经社 {#ai-cai-jing-she}
|
||||
|
|
@ -143,7 +141,7 @@ import Route from '@site/src/components/Route';
|
|||
|
||||
<Route author="Rjnishant530" example="/finology/tag/startups" path="/tag/:topic" paramDesc={['Refer Table below or find in URL']} radar="1">
|
||||
|
||||
:::note Topic
|
||||
Topic
|
||||
|
||||
| Topic | Link |
|
||||
|---------------------|-----------------------|
|
||||
|
|
@ -176,8 +174,6 @@ import Route from '@site/src/components/Route';
|
|||
| Technology | technology |
|
||||
| Regulatory Bodies | regulatory-bodies |
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
||||
## finviz {#finviz}
|
||||
|
|
@ -276,7 +272,7 @@ Language
|
|||
|
||||
## TokenInsight {#tokeninsight}
|
||||
|
||||
:::tip Tips
|
||||
:::tip
|
||||
|
||||
TokenInsight also provides official RSS, you can take a look at <https://api.tokeninsight.com/reference/rss>.
|
||||
|
||||
|
|
@ -340,7 +336,7 @@ See filters in [Report](https://www.weforum.org/reports) for Year and Platform t
|
|||
|
||||
<Route author="nczitzk" example="/barronschina" path="/barronschina/:id?" paramsDesc={['栏目 id,默认为快讯']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
栏目 id 留空则返回快讯,在对应页地址栏 `columnId=` 后可以看到。
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# ❗️ Forecast and alerts
|
||||
|
||||
## BADAN METEOROLOGI, KLIMATOLOGI, DAN GEOFISIKA(Indonesian) {#badan-meteorologi%2C-klimatologi%2C-dan-geofisika(indonesian)}
|
||||
|
|
@ -204,7 +202,7 @@ Please skip the local service area code for `name`, for example `https://outage.
|
|||
| ---- | ---- | ---- | ---- | ---- |
|
||||
| | 红色 | 橙色 | 黄色 | 蓝色 |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若订阅全国的全部预警信息,此时路由为 [`/cneb/yjxx`](https://rsshub.app/cneb/yjxx)。
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 🎮 Gaming
|
||||
|
||||
## 3DMGame {#3dmgame}
|
||||
|
|
@ -268,7 +266,7 @@ Or
|
|||
|
||||
So the route is [`/itch/games/top-rated/tag-singleplayer`](https://rsshub.app/itch/games/top-rated/tag-singleplayer).
|
||||
|
||||
:::tip tips
|
||||
:::tip
|
||||
|
||||
You can browse all the tags at [here](https://itch.io/tags).
|
||||
|
||||
|
|
@ -506,7 +504,7 @@ For instance, in `https://store.steampowered.com/search/?specials=1&term=atelier
|
|||
|
||||
## TapTap International {#taptap-international}
|
||||
|
||||
:::caution Warning
|
||||
:::caution
|
||||
|
||||
Due to the regional restrictions, an RSSHub deployment in China Mainland may not work on accessing the TapTap International Website.
|
||||
|
||||
|
|
@ -544,7 +542,7 @@ Language Code
|
|||
|
||||
## TapTap 中国 {#taptap-zhong-guo}
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
由于区域限制,需要在有国内 IP 的机器上自建才能正常获取 RSS。\
|
||||
而对于《TapTap 国际版》则需要部署在具有海外出口的 IP 上才可正常获取 RSS。
|
||||
|
|
@ -834,7 +832,7 @@ Example:`https://www.iyingdi.com/tz/people/55547` ,id 是 `55547`
|
|||
|
||||
<Route author="nczitzk" example="/keylol" path="/keylol/:path+" paramsDesc={['路径,默认为热点聚焦']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若订阅 [热点聚焦](https://keylol.com/f161-1),网址为 <https://keylol.com/f161-1>。截取 `https://keylol.com/` 到末尾的部分 `f161-1` 作为参数,此时路由为 [`/keylol/f161-1`](https://rsshub.app/keylol/f161-1)。
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 📢 Government
|
||||
|
||||
## Australia Department of Home Affairs {#australia-department-of-home-affairs}
|
||||
|
|
@ -91,7 +89,7 @@ Category
|
|||
|
||||
<Route author="nczitzk" example="/ustr/press-releases" path="/ustr/press-releases/:year?/:month?" paramsDesc={['Year, current year by default', 'Month, empty by default, show contents in all year']}>
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
Fill in the English expression for the month in the Month field, eg `December` for the 12th Month。
|
||||
|
||||
|
|
@ -197,7 +195,7 @@ Language
|
|||
|
||||
<Route author="nczitzk" example="/gov/anhui/kjt/kjzx/tzgg" path="/gov/anhui/kjt/:path?" paramsDesc={['路径,默认为通知公告']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `http://kjt.ah.gov.cn/` 和 `/index.html` 之间的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -219,7 +217,7 @@ Language
|
|||
|
||||
<Route author="TonyRL" example="/bjsk/newslist-1394-1474-0" path="/bjsk/:path?" paramsDesc={['路径,默认为 `newslist-1486-0-0`']} radar="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `https://www.bjsk.org.cn/` 和 `.html` 之间的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -465,7 +463,7 @@ Language
|
|||
|
||||
<Route author="bigfei nczitzk" example="/gov/stats/sj/zxfb" path="/gov/stats/:path+" paramsDesc={['路径,默认为数据最新发布']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `http://www.stats.gov.cn/` 后的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -514,7 +512,7 @@ Language
|
|||
|
||||
<Route author="TonyRL" example="/gov/nmpa/xxgk/ggtg" path="/gov/nmpa/:path+" paramsDesc={['路径,默认为公告通告']} radar="1" rssbud="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `https://www.nmpa.gov.cn/` 与 `/index.html` 之间的字段,下面是一个例子。
|
||||
|
||||
|
|
@ -530,7 +528,7 @@ Language
|
|||
|
||||
<Route author="nczitzk" example="/gov/nifdc/bshff/ylqxbzhgl/qxggtzh" path="/gov/nifdc/:path+" paramsDesc={['路径,默认为公告通告']} radar="1" rssbud="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `https://www.nifdc.gov.cn/nifdc/` 与 `/index.html` 之间的字段,下面是一个例子。
|
||||
|
||||
|
|
@ -546,7 +544,7 @@ Language
|
|||
|
||||
<Route author="run-ze" example="/cmde/xwdt/zxyw" path="/cmde/:cate*" paramsDesc={['路径,默认为最新要闻']} radar="1" puppeteer="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `https://www.cmde.org.cn/` 与 `/index.html` 之间的字段,下面是一个例子。
|
||||
|
||||
|
|
@ -606,7 +604,7 @@ Language
|
|||
|
||||
<Route author="Derekmini nczitzk" example="/gov/nsfc" path="/gov/nsfc/path+" paramsDesc={['路径,默认为基金要闻']} radar="1" rssbud="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若订阅 [基金要闻 - 通知公告](https://www.nsfc.gov.cn/publish/portal0/tab442),网址为 <https://www.nsfc.gov.cn/publish/portal0/tab442>。截取 `https://www.nsfc.gov.cn` 到末尾的部分 `/publish/portal0/tab442` 作为参数,此时路由为 [`/gov/nsfc/publish/portal0/tab442`](https://rsshub.app/gov/nsfc/publish/portal0/tab442)。
|
||||
|
||||
|
|
@ -650,7 +648,7 @@ Language
|
|||
|
||||
<Route author="TonyRL" example="/gov/sasac/n2588030/n16436141" path="/gov/sasac/:path+" paramsDesc={['路径,可在 URL 找到']} radar="1" rssbud="1" >
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `http://www.sasac.gov.cn/` 与 `/index.html` 之间的字段,下面是一个例子。
|
||||
|
||||
|
|
@ -759,7 +757,7 @@ Language
|
|||
|
||||
<Route author="ShuiHuo" example="/gov/maoming/www/zwgk/zcjd/jd" path="/gov/maoming/:path+" paramsDesc={['路径']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中茂名有关政府网站的域名最前面的部分和域名后的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -785,7 +783,7 @@ Language
|
|||
|
||||
<Route author="ShuiHuo" example="/gov/dianbai/www/zwgk/zcjd" path="/gov/dianbai/:path+" paramsDesc={['路径,只填写 `www` 默认为 政务公开 > 政策解读']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中最前面的部分和域名后的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -799,7 +797,7 @@ Language
|
|||
|
||||
<Route author="ShuiHuo" example="/gov/xinyi/www/zwgk/zcjd" path="/gov/xinyi/:path+" paramsDesc={['路径,只填写 `www` 默认为 政务公开 > 政策解读']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中最前面的部分和域名后的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -813,7 +811,7 @@ Language
|
|||
|
||||
<Route author="ShuiHuo" example="/gov/gaozhou/www/zwgk/zcjd" path="/gov/gaozhou/:path+" paramsDesc={['路径,只填写 `www` 默认为 政策解读']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中最前面的部分和域名后的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -827,7 +825,7 @@ Language
|
|||
|
||||
<Route author="ShuiHuo" example="/gov/huazhou/www/zwgk/zcjd" path="/gov/huazhou/:path+" paramsDesc={['路径,只填写 `www` 默认为 政策解读']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中最前面的部分和域名后的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -841,7 +839,7 @@ Language
|
|||
|
||||
<Route author="ShuiHuo" example="/gov/mgs/www/zwgk/zcjd" path="/gov/mgs/:path+" paramsDesc={['路径,只填写 `www` 默认为 政务公开 > 政策解读']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中最前面的部分和域名后的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -855,7 +853,7 @@ Language
|
|||
|
||||
<Route author="ShuiHuo" example="/gov/mmht/www/xwzx/zcjd" path="/gov/mmht/:path+" paramsDesc={['路径,只填写 `www` 默认为 政务公开 > 政策解读']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中最前面的部分和域名后的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -869,7 +867,7 @@ Language
|
|||
|
||||
<Route author="ShuiHuo" example="/gov/sdb/www/zwgk/zcjd" path="/gov/sdb/:path+" paramsDesc={['路径,只填写 `www` 默认为 政务公开 > 政策解读']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中最前面的部分和域名后的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -903,7 +901,7 @@ Language
|
|||
|
||||
<Route author="nczitzk" example="/gov/nopss/GB/219469" path="/gov/nopss/:path+" paramsDesc={['路径,默认为通知公告']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `http://www.nopss.gov.cn/` 后的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -963,7 +961,7 @@ Language
|
|||
|
||||
<Route author="nczitzk" example="/gov/shanghai/yjj/zh" path="/gov/shanghai/yjj/:path+" paramsDesc={['路径参数']} radar="1" rssbud="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `https://yjj.sh.gov.cn/` 与 `/index.html` 之间的字段,下面是一个例子。
|
||||
|
||||
|
|
@ -1002,7 +1000,7 @@ Language
|
|||
| 往期专题 | wqzt |
|
||||
| 区县专题 | qxzt |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
**热点专题**栏目包含**市本级专题**和**区县专题**
|
||||
|
||||
|
|
@ -1176,7 +1174,7 @@ Language
|
|||
|
||||
<Route author="nczitzk" example="/gov/cnnic/gywm/xwzx/xwzxtzgg/" path="/gov/cnnic/:path+" paramsDesc={['路径,默认为热点信息']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `http://www.cnnic.net.cn/` 后的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -1192,7 +1190,7 @@ Language
|
|||
|
||||
<Route author="nczitzk" example="/81/81rc" path="/81/81rc/:path+" paramsDesc={['路径,默认为工作动态']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若订阅 [文职人员 - 工作动态](https://81rc.81.cn/wzry/gzdt),网址为 <https://81rc.81.cn/wzry/gzdt>。截取 `https://81rc.81.cn` 到末尾的部分 `/wzry/gzdt` 作为参数,此时路由为 [`/81/81rc/wzry/gzdt`](https://rsshub.app/81/81rc/wzry/gzdt)。
|
||||
|
||||
|
|
@ -1294,7 +1292,7 @@ Language
|
|||
|
||||
<Route author="nczitzk" example="/gov/cmse/fxrw/wtfx/rwdt" path="/gov/cmse/fxrw/:id/:category" paramsDesc={['任务 id,可在对应任务页 URL 中找到', '分类 id,见下表,可在对应任务页 URL 中找到']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
下表分类可能并不完整。请查看各飞行任务详情页获得完整分类。
|
||||
|
||||
|
|
@ -1356,10 +1354,12 @@ Language
|
|||
|
||||
<Route author="chinobing LogicJake" example="/gov/csrc/news/c101975/zfxxgk_zdgk.shtml" path="/gov/csrc/news/:suffix*" paramsDesc={['路径,预设为 `c100028/common_xq_list.shtml`']} radar="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `http://www.csrc.gov.cn/csrc/` 后的字段。下面是一个例子。
|
||||
|
||||
若订阅 [证监会要闻](http://www.csrc.gov.cn/csrc/c100028/common_xq_list.shtml) 则将对应页面 URL <http://www.csrc.gov.cn/csrc/c100028/common_xq_list.shtml> 中 `http://www.csrc.gov.cn/csrc/` 后的字段 `c100028/common_xq_list.shtml` 作为路径填入。此时路由为 [`/gov/csrc/news/c100028/common_xq_list.shtml`](https://rsshub.app/gov/csrc/news/c100028/common_xq_list.shtml)
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
|
@ -1592,7 +1592,7 @@ Language
|
|||
|
||||
<Route author="Jeason0228 TonyRL" example="/gov/customs/list/paimai" path="/gov/customs/list/:gchannel?" paramsDesc={['支持 `paimai` 及 `fagui` 2个频道,默认为 `paimai`']} anticrawler="1" puppeteer="1" radar="1" rssbud="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
由于区域限制,建议在国内 IP 的机器上自建
|
||||
|
||||
|
|
@ -1713,7 +1713,7 @@ Language
|
|||
|
||||
<Route author="bigfei" example="/gov/ccdi/yaowenn" path="/gov/ccdi/:path+" paramsDesc={['路径,默认为 要闻']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `http://www.ccdi.gov.cn/` 后的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -1729,7 +1729,7 @@ Language
|
|||
|
||||
<Route author="drgnchan" example="/gov/cac/xxh" path="/gov/cac/:path+" paramsDesc={['路径,比如xxh表示信息化']} radar='1'>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径填写对应页面 URL 中间部分。例如:
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 🔬 Scientific Journal
|
||||
|
||||
## Academy of Management {#academy-of-management}
|
||||
|
|
@ -37,7 +35,7 @@ Return results from 2020
|
|||
|
||||
<Route author="nczitzk" example="/acs/journal/jacsat" path="/aom/journal/:id" paramsDesc={['Journal id, can be found in URL']} supportScihub="1">
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
See [Browse Content](https://pubs.acs.org)
|
||||
|
||||
|
|
@ -53,7 +51,7 @@ See [Browse Content](https://pubs.acs.org)
|
|||
|
||||
The URL of the journal [American Economic Review](https://www.aeaweb.org/journals/aer) is `https://www.aeaweb.org/journals/aer`, where `aer` is the id of the journal, so the route for this journal is `/aeaweb/aer`.
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
More jounals can be found in [AEA Journals](https://www.aeaweb.org/journals).
|
||||
|
||||
|
|
@ -69,7 +67,7 @@ More jounals can be found in [AEA Journals](https://www.aeaweb.org/journals).
|
|||
|
||||
Refer to the URL format `pubs.aip.org/:pub/:jrn`
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
More jounals can be found in [AIP Publications](https://publishing.aip.org/publications/find-the-right-journal).
|
||||
|
||||
|
|
@ -85,7 +83,7 @@ More jounals can be found in [AIP Publications](https://publishing.aip.org/publi
|
|||
|
||||
The URL of the journal [Annual Review of Analytical Chemistry](https://www.annualreviews.org/journal/anchem) is `https://www.annualreviews.org/journal/anchem`, where `anchem` is the id of the journal, so the route for this journal is `/annualreviews/anchem`.
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
More jounals can be found in [Browse Journals](https://www.annualreviews.org/action/showPublications).
|
||||
|
||||
|
|
@ -288,7 +286,7 @@ Papers that are published in this week.
|
|||
|
||||
## Nature Journal {#nature-journal}
|
||||
|
||||
:::tip Tips
|
||||
:::tip
|
||||
|
||||
You can get all short name of a journal from <https://www.nature.com/siteindex> or [Journal List](#nature-journal-journal-list).
|
||||
|
||||
|
|
@ -353,7 +351,7 @@ Subscribe to the cover images of the Nature journals, and get the latest publica
|
|||
|
||||
<Route author="y9c TonyRL" example="/nature/highlight" path="/nature/highlight/:journal?" paramsDesc={['short name for a journal, `nature` by default']} supportScihub="1" radar="1" rssbud="1">
|
||||
|
||||
:::caution Warning
|
||||
:::caution
|
||||
|
||||
Only some journals are supported.
|
||||
|
||||
|
|
@ -389,8 +387,10 @@ Return results from 2020
|
|||
|
||||
<Route author="emdoe HenryQW y9c" example="/pnas/latest" path="/pnas/:topicPath*" paramsDesc={['Topic path, support **Featured Topics**, **Articles By Topic** and [**Collected Papers**](https://www.pnas.org/about/collected-papers), `latest` by default']} radar="1" anticrawler="1" puppeteer="1" supportScihub="1">
|
||||
|
||||
:::tip Tips
|
||||
:::tip
|
||||
|
||||
Some topics require adding `topic/` to `topicPath` like [`/pnas/topic/app-math`](https://rsshub.app/pnas/topic/app-math) and some don't like [`/pnas/biophysics-and-computational-biology`](https://rsshub.app/pnas/biophysics-and-computational-biology)
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
|
@ -401,7 +401,7 @@ Some topics require adding `topic/` to `topicPath` like [`/pnas/topic/app-math`]
|
|||
|
||||
<Route author="y9c nczitzk" example="/pubmed/trending" path="/pubmed/trending/:filter?" paramsDesc={['Filters, can be found in URL']} supportScihub="1">
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
For the parameter **filter**, the `filter` parameter in the URL should be split into a string by `,`, here is an example.
|
||||
|
||||
|
|
@ -491,7 +491,7 @@ Category
|
|||
| -------- | --------- | --------- | ------- | -- | ------------------ |
|
||||
| mobile | internet | boardcast | general | it | industry-resources |
|
||||
|
||||
:::tip Tips
|
||||
:::tip
|
||||
|
||||
If `country` or `type` includes empty space, use `-` instead. For example, `United States` needs to be replaced with `United-States`, `White paper` needs to be replaced with `White-paper`
|
||||
|
||||
|
|
@ -571,8 +571,10 @@ Return results from 2020
|
|||
|
||||
### 作者期刊文献 {#zhong-guo-zhi-wang-zuo-zhe-qi-kan-wen-xian}
|
||||
|
||||
:::tip 注意
|
||||
:::tip
|
||||
|
||||
可能仅限中国大陆服务器访问,以实际情况为准。
|
||||
|
||||
:::
|
||||
|
||||
<Route author="harveyqiu Derekmini" example="/cnki/author/000042423923" path="/cnki/author/:code" paramsDesc={['作者对应code,可以在网址中得到']}/>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 🎥 Live
|
||||
|
||||
|
|
@ -52,7 +51,7 @@ import Route from '@site/src/components/Route';
|
|||
|
||||
<Route author="Qixingchen" example="/bilibili/live/area/207/online" path="/bilibili/live/area/:areaID/:order" paramsDesc={['分区 ID 分区增删较多, 可通过 [分区列表](https://api.live.bilibili.com/room/v1/Area/getList) 查询', '排序方式, live_time 开播时间, online 人气']}>
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
由于接口未提供开播时间,如果直播间未更换标题与分区,将视为一次。如果直播间更换分区与标题,将视为另一项
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 🔊 Multimedia
|
||||
|
||||
## 141JAV {#141jav}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
官方提供的订阅源不支持 BT 下载订阅,地址为 <https://141jav.com/feeds/>
|
||||
|
||||
|
|
@ -52,7 +50,7 @@ import Route from '@site/src/components/Route';
|
|||
|
||||
## 141PPV {#141ppv}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
官方提供的订阅源不支持 BT 下载订阅,地址为 <https://141ppv.com/feeds/>
|
||||
|
||||
|
|
@ -148,7 +146,7 @@ import Route from '@site/src/components/Route';
|
|||
|
||||
<Route author="nczitzk" example="/4ksj/forum" path="/4ksj/forum/:id?" paramsDesc={['分类 id,默认为最新4K电影']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若订阅 [最新 4K 电影](https://www.4ksj.com/forum-2-1.html),网址为 <https://www.4ksj.com/forum-2-1.html>。截取 `https://www.4ksj.com/forum-` 到末尾 `.html` 的部分 `2-1` 作为参数,此时路由为 [`/4ksj/forum/2-1`](https://rsshub.app/4ksj/forum/2-1)。
|
||||
|
||||
|
|
@ -249,7 +247,7 @@ When `uncensored_makersr` as **Uncensored** is chosen as **Category**, the avail
|
|||
|
||||
## 91porn {#91porn}
|
||||
|
||||
:::tip Tips
|
||||
:::tip
|
||||
|
||||
91porn has multiple backup domains, routes use the permanent domain <https://91porn.com> by default. If the domain is not accessible, you can add `?domain=<domain>` to specify the domain to be used. If you want to specify the backup domain to <https://0122.91p30.com>, you can add `?domain=0122.91p30.com` to the end of all 91porn routes, then the route will become [`/91porn?domain=0122.91p30.com`](https://rsshub.app/91porn?domain=0122.91p30.com)
|
||||
|
||||
|
|
@ -283,7 +281,8 @@ When `uncensored_makersr` as **Uncensored** is chosen as **Category**, the avail
|
|||
|
||||
### 演员 {#av01%EF%BC%88av01.tv%EF%BC%89-yan-yuan}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
当没有给定排序类型时,默认为按上传时间排序及 mr
|
||||
|
||||
:::
|
||||
|
|
@ -334,7 +333,7 @@ When `uncensored_makersr` as **Uncensored** is chosen as **Category**, the avail
|
|||
|
||||
<Route author="nczitzk" example="/btzj" path="/btzj/:category?" paramsDesc={['分类,可在对应分类页 URL 中找到,默认为首页']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
分类页中域名末尾到 `.htm` 前的字段即为对应分类,如 [电影](https://www.btbtt20.com/forum-index-fid-951.htm) <https://www.btbtt20.com/forum-index-fid-951.htm> 中域名末尾到 `.htm` 前的字段为 `forum-index-fid-951`,所以路由应为 [`/btzj/forum-index-fid-951`](https://rsshub.app/btzj/forum-index-fid-951)
|
||||
|
||||
|
|
@ -360,7 +359,7 @@ When `uncensored_makersr` as **Uncensored** is chosen as **Category**, the avail
|
|||
| -------------------- | -------------------- |
|
||||
| forum-index-fid-1187 | forum-index-fid-1191 |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
BT 之家的域名会变更,本路由以 <https://www.btbtt20.com> 为默认域名,若该域名无法访问,可以通过在路由后方加上 `?domain=<域名>` 指定路由访问的域名。如指定域名为 <https://www.btbtt15.com>,则在 `/btzj` 后加上 `?domain=btbtt15.com` 即可,此时路由为 [`/btzj?domain=btbtt15.com`](https://rsshub.app/btzj?domain=btbtt15.com)
|
||||
|
||||
|
|
@ -382,7 +381,7 @@ BT 之家的域名会变更,本路由以 <https://www.btbtt20.com> 为默认
|
|||
|
||||
</Route>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
由于 BT 之家域名有多个。此 feed 对应[`https://www.88btbtt.com`](https://www.88btbtt.com)域名和[`http://www.2btjia.com/`](http://www.2btjia.com/)域名.
|
||||
可空,默认为 base
|
||||
|
|
@ -393,7 +392,7 @@ BT 之家的域名会变更,本路由以 <https://www.btbtt20.com> 为默认
|
|||
|
||||
### 栏目 {#cntv-lan-mu}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
栏目 ID 查找示例:
|
||||
打开栏目具体某一期页面,F12 控制台输入`column_id`得到栏目 ID。
|
||||
|
|
@ -431,7 +430,9 @@ BT 之家的域名会变更,本路由以 <https://www.btbtt20.com> 为默认
|
|||
<Route author="savokiss" example="/domp4/detail/LBTANI22222I" path="/domp4/detail/:id" paramsDesc={['从剧集详情页 URL 处获取,如:`https://www.mp4kan.com/html/LBTANI22222I.html`,取 `.html` 前面部分']} radar="1" supportBT="1"/>
|
||||
|
||||
:::tip
|
||||
|
||||
由于大部分详情页是 `/html/xxx.html`,还有部分是 `/detail/123.html`,所以此处做了兼容,id 取 `xxx` 或者 `123` 都可以。
|
||||
|
||||
:::
|
||||
|
||||
## E-Hentai {#e-hentai}
|
||||
|
|
@ -440,7 +441,7 @@ BT 之家的域名会变更,本路由以 <https://www.btbtt20.com> 为默认
|
|||
|
||||
<Route author="nczitzk" example="/e-hentai/category/manga" path="/e-hentai/category/:category?/:needTorrents?/:needImages?" paramsDesc={['分类,可在对应分类页中找到,默认为首页', '需要输出种子文件,填写 true/yes 表示需要,默认需要', '需要显示大图,填写 true/yes 表示需要,默认需要']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
参数 **需要输出种子文件** 设置为 `true` `yes` `t` `y` 等值后,RSS 会携带种子文件的路径,以供支持 RSS 的下载工具订阅下载。
|
||||
|
||||
|
|
@ -468,7 +469,7 @@ BT 之家的域名会变更,本路由以 <https://www.btbtt20.com> 为默认
|
|||
|
||||
<Route author="nczitzk" example="/e-hentai/tag/language:chinese" path="/e-hentai/tag/:tag?" paramsDesc={['标签,可在对应标签页中找到,默认为首页']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
参数 **需要输出种子文件**、**需要显示大图** 的说明同上,以下是一个例子:
|
||||
|
||||
|
|
@ -482,7 +483,7 @@ BT 之家的域名会变更,本路由以 <https://www.btbtt20.com> 为默认
|
|||
|
||||
<Route author="nczitzk" example="/e-hentai/search/f_search=haha" path="/e-hentai/search/:keyword?" paramsDesc={['关键字,可以在搜索结果页的 URL 中找到,默认为首页']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
参数 **需要输出种子文件**、**需要显示大图** 的说明同上,以下是一个例子:
|
||||
|
||||
|
|
@ -540,7 +541,7 @@ Official RSS: <https://eztv.io/ezrss.xml>
|
|||
|
||||
<Route author="nczitzk" example="/ibc/radio/maitta" path="/ibc/radio/:id?" paramsDesc={['Radio id, can be found in URL, イヤーマイッタマイッタ by default']} supportPodcast="1">
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
If you subscribe to [イヤーマイッタマイッタ](https://www.ibc.co.jp/radio/maitta/audio), the URL is <https://www.ibc.co.jp/radio/maitta/audio>. Intercept `maitta` between `https://www.ibc.co.jp/radio/` and `/audio/` as an argument, then the route will be [`/ibc/radio/maitta`](https://rsshub.app/ibc/radio/maitta).
|
||||
|
||||
|
|
@ -562,7 +563,7 @@ You can change the language of each route to the languages listed below.
|
|||
|
||||
:::
|
||||
|
||||
:::tip Tips
|
||||
:::tip
|
||||
|
||||
JavBus has multiple backup domains, these routes use default domain <https://javbus.com>. If the domain is unreachable, you can add `?domain=<domain>` to the end of the route to specify the domain to visit. Let say you want to use the backup domain <https://javsee.icu>, you can add `?domain=javsee.icu` to the end of the route, then the route will be [`/javbus/en?domain=javsee.icu`](https://rsshub.app/javbus?domain=javsee.icu)
|
||||
|
||||
|
|
@ -676,7 +677,7 @@ For more actresses [Western AV Idols](https://www.javbus.org/en/actresses)
|
|||
|
||||
## JavDB {#javdb}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
JavDB 有多个备用域名,本路由默认使用永久域名 <https://javdb.com> ,若该域名无法访问,可以通过在路由最后加上 `?domain=<域名>` 指定路由访问的域名。如指定备用域名为 <https://javdb36.com>,则在所有 JavDB 路由最后加上 `?domain=javdb36.com` 即可,此时路由为 [`/javdb?domain=javdb36.com`](https://rsshub.app/javdb?domain=javdb36.com)
|
||||
|
||||
|
|
@ -686,7 +687,7 @@ JavDB 有多个备用域名,本路由默认使用永久域名 <https://javdb.c
|
|||
|
||||
:::
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
你可以通过指定 `limit` 参数来获取特定数量的条目,即可以通过在路由后方加上 `?limit=25`,默认为单次获取 20 个条目,即默认 `?limit=20`
|
||||
|
||||
|
|
@ -722,7 +723,7 @@ JavDB 有多个备用域名,本路由默认使用永久域名 <https://javdb.c
|
|||
|
||||
<Route author="nczitzk" example="/javdb/tags/c2=5&c10=1" path="/javdb/tags/:query?/:category?" paramsDesc={['筛选,默认为 `c10=1`', '分类,见下表,默认为 `有碼`']} anticrawler="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
在 [分類](https://javdb.com/tags) 中选定分类后,URL 中 `tags?` 后的字段即为筛选参数。
|
||||
|
||||
|
|
@ -886,7 +887,7 @@ JavDB 有多个备用域名,本路由默认使用永久域名 <https://javdb.c
|
|||
| ------------------------------ | -------------------- |
|
||||
| 1 | 2 |
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
See [Categories](https://www.javlibrary.com/en/genres.php) to view all categories.
|
||||
|
||||
|
|
@ -902,7 +903,7 @@ See [Categories](https://www.javlibrary.com/en/genres.php) to view all categorie
|
|||
| ------------------------------ | -------------------- |
|
||||
| 1 | 2 |
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
See [Ranking](https://www.javlibrary.com/en/star_mostfav.php) to view stars by ranks.
|
||||
|
||||
|
|
@ -1056,7 +1057,7 @@ See [Directory](https://www.javlibrary.com/en/star_list.php) to view all stars.
|
|||
|
||||
## OneJAV {#onejav}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
官方提供的订阅源不支持 BT 下载订阅,地址为 <https://onejav.com/feeds/>
|
||||
|
||||
|
|
@ -1248,7 +1249,7 @@ Refer to [Pornhub F.A.Qs](https://help.pornhub.com/hc/en-us/articles/36004432703
|
|||
|
||||
## The Movie Database {#the-movie-database}
|
||||
|
||||
:::tip Tips
|
||||
:::tip
|
||||
|
||||
Refer to <https://developers.themoviedb.org/3/getting-started/languages> for the language parameter in the route.
|
||||
|
||||
|
|
@ -1342,15 +1343,17 @@ When `mediaType` is `movie`, `sheet` should be:
|
|||
|
||||
<Route author="TonyRL" example="/iqiyi/album/神武天尊-2020-1b4lufwxd7h" path="/iqiyi/album/:id" paramsDesc={['剧集 id, 可在该主页 URL 中找到']} radar="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
可抓取內容根据服务器所在地区而定
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
||||
## 哔嘀影视 {#bi-di-ying-shi}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
哔嘀影视有多个备用域名,路由默认使用域名 <https://bdys01.com>。若该域名无法访问,可以通过在路由最后加上 `?domain=<域名>` 指定路由访问的域名。如指定备用域名为 <https://bde4.icu>,则在所有哔嘀影视路由最后加上 `?domain=bde4.icu` 即可,此时路由为 [`/bdys?domain=bde4.icu`](https://rsshub.app/bdys?domain=bde4.icu)
|
||||
|
||||
|
|
@ -1448,7 +1451,7 @@ When `mediaType` is `movie`, `sheet` should be:
|
|||
|
||||
<Route author="cnzgray" example="/t66y/post/3286088" path="/t66y/post/:tid" paramsDesc={['帖子 id, 可在帖子 URL 中找到']} anticrawler="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
帖子 id 查找办法:
|
||||
|
||||
|
|
@ -1740,9 +1743,10 @@ When `mediaType` is `movie`, `sheet` should be:
|
|||
|
||||
## 网易云音乐 {#wang-yi-yun-yin-yue}
|
||||
|
||||
:::tip 部分歌单及听歌排行信息为登陆后可见
|
||||
:::tip
|
||||
|
||||
部分歌单及听歌排行信息为登陆后可见,自建时将环境变量`NCM_COOKIES`设为登陆后的 Cookie 值,即可正常获取。
|
||||
|
||||
:::
|
||||
|
||||
### 歌单歌曲 {#wang-yi-yun-yin-yue-ge-dan-ge-qu}
|
||||
|
|
@ -1793,10 +1797,12 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
|
|||
|
||||
目前喜马拉雅的 API 只能一集一集的获取各节目上的 ShowNote,会极大的占用系统资源,所以默认为不获取节目的 ShowNote。下方有一个新的路径可选获取 ShowNote。
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
专辑类型即 url 中的分类拼音,使用通用分类 `album` 通常是可行的,专辑 id 是跟在**分类拼音**后的那个 id, 不要输成某集的 id 了
|
||||
|
||||
**付费内容需要配置好已购买账户的 token 才能收听,详情见部署页面的配置模块**
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
|
@ -1813,7 +1819,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
|
|||
|
||||
<Route author="prnake" example="/xiaoyuzhou" path="/xiaoyuzhou" selfhost="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
小宇宙的 api 需要验证 `x-jike-device-id`、`x-jike-access-token` 和 `x-jike-refresh-token` 。必要时需要自行配置,具体见部署文档。
|
||||
|
||||
|
|
@ -1841,7 +1847,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
|
|||
|
||||
所以对应路由为 [`/radio/album/15682090498666`](https://rsshub.app/radio/album/15682090498666)
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
部分专辑不适用该路由,此时可以尝试 [节目](#yun-ting-jie-mu) 路由
|
||||
|
||||
|
|
@ -1857,7 +1863,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
|
|||
|
||||
所以对应路由为 [`/radio/1552135`](https://rsshub.app/radio/1552135)
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
该路由仅适用于更新时间较早的电台节目,如 [共和国追梦人](http://www.radio.cn/pc-portal/sanji/detail.html?columnId=1552135)
|
||||
|
||||
|
|
@ -1875,7 +1881,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
|
|||
|
||||
所以对应路由为 [`/radio/zhibo/1395528`](https://rsshub.app/radio/zhibo/1395528)
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
查看更多电台直播节目,可前往 [电台直播](http://www.radio.cn/pc-portal/erji/radioStation.html)
|
||||
|
||||
|
|
@ -1907,7 +1913,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
|
|||
|
||||
## 中文播客榜 {#zhong-wen-bo-ke-bang}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
可以通过指定 `limit` 参数确定榜单排名下限,默认为 250。
|
||||
|
||||
|
|
@ -1963,7 +1969,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
|
|||
|
||||
### 影视 {#zi-mu-zu-%EF%BC%88zimuzu.tv%EF%BC%89-ying-shi}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
跟官方提供的 RSS 相比:官方使用了不规范的 magnet 字段,无法被 BT 客户端识别并自动下载,其他数据相同
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 📱 New media
|
||||
|
||||
## 199IT {#199it}
|
||||
|
|
@ -96,7 +94,7 @@ import Route from '@site/src/components/Route';
|
|||
|
||||
访问 “邱毅看平潭” 专题,会跳转到 <https://www.52hrtt.com/global/n/w/symposium/F1626082387819>。其中 `F1626082387819` 即为 **专题 id** 对应的地区代码。
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
更多的专题可以点击 [这里](https://www.52hrtt.com/global/n/w/symposium)
|
||||
|
||||
|
|
@ -209,7 +207,7 @@ Supported categories: Philosophy, Science, Psychology, Society, and Culture.
|
|||
|
||||
<Route author="nczitzk" example="/bad" path="/bad/:path+" paramsDesc={['路径,默认为首页热门']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若订阅 [每日热点 - 最新](https://bad.news/tag/每日热点/sort-new),网址为 [https://bad.news/tag/ 每日热点 /sort-new](https://bad.news/tag/每日热点/sort-new)。截取 `https://bad.news` 到末尾的部分 `/tag/每日热点/sort-new` 作为参数,此时路由为 [`/bad/tag/每日热点/sort-new`](https://rsshub.app/bad/tag/每日热点/sort-new)。
|
||||
|
||||
|
|
@ -348,7 +346,7 @@ Category of news
|
|||
|
||||
<Route author="cczhong11 nczitzk" example="/cnbeta/topics/453" path="/cnbeta/topics/:id" paramsDesc={['主题 id,可在对应主题页的 URL 中找到']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
完整的主题列表参见 [主题列表](https://www.cnbeta.com.tw/topics.htm)
|
||||
|
||||
|
|
@ -494,7 +492,7 @@ Category of news
|
|||
|
||||
<Route author="nczitzk" example="/europapress" path="/europapress/:category?" paramsDesc={['Category, see below, Home by default']}>
|
||||
|
||||
:::note Categories
|
||||
Categories
|
||||
|
||||
| España | Internacional | Economía | Deportes |
|
||||
| -------- | ------------- | -------- | -------- |
|
||||
|
|
@ -528,8 +526,6 @@ Category of news
|
|||
| ------ | --------------- |
|
||||
| murcia | ceuta-y-melilla |
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
||||
## ezone.hk {#ezone.hk}
|
||||
|
|
@ -754,7 +750,7 @@ Tag
|
|||
|
||||
<Route author="Rjnishant530" example="/grist/topic/extreme-heat" path="/grist/topic/:topic" paramsDesc={['Any Topic from Table below']} radar="1">
|
||||
|
||||
:::note Topics
|
||||
Topics
|
||||
|
||||
| Topic Name | Topic Link |
|
||||
|---------------------|---------------------|
|
||||
|
|
@ -800,8 +796,6 @@ Tag
|
|||
| Updates | updates |
|
||||
| Video | video |
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
||||
## Grub Street {#grub-street}
|
||||
|
|
@ -820,7 +814,7 @@ Tag
|
|||
| ------ | ------- | -------------- | ------- |
|
||||
| Latest | Popular | From the Store | For You |
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
Click here to view [All Topics](https://hbr.org/topics)
|
||||
|
||||
|
|
@ -1086,7 +1080,7 @@ Edition
|
|||
|
||||
## Matataki {#matataki}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
在 Matataki 发表的文章会上传到星际文件系统(IPFS),永久保存。即使站内文章因为各种原因消失,用 RSS 获取过带 IPFS 连接的 Feed Item 的话,还是可以从 RSS 阅读器找回文章的。
|
||||
IPFS 网关有可能失效,那时候换成其他网关。
|
||||
|
|
@ -1512,7 +1506,7 @@ Compared to the official one, this feed:
|
|||
|
||||
<Route author="Kasper4649 akashigakki" example="/nogizaka46/blog" path="/nogizaka46/blog/:id?" paramsDesc={['Member ID, see below, `all` by default']}>
|
||||
|
||||
:::note Member ID
|
||||
Member ID
|
||||
|
||||
| Member ID | Name |
|
||||
| --------- | --------------------- |
|
||||
|
|
@ -1557,8 +1551,6 @@ Compared to the official one, this feed:
|
|||
| 36749 | 伊藤 理々杏 |
|
||||
| 264 | 齋藤 飛鳥 |
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
||||
### Keyakizaka46 News 欅坂 46 新闻 {#sakamichi-series-ban-dao-xi-lie-guan-wang-zi-xun-keyakizaka46-news-ju-ban-46-xin-wen}
|
||||
|
|
@ -1577,7 +1569,7 @@ Compared to the official one, this feed:
|
|||
|
||||
<Route author="victor21813 nczitzk akashigakki" example="/sakurazaka46/blog" path="/sakurazaka46/blog/:id?/:page?" paramsDesc={['Member ID, see below, `all` by default', 'Page, `0` by default']}>
|
||||
|
||||
:::note Member ID
|
||||
Member ID
|
||||
|
||||
| Member ID | Name |
|
||||
| --------- | ------------ |
|
||||
|
|
@ -1616,8 +1608,6 @@ Compared to the official one, this feed:
|
|||
| 04 | 尾関 梨香 |
|
||||
| 03 | 上村 莉菜 |
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
||||
### Hinatazaka46 News 日向坂 46 新闻 {#sakamichi-series-ban-dao-xi-lie-guan-wang-zi-xun-hinatazaka46-news-ri-xiang-ban-46-xin-wen}
|
||||
|
|
@ -1628,7 +1618,7 @@ Compared to the official one, this feed:
|
|||
|
||||
<Route author="nwindz akashigakki" example="/hinatazaka46/blog" path="/hinatazaka46/blog/:id?/:page?" paramsDesc={['Member ID, see below, `all` by default', 'Page, `0` by default']}>
|
||||
|
||||
:::note Member ID
|
||||
Member ID
|
||||
|
||||
| Member ID | Name |
|
||||
| --------- | ------------ |
|
||||
|
|
@ -1668,8 +1658,6 @@ Compared to the official one, this feed:
|
|||
|
||||
> Note: The personal blogs of the fourth-generation members have not been opened yet. The unified blog number is `2000`.
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
||||
## Samsung {#samsung}
|
||||
|
|
@ -1995,7 +1983,7 @@ Supported sub-sites:
|
|||
|
||||
<Route author="nczitzk" example="/web3caff" path="/web3caff/:path?" paramsDesc={['路径,默认为首页']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `https://web3caff.com/` 后的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -2031,7 +2019,7 @@ Supported sub-sites:
|
|||
|
||||
<Route author="nczitzk" example="/zyw/hot" path="/zyw/hot/:site?" paramsDesc={['站点,见下表,默认为空,即全部']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
全部站点请见 [此处](https://hot.zyw.asia/#/list)
|
||||
|
||||
|
|
@ -2059,7 +2047,7 @@ Supported sub-sites:
|
|||
|
||||
<Route author="Rongronggg9" example="/ally/rail/hyzix/chengguijiaotong/" path="/ally/rail/:category?/:topic?" paramsDesc={['分类,可在 URL 中找到;略去则抓取首页', '话题,可在 URL 中找到;并非所有页面均有此字段']} radar="1" rssbud="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
默认抓取前 20 条,可通过 `?limit=` 改变。
|
||||
|
||||
|
|
@ -2182,7 +2170,7 @@ Supported sub-sites:
|
|||
|
||||
<Route author="nczitzk" example="/bast/col/col31266" path="/bast/:path+" paramsDesc={['路径,默认为通知公告']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `https://www.bast.net.cn/` 后的字段。下面是两个例子。
|
||||
|
||||
|
|
@ -2502,7 +2490,7 @@ area 分区选项
|
|||
|
||||
查看湖北省武汉市武昌区的新冠疫苗接种点,路由为 `/dxy/vaccine/湖北/武汉/武昌区`。
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若参数为空,则返回全国所有新冠疫苗接种点。
|
||||
|
||||
|
|
@ -2575,7 +2563,7 @@ area 分区选项
|
|||
|
||||
## 懂球帝 {#dong-qiu-di}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
- 可以通过头条新闻 + 参数过滤的形式获得早报、专题等内容。
|
||||
|
||||
|
|
@ -2605,7 +2593,7 @@ area 分区选项
|
|||
|
||||
<Route author="HenryQW" example="/dongqiudi/daily" path="/dongqiudi/daily"/>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
部分球队和球员可能会有两个 id, 正确 id 应该由 `5000` 开头.
|
||||
|
||||
|
|
@ -2627,7 +2615,7 @@ area 分区选项
|
|||
|
||||
通过提取文章全文,以提供比官方源更佳的阅读体验。
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
付费内容全文可能需要登陆获取,详情见部署页面的配置模块。
|
||||
|
||||
|
|
@ -2659,7 +2647,7 @@ Type 栏目:
|
|||
|
||||
<Route author="AgFlore" example="/theinitium/follow/articles/zh-hans" path="/theinitium/follow/articles/:language?" paramsDesc={['语言,简体`zh-hans`,繁体`zh-hant`,缺省为简体']}>
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
需要自建,详情见部署页面的配置模块。
|
||||
|
||||
|
|
@ -2717,7 +2705,7 @@ Type 栏目:
|
|||
| -------- | ------------- | -------- | ----------- |
|
||||
| articles | localarticles | history | all-comment |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
支持形如 <https://www.storm.mg/category/118> 的路由,即 [`/storm/category/118`](https://rsshub.app/storm/category/118)
|
||||
|
||||
|
|
@ -2733,7 +2721,7 @@ Type 栏目:
|
|||
|
||||
<Route author="nczitzk" example="/ifeng/news" path="/ifeng/news/:path?" paramsDesc={['路径,对应分类资讯页 URL 路径,默认为空']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `https://news.ifeng.com/` 后的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -2815,7 +2803,7 @@ home = 评论 & 研究 + 要闻 + 风闻
|
|||
|
||||
others = 热点新闻 + 滚动新闻
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
观察者网首页左中右的三个 column 分别对应 **评论 & 研究**、**要闻**、**风闻** 三个部分。
|
||||
|
||||
|
|
@ -2841,7 +2829,7 @@ others = 热点新闻 + 滚动新闻
|
|||
| -------- | -------- | ----------- | -------- | -------- | ---------- | -------- |
|
||||
| 1 | 2 | 3 | 6 | 7 | 8 | 5 |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
仅在话题 id 为 0,即选择 全部 时,**3 个月最热**、**24 小时最热**、**3 天最热**、**7 天最热** 和 **专栏文章** 参数生效。
|
||||
|
||||
|
|
@ -3009,7 +2997,7 @@ others = 热点新闻 + 滚动新闻
|
|||
|
||||
<Route author="nczitzk" example="/cbaigui" path="/cbaigui/:path+" paramsDesc={['路径,默认为首页']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若订阅 [标签:妖](https://www.cbaigui.com/post-tag/妖),网址为 [https://www.cbaigui.com/post-tag/ 妖](https://www.cbaigui.com/post-tag/妖)。截取 `https://www.cbaigui.com` 到末尾的部分 `/post-tag/妖` 作为参数,此时路由为 [`/cbaigui/post-tag/妖`](https://rsshub.app/cbaigui/post-tag/妖)。
|
||||
|
||||
|
|
@ -3133,7 +3121,7 @@ column 为 third 时可选的 category:
|
|||
| ---- | ------------- | ------------- | ------------- | ------------- | ------------- |
|
||||
| all | category_lsgg | category_dqgg | category_zjjg | category_cxpl | category_scpl |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
需要筛选多个 category 时,应使用 `;` 将多个字段连接起来。
|
||||
|
||||
|
|
@ -3215,7 +3203,7 @@ column 为 third 时可选的 category:
|
|||
|
||||
<Route author="nczitzk" example="/mydrivers" path="/mydrivers/:type?/:id?" paramsDesc={['类型,见下表,默认为最新', '编号,可在对应页面地址栏中找到']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
使用 **类型** 表中的两个参数时,编号应留空,如:**最新** 为 [`/mydrivers/new`](https://rsshub.app/mydrivers/new)
|
||||
|
||||
|
|
@ -3430,7 +3418,7 @@ column 为 third 时可选的 category:
|
|||
| -------- | -------- |
|
||||
| enter4 | life3 |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
酷 18 文档参见 [此处](https://docs.rsshub.app/picture#ku-18)
|
||||
|
||||
|
|
@ -3457,7 +3445,7 @@ column 为 third 时可选的 category:
|
|||
| newspark | local |
|
||||
| -------- | ----- |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若订阅 [时政](https://www.6parknews.com/newspark/index.php?type=1),其网址为 <https://www.6parknews.com/newspark/index.php?type=1>,其中 `newspark` 为分站,`1` 为栏目 id。
|
||||
|
||||
|
|
@ -3513,7 +3501,7 @@ column 为 third 时可选的 category:
|
|||
| ------------ | ----------- | ---------- | -------- | -------- | -------- |
|
||||
| breakingnews | weeklytopic | culture | press | case | special |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
除了直接订阅分类全部文章(如 [每週專題](https://aamacau.com/topics/weeklytopic) 的对应路由为 [/aamacau/weeklytopic](https://rsshub.app/aamacau/weeklytopic)),你也可以订阅特定的专题,如 [【9-12】2021 澳門立法會選舉](https://aamacau.com/topics/【9-12】2021澳門立法會選舉) 的对应路由为 [/【9-12】2021 澳門立法會選舉](https://rsshub.app/aamacau/【9-12】2021澳門立法會選舉)。
|
||||
|
||||
|
|
@ -3601,7 +3589,7 @@ column 为 third 时可选的 category:
|
|||
|
||||
<Route author="nczitzk" example="/medsci" path="/medsci/:sid?/:tid?" paramsDesc={['科室,见下表,默认为推荐', '亚专业,可在对应科室页 URL 中找到,默认为该科室的全部']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
下表为科室对应的 sid,若想获得 tid,可以到对应科室页面 URL 中寻找 `t_id` 字段的值,下面是一个例子:
|
||||
|
||||
|
|
@ -3787,8 +3775,10 @@ column 为 third 时可选的 category:
|
|||
|
||||
- `fulltext`,全文输出,例如:`/pingwest/tag/ChinaJoy/1/fulltext`
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
该路由一次最多显示 30 条文章
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
|
@ -4372,7 +4362,7 @@ column 为 third 时可选的 category:
|
|||
|
||||
## 网易新闻 {#wang-yi-xin-wen}
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
若视频因防盗链而无法播放,请参考 [通用参数 -> 多媒体处理](/parameter#多媒体处理) 配置 `multimedia_hotlink_template` **或** `wrap_multimedia_in_iframe`。
|
||||
|
||||
|
|
@ -4382,7 +4372,7 @@ column 为 third 时可选的 category:
|
|||
|
||||
<Route author="nczitzk" example="/163/today" path="/163/today/:need_content?" paramsDesc={['需要获取全文,填写 true/yes 表示需要,默认需要']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
参数 **需要获取全文** 设置为 `true` `yes` `t` `y` 等值后,RSS 会携带该新闻条目的对应全文。
|
||||
|
||||
|
|
@ -4394,7 +4384,7 @@ column 为 third 时可选的 category:
|
|||
|
||||
<Route author="nczitzk" example="/163/news/rank/whole/click/day" path="/163/news/rank/:category?/:type?/:time?" paramsDesc={['新闻分类,参见下表,默认为“全站”','排行榜类型,“点击榜”对应`click`,“跟贴榜”对应`follow`,默认为“点击榜”','统计时间,“1小时”对应`hour`,“24小时”对应`day`,“本周”对应`week`,“本月”对应`month`,默认为“24小时”']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
全站新闻 **点击榜** 的统计时间仅包含 “24 小时”、“本周”、“本月”,不包含 “1 小时”。即可用的`time`参数为`day`、`week`、`month`。
|
||||
|
||||
|
|
@ -4446,7 +4436,7 @@ column 为 third 时可选的 category:
|
|||
|
||||
## 微信 {#wei-xin}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
公众号直接抓取困难,故目前提供几种间接抓取方案,请自行选择
|
||||
|
||||
|
|
@ -4470,13 +4460,13 @@ column 为 third 时可选的 category:
|
|||
| `1` | 公众号全名 | 未启用 efb-patch-middleware |
|
||||
| `2` | #公众号全名 | 已启用 efb-patch-middleware |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
启用搜索有助于在订阅了过多公众号的频道里有效筛选,不易因为大量公众号同时推送导致一些公众号消息被遗漏,但必须正确选择搜索查询类型,否则会搜索失败。
|
||||
|
||||
:::
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
该方法需要通过 efb 进行频道绑定,具体操作见<https://github.com/DIYgod/RSSHub/issues/2172>
|
||||
|
||||
|
|
@ -4526,7 +4516,7 @@ column 为 third 时可选的 category:
|
|||
|
||||
<Route author="Rongronggg9" example="/wechat/data258/gh_cbbad4c1d33c" path="/data258/:id?" paramsDesc={['公众号 id 或分类 id,可在公众号页或分类页 URL 中找到;若略去,则抓取首页']} anticrawler="1" radar="1" rssbud="1" selfhost="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
由于使用了一些针对反爬的缓解措施,本路由响应较慢。默认只抓取前 5 条,可通过 `?limit=` 改变(不推荐,容易被反爬)。\
|
||||
该网站使用 IP 甄别访客,且应用严格的每日阅读量限额(约 15 次),请自建并确保正确配置缓存;如使用内存缓存而非 Redis 缓存,请增大缓存容量。该限额足够订阅至少 3 个公众号 (假设公众号每日仅更新一次);首页 / 分类页更新相当频繁,不推荐订阅。
|
||||
|
|
@ -4639,7 +4629,7 @@ column 为 third 时可选的 category:
|
|||
|
||||
<Route author="nczitzk" example="/proletar" path="/proletar/tags/:id?" paramsDesc={['标签,默认为全部文章']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
标签名参见 [所有标签](https://review.proletar.ink/tags)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 🔍 Uncategorized
|
||||
|
||||
## 4399 论坛 {#4399-lun-tan}
|
||||
|
|
@ -8,7 +6,7 @@ import Route from '@site/src/components/Route';
|
|||
|
||||
<Route author="DIYgod" example="/forum4399/mtag-83932" path="/forum4399/:mtag" paramsDesc={['mtag,必选-论坛网址最后的mtag字段']} selfhost="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
需要用户 cookie 值,详情见部署页面的配置模块。
|
||||
|
||||
|
|
@ -22,7 +20,7 @@ import Route from '@site/src/components/Route';
|
|||
|
||||
<Route author="Yukaii" example="/591/tw/rent/order=posttime&orderType=desc" path="/591/:country/rent/:query?" paramsDesc={['Country code. Only tw is supported now', 'Query Parameters']}>
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
Copy the URL of the 591 filter housing page and remove the front part "<https://rent.591.com.tw/>?", you will get the query parameters.
|
||||
|
||||
|
|
@ -478,7 +476,7 @@ For example:
|
|||
|
||||
## Notion {#notion}
|
||||
|
||||
:::caution Warning
|
||||
:::caution
|
||||
|
||||
Need to set up Notion integration, please refer to [Route-specific Configurations](https://docs.rsshub.app/install/#Deployment) for details.
|
||||
|
||||
|
|
@ -619,7 +617,7 @@ Specify options (in the format of query string) in parameter `routeParams` param
|
|||
| `itemLink` | The JSON Path as `link` in `item` | `string` | None |
|
||||
| `itemDesc` | The JSON Path as `description` in `item` | `string` | None |
|
||||
|
||||
:::tip Note
|
||||
:::tip
|
||||
|
||||
JSON Path only supports format like `a.b.c`. if you need to access arrays, like `a[0].b`, you can write it as `a.0.b`.
|
||||
|
||||
|
|
@ -681,8 +679,10 @@ Board and Build can be found in [here](http://api.ineal.me/tss/status)
|
|||
|
||||
<Route author="LogicJake" example="/wegene/column/all/all" path="/wegene/column/:type/:category" paramsDesc={['栏目类型,all(全部项目) 或 weapp(专业版)','栏目分类']} radar="1" rssbud="1">
|
||||
|
||||
:::
|
||||
:::tip
|
||||
|
||||
type 为 all 时,category 参数不支持 cost 和 free
|
||||
|
||||
:::
|
||||
|
||||
| 全部 | 祖源分析 | 付费 | 遗传性疾病 | 药物指南 | 免费 | 运动基因 | 营养代谢 | 心理特质 | 健康风险 | 皮肤特性 | 遗传特征 |
|
||||
|
|
@ -817,7 +817,7 @@ Refer to [the list of supported currencies](https://wise.com/tools/exchange-rate
|
|||
|
||||
### 习惯打卡 {#di-da-qing-dan-xi-guan-da-ka}
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
需要账号密码,详情见部署文档部分 RSS 模块配置
|
||||
|
||||
|
|
@ -929,7 +929,7 @@ Refer to [the list of supported currencies](https://wise.com/tools/exchange-rate
|
|||
|
||||
快递公司代号如果不能确定,可通过下方快递列表获得。
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
1. 构造链接前请确认所有参数正确:错误`快递公司 - 订单号`组合将会缓存信息一小段时间防止产生无用查询
|
||||
2. 正常查询的订单在未签收状态下不会被缓存:请控制查询频率
|
||||
|
|
@ -1035,7 +1035,7 @@ Refer to [the list of supported currencies](https://wise.com/tools/exchange-rate
|
|||
|
||||
<Route author="TonyRL" example="/qiyoujiage/shanghai" path="/qiyoujiage/:path+" paramsDesc={['路径']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `http://www.qiyoujiage.com/` 和 `.shtml` 之间的字段。下面是一个例子。
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 🖼️ Picture
|
||||
|
||||
## 1X {#1x}
|
||||
|
|
@ -373,7 +371,7 @@ For example:
|
|||
|
||||
<Route author="nczitzk" example="/nasa/apod-cn" path="/nasa/apod-cn">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
[NASA 中文](https://www.nasachina.cn/) 提供了每日天文图的中英双语图文说明,但在更新上偶尔略有一两天的延迟。
|
||||
|
||||
|
|
@ -429,7 +427,7 @@ For example:
|
|||
|
||||
## wallhaven {#wallhaven}
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
When parameter **Need Details** is set to `true` `yes` `t` `y`, RSS will add the title, uploader, upload time, and category information of each image, which can support the filtering function of RSS reader.
|
||||
|
||||
|
|
@ -453,7 +451,7 @@ For example [Latest Wallpapers](https://wallhaven.cc/latest), the route turning
|
|||
|
||||
<Route author="nczitzk Fatpandac" example="/wallhaven/search/categories=110&purity=110&sorting=date_added&order=desc" path="/wallhaven/search/:filter?/:needDetails?" paramsDesc={['Filter, empty by default', 'Need Details, `true`/`yes` as yes, no by default']}>
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
Subscribe pages starting with `https://wallhaven.cc/search`, fill the text after `?` as `filter` in the route. The following is an example:
|
||||
|
||||
|
|
@ -558,7 +556,7 @@ For example:
|
|||
| -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
|
||||
| bbs | bbs7 | bbs2 | bbs6 | bbs4 | bj | bbs5 | bbs3 |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
留园网文档参见 [此处](https://docs.rsshub.app/routes/new-media#liu-yuan-wang)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 🔄 Application Updates
|
||||
|
||||
|
|
@ -381,8 +380,10 @@ Language
|
|||
## Logseq {#logseq}
|
||||
|
||||
:::caution
|
||||
|
||||
Logseq 开发团队已经放弃了 [旧网站](https://logseq.com/blog)。
|
||||
请使用 <https://github.com/logseq/logseq/releases.atom> 代替。
|
||||
|
||||
:::
|
||||
|
||||
## MacKed {#macked}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 💻 Programming
|
||||
|
||||
## A List Apart {#a-list-apart}
|
||||
|
|
@ -14,8 +12,6 @@ import Route from '@site/src/components/Route';
|
|||
|
||||
You have the option to utilize the main heading or use individual categories as topics for the path.
|
||||
|
||||
:::note Topics
|
||||
|
||||
| **Code** | _code_ |
|
||||
|-------------------------|-------------------------|
|
||||
| **Application Development** | _application-development_ |
|
||||
|
|
@ -62,8 +58,6 @@ You have the option to utilize the main heading or use individual categories as
|
|||
| **Usability** | _usability_ |
|
||||
| **User Research** | _user-research_ |
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
||||
## ACM {#acm}
|
||||
|
|
@ -822,8 +816,6 @@ Subscribe to the updates (threads and submission) from a paritcular Hacker News
|
|||
|
||||
<Route author="Rjnishant530" example="/smashingmagazine/react" path="/smashingmagazine/:category?" paramsDesc={['Find in URL or Table below']} radar="1">
|
||||
|
||||
:::note Category
|
||||
|
||||
| **Category** | |
|
||||
|----------------------|-----------------------|
|
||||
| Accessibility | accessibility |
|
||||
|
|
@ -860,8 +852,6 @@ Subscribe to the updates (threads and submission) from a paritcular Hacker News
|
|||
| Web Design | web-design |
|
||||
| Workflow | workflow |
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
||||
## TesterHome {#testerhome}
|
||||
|
|
@ -946,7 +936,7 @@ Stay up to date on the latest React news, tutorials, resources, and more. Delive
|
|||
|
||||
## 安全客 {#an-quan-ke}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
官方提供了混合的主页资讯 RSS: <https://api.anquanke.com/data/v1/rss>
|
||||
|
||||
|
|
@ -1197,7 +1187,7 @@ Stay up to date on the latest React news, tutorials, resources, and more. Delive
|
|||
|
||||
## 拉勾网 {#la-gou-wang}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
拉勾网官方提供职位的[邮件订阅](https://www.lagou.com/s/subscribe.html),请根据自身需要选择使用。
|
||||
|
||||
|
|
@ -1422,7 +1412,7 @@ Stay up to date on the latest React news, tutorials, resources, and more. Delive
|
|||
|
||||
## 腾讯游戏开发者社区 {#teng-xun-you-xi-kai-fa-zhe-she-qu}
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
有部分输出全文带有未进行样式处理的代码内容,显示效果不佳,建议跳转原文阅读
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 📚 Reading
|
||||
|
||||
## All Poetry {#all-poetry}
|
||||
|
|
@ -178,7 +176,7 @@ Eg:<https://ncode.syosetu.com/n1976ey/>
|
|||
|
||||
<Route author="nczitzk" example="/aisixiang/zhuanti/211" path="/aisixiang/zhuanti/:id" paramsDesc={['专题 ID, 可在对应专题 URL 中找到']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
更多专题请见 [关键词](http://www.aisixiang.com/zhuanti/)
|
||||
|
||||
|
|
@ -213,7 +211,7 @@ Eg:<https://ncode.syosetu.com/n1976ey/>
|
|||
|
||||
## 笔趣阁 {#bi-qu-ge}
|
||||
|
||||
:::tip 看我
|
||||
:::tip
|
||||
|
||||
此处的 **笔趣阁** 指网络上使用和 **笔趣阁** 样式相似模板的小说阅读网站,包括但不限于下方列举的网址。
|
||||
|
||||
|
|
@ -241,7 +239,7 @@ Eg:<https://ncode.syosetu.com/n1976ey/>
|
|||
|
||||
<Route author="nczitzk" example="/biquge/http://www.biqu5200.net/0_7/" path="/biquge/:url" paramsDesc={['小说 Url,即对应小说详情页的 Url,可在地址栏中找到']} anticrawler="1" radar="1" rssbud="1">
|
||||
|
||||
:::tip 看我
|
||||
:::tip
|
||||
|
||||
#### 使用方法
|
||||
|
||||
|
|
@ -259,7 +257,7 @@ Eg:<https://ncode.syosetu.com/n1976ey/>
|
|||
|
||||
:::
|
||||
|
||||
:::caution 提示
|
||||
:::caution
|
||||
|
||||
上方列举的网址可能部分不可用,这取决于该网站的维护者是否持续运营网站。请选择可以正常访问的网址,获取更新的前提是该网站可以正常访问。
|
||||
|
||||
|
|
@ -279,7 +277,7 @@ Eg:<https://ncode.syosetu.com/n1976ey/>
|
|||
|
||||
<Route author="nczitzk" example="/chaoxing/qk/6b5c39b3dd84352be512e29df0297437" path="/chaoxing/qk/:id/:needContent?" paramsDesc={['期刊 id,可在期刊页 URL 中找到', '需要获取文章全文,填写 true/yes 表示需要,默认需要']} anticrawler="1" radar="1" rssbud="1">
|
||||
|
||||
:::tip 看我
|
||||
:::tip
|
||||
|
||||
全部期刊可以在 [这里](http://qk.chaoxing.com/space/index) 找到,你也可以从 [学科分类](https://qikan.chaoxing.com/jourclassify) 和 [期刊导航](https://qikan.chaoxing.com/search/openmag) 中发现更多期刊。
|
||||
|
||||
|
|
@ -287,7 +285,7 @@ Eg:<https://ncode.syosetu.com/n1976ey/>
|
|||
|
||||
:::
|
||||
|
||||
:::caution 提示
|
||||
:::caution
|
||||
|
||||
你可以设置参数 **需要获取文章全文** 为 `true` `yes` `t` `y` 等值(或者忽略这个参数),RSS 的条目会携带期刊中的 **文章全文**,而不仅仅是 **文章概要**。但因为发起访问请求过多会被该网站屏蔽,你可以将其关闭(设置该参数为 `false` `no` `f` `n` 等值),这将会大大减少请求次数从而更难触发网站的反爬机制。
|
||||
|
||||
|
|
@ -305,9 +303,10 @@ Eg:<https://ncode.syosetu.com/n1976ey/>
|
|||
|
||||
<Route author="LogicJake" example="/chuiniu/column/0b1c4cf6e7f24e8da11e37882de73704" path="/chuiniu/column/:id" paramsDesc={['栏目 id, 可在对应栏目页 URL 中找到']}>
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
正文内容需要用户登录后的 x-member 值,详情见部署页面的配置模块。若无相关配置或 x-member 失效,则只显示文章摘要。
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
|
@ -340,7 +339,7 @@ Eg:<https://ncode.syosetu.com/n1976ey/>
|
|||
|
||||
<Route author="JeasonLau" example="/dcrsw/zhongjidouluo/2" path="/dcrsw/:name/:count?" paramsDesc={['小说名,可在对应小说页URL中找到', '显示的章节数,缺省为`3`']}>
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
count 的取值范围为 1-12,为防止请求次数过多,推荐设置为 5 以下。
|
||||
:::
|
||||
|
|
@ -464,7 +463,7 @@ count 的取值范围为 1-12,为防止请求次数过多,推荐设置为 5
|
|||
|
||||
<Route author="nczitzk" example="/qidiantu" path="/qidiantu/:category?/:type?/:is_history?" paramsDesc={['分类', '类型', '是否查看历史榜单,填写 true/yes 表示是,默认否']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
参数 **是否查看历史榜单** 设置为 `true` `yes` `t` `y` 等值后,RSS 会返回历史榜单。
|
||||
|
||||
|
|
@ -500,7 +499,7 @@ count 的取值范围为 1-12,为防止请求次数过多,推荐设置为 5
|
|||
|
||||
<Route author="Fatpandac" example="/wenku8/lastupdate" path="/wenku8/:categoty?" paramsDesc={['首页分类,见下表,默认为今日更新']} selfhost="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
首页需要登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 🛍️ Shopping
|
||||
|
||||
## 0818 团 {#0818-tuan}
|
||||
|
|
@ -38,7 +36,7 @@ Time
|
|||
| ------------------- | --------------- | ------------ |
|
||||
| 24h | week | alltime |
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
Parameter `time` only works when `mostwanted` is chosen as the category.
|
||||
|
||||
|
|
@ -362,7 +360,7 @@ For instance, in <https://www.zagg.com/en_us/new-arrivals?brand=164&cat=3038%2C3
|
|||
|
||||
<Route author="nczitzk" example="/jd/price/526835" path="/jd/price/:id" paramsDesc={['商品 id,可在商品详情页 URL 中找到']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
如商品 <https://item.jd.com/526835.html> 中的 id 为 `526835`,所以路由为 [`/jd/price/526835`](https://rsshub.app/jd/price/526835)
|
||||
|
||||
|
|
@ -449,7 +447,7 @@ For instance, in <https://www.zagg.com/en_us/new-arrivals?brand=164&cat=3038%2C3
|
|||
|
||||
## 什么值得买 {#shen-me-zhi-de-mai}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
网站也提供了部分 RSS: <https://www.smzdm.com/dingyue>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 💬 Social Media
|
||||
|
||||
## 755 {#755}
|
||||
|
|
@ -70,7 +68,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
|
|||
|
||||
<Route author="Qixingchen" example="/bilibili/user/followers/2267573/3" path="/bilibili/user/followers/:uid/:loginUid" paramsDesc={['用户 id, 可在 UP 主主页中找到','用于登入的用户id,需要配置对应的 Cookie 值']} radar="1" rssbud="1" selfhost="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
UP 主粉丝现在需要 b 站登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
|
||||
|
||||
|
|
@ -82,7 +80,7 @@ UP 主粉丝现在需要 b 站登录后的 Cookie 值,所以只能自建,详
|
|||
|
||||
<Route author="Qixingchen" example="/bilibili/user/followings/2267573/3" path="/bilibili/user/followings/:uid/:loginUid" paramsDesc={['用户 id, 可在 UP 主主页中找到','用于登入的用户id,需要配置对应的 Cookie 值']} radar="1" rssbud="1" selfhost="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
UP 主关注用户现在需要 b 站登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
|
||||
|
||||
|
|
@ -250,7 +248,7 @@ UP 主关注用户现在需要 b 站登录后的 Cookie 值,所以只能自建
|
|||
|
||||
<Route author="TigerCubDen" example="/bilibili/followings/dynamic/109937383" path="/bilibili/followings/dynamic/:uid/:showEmoji?/:disableEmbed?" paramsDesc={['用户 id', '显示或隐藏表情图片,默认值为 0 隐藏,其他值为显示', '默认为开启内嵌视频, 任意值为关闭']} selfhost="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
用户动态需要 b 站登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
|
||||
|
||||
|
|
@ -262,7 +260,7 @@ UP 主关注用户现在需要 b 站登录后的 Cookie 值,所以只能自建
|
|||
|
||||
<Route author="LogicJake" example="/bilibili/followings/video/2267573" path="/bilibili/followings/video/:uid/:disableEmbed?" paramsDesc={['用户 id', '默认为开启内嵌视频, 任意值为关闭']} selfhost="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
用户动态需要 b 站登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
|
||||
|
||||
|
|
@ -274,7 +272,7 @@ UP 主关注用户现在需要 b 站登录后的 Cookie 值,所以只能自建
|
|||
|
||||
<Route author="woshiluo" example="/bilibili/followings/article/99800931" path="/bilibili/followings/article/:uid" paramsDesc={['用户 id']} selfhost="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
用户动态需要 b 站登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
|
||||
|
||||
|
|
@ -354,7 +352,7 @@ UP 主关注用户现在需要 b 站登录后的 Cookie 值,所以只能自建
|
|||
|
||||
<Route author="yindaheng98" example="/bilibili/manga/followings/26009" path="/bilibili/manga/followings/:uid/:limits?" paramsDesc={['用户 id', '抓取最近更新前多少本漫画,默认为10']} selfhost="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
用户追漫需要 b 站登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
|
||||
|
||||
|
|
@ -556,8 +554,10 @@ If you don't want to setup credentials, you can use [Picnob](#picnob) or [Picuki
|
|||
| ------------- | ------- |
|
||||
| user | tags |
|
||||
|
||||
:::tip Tips
|
||||
:::tip
|
||||
|
||||
It's highly recommended to deploy with Redis cache enabled.
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
|
@ -788,7 +788,7 @@ Only for self-hosted
|
|||
|
||||
<Route author="BugWriter2" example="/soul/posts/hot/NXJiSlM5V21kamJWVlgvZUh1NEExdz09" path="/soul/posts/hot/:pid*" paramsDesc={['瞬间 id, 分享用户瞬间时的 URL 的 postIdEcpt 参数']}/>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
提供不同内容的 `pid`, 可以得到不同的热门瞬间推荐,如果想看多个种类的热门可以用 `/` 把不同的 `pid` 连起来,例如: `NXJiSlM5V21kamJWVlgvZUh1NEExdz09/MkM0amxSTUNiTEpLcHhzSlRzTEI1dz09`
|
||||
|
||||
|
|
@ -983,6 +983,7 @@ This route requires Twitter token's corresponding id, therefore it's only availa
|
|||
### User Profile {#vimeo-user-profile}
|
||||
|
||||
<Route author="MisteryMonster" example="/vimeo/user/filmsupply/picks" path="/vimeo/user/:username/:cat?" paramsDesc={['In this example [https://vimeo.com/filmsupply](https://vimeo.com/filmsupply) is `filmsupply`', 'deafult for all latest videos, others categories in this example such as `Docmentary`, `Narrative`, `Drama`. Set `picks` for promote orders, just orderd like web page. When `picks` added, published date won\'t show up']}>
|
||||
|
||||
:::tip Special category name attention
|
||||
|
||||
Some of the categories contain slash like `3D/CG` , must change the slash `/` to the vertical bar`|`.
|
||||
|
|
@ -1047,13 +1048,15 @@ YouTube provides official RSS feeds for channels, for instance <https://www.yout
|
|||
|
||||
<Route author="TonyRL" path="/youtube/charts/:category?/:country?/:embed?" example="/youtube/charts" paramsDesc={['Chart, see table below, default to `TopVideos`', 'Country Code, see table below, default to global', 'Default to embed the video, set to any value to disable embedding']} radar="1" rssbud="1">
|
||||
|
||||
:::note Chart
|
||||
Chart
|
||||
|
||||
| Top artists | Top songs | Top music videos | Trending |
|
||||
| ----------- | --------- | ---------------- | -------- |
|
||||
| TopArtists | TopSongs | TopVideos | TrendingVideos |
|
||||
:::
|
||||
|
||||
:::note Country Code
|
||||
|
||||
Country Code
|
||||
|
||||
| Argentina | Australia | Austria | Belgium | Bolivia | Brazil | Canada |
|
||||
| --------- | --------- | ------- | ------- | ------- | ------ | ------ |
|
||||
| ar | au | at | be | bo | br | ca |
|
||||
|
|
@ -1090,7 +1093,7 @@ YouTube provides official RSS feeds for channels, for instance <https://www.yout
|
|||
| ------- | -------- |
|
||||
| uy | zw |
|
||||
|
||||
:::
|
||||
|
||||
|
||||
</Route>
|
||||
|
||||
|
|
@ -1140,7 +1143,7 @@ YouTube provides official RSS feeds for channels, for instance <https://www.yout
|
|||
|
||||
## 抖音 {#dou-yin}
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
反爬严格,需要启用 puppeteer。\
|
||||
抖音的视频 CDN 会验证 Referer,意味着许多阅读器都无法直接播放内嵌视频,以下是一些变通解决方案:
|
||||
|
|
@ -1267,7 +1270,7 @@ YouTube provides official RSS feeds for channels, for instance <https://www.yout
|
|||
|
||||
<Route author="alfredcai" example="/douban/people/62759792/status" path="douban/people/:userid/status/:routeParams" paramsDesc={['整数型用户 id', '额外参数;见下']} radar="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
- **目前只支持整数型 id**
|
||||
- 字母型的 id,可以通过头像图片链接来找到其整数型 id,图片命名规则`ul[userid]-*.jpg`或`u[userid]-*.jpg`,即取文件名中间的数字
|
||||
|
|
@ -1388,8 +1391,10 @@ YouTube provides official RSS feeds for channels, for instance <https://www.yout
|
|||
|
||||
## 饭否 {#fan-fou}
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
部署时需要申请并配置饭否 Consumer Key、Consumer Secret、用户名和密码,具体见部署文档
|
||||
|
||||
:::
|
||||
|
||||
### 用户动态 {#fan-fou-yong-hu-dong-tai}
|
||||
|
|
@ -1481,7 +1486,9 @@ YouTube provides official RSS feeds for channels, for instance <https://www.yout
|
|||
<Route author="xizeyoupan" example="/coolapk/dyh/1524" path="/coolapk/dyh/:dyhId" paramsDesc={['看看号ID']}>
|
||||
|
||||
:::tip
|
||||
|
||||
仅限于采集**站内订阅**的看看号的内容。看看号 ID 可在看看号界面右上分享 - 复制链接得到。
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
|
@ -1507,7 +1514,9 @@ YouTube provides official RSS feeds for channels, for instance <https://www.yout
|
|||
| period | daily | weekly |
|
||||
|
||||
:::tip
|
||||
|
||||
今日热门没有周榜,酷图榜日榜的参数会变成周榜,周榜的参数会变成月榜。
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
|
@ -1592,7 +1601,7 @@ rule
|
|||
|
||||
## 微博 {#wei-bo}
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
微博会针对请求的来源地区返回不同的结果。\
|
||||
一个已知的例子为:部分视频因未知原因仅限中国大陆境内访问 (CDN 域名为 `locallimit.us.sinaimg.cn` 而非 `f.video.weibocdn.com`)。若一条微博含有这种视频且 RSSHub 实例部署在境外,抓取到的微博可能不含视频。将 RSSHub 部署在境内有助于抓取这种视频,但阅读器也必须处于境内网络环境以加载视频。
|
||||
|
|
@ -1663,7 +1672,7 @@ rule
|
|||
|
||||
<Route author="zytomorrow DIYgod Rongronggg9" example="/weibo/timeline/3306934123" path="/weibo/timeline/:uid/:feature?/:routeParams?" paramsDesc={['用户的uid', '过滤类型ID,0:全部、1:原创、2:图片、3:视频、4:音乐,默认为0。', '额外参数;请参阅上面的说明和表格']} anticrawler="1" selfhost="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
需要对应用户打开页面进行授权生成 token 才能生成内容
|
||||
|
||||
|
|
@ -1677,7 +1686,7 @@ rule
|
|||
|
||||
<Route author="monologconnor Rongronggg9" example="/weibo/group/4541216424989965/微博分组/:routeParams?" path="/weibo/group/:gid/:gname?/:routeParams?" paramsDesc={['分组id, 在网页版分组地址栏末尾`?gid=`处获取', '分组显示名称; 默认为: `微博分组`', '额外参数;请参阅上面的说明和表格']} anticrawler="1" selfhost="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
由于微博官方未提供自定义分组相关 api, 此方案必须使用用户`Cookie`进行抓取
|
||||
|
||||
|
|
@ -1701,7 +1710,7 @@ rule
|
|||
|
||||
<Route author="nczitzk" example="/wukong/user/5826687196" path="/wukong/user/:id/:type?" paramsDesc={['用户ID,可在用户页 URL 中找到', '类型,可选 `dongtai` 即 动态,`answers` 即 回答,`questions` 即 提问,默认为 `dongtai`']}>
|
||||
|
||||
:::tip 注意
|
||||
:::tip
|
||||
|
||||
用户的动态是一定时间范围内用户提出的问题和作出的回答,距离现在时间较久的问题和回答不会出现,此时选择 `dongtai` 用户动态是会缺失的。
|
||||
|
||||
|
|
@ -1717,8 +1726,10 @@ rule
|
|||
|
||||
<Route author="lotosbin" example="/xiaohongshu/user/593032945e87e77791e03696/notes" path="/xiaohongshu/user/:user_id/notes/:fulltext?" paramsDesc={['用户 ID', '若为`fulltext`将抓取笔记全文,若为空则只抓取笔记标题']} puppeteer="1" anticrawler="1" radar="1" rssbud="1"/>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
笔记全文不支持显示视频
|
||||
|
||||
:::
|
||||
|
||||
### 用户收藏 {#xiao-hong-shu-yong-hu-shou-cang}
|
||||
|
|
@ -1731,9 +1742,11 @@ rule
|
|||
|
||||
## 新榜 {#xin-bang}
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
部署时需要配置 NEWRANK_COOKIE,具体见部署文档
|
||||
请勿过高频抓取,新榜疑似对每天调用 token 总次数进行了限制,超限会报错
|
||||
|
||||
:::
|
||||
|
||||
### 微信公众号 {#xin-bang-wei-xin-gong-zhong-hao}
|
||||
|
|
@ -1744,8 +1757,10 @@ rule
|
|||
|
||||
<Route author="lessmoe" example="/newrank/douyin/110266463747" path="/newrank/douyin/:dyid" paramsDesc={['抖音ID,可在新榜账号详情 URL 中找到']} anticrawler="1" selfhost="1"/>
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
免费版账户抖音每天查询次数 20 次,如需增加次数可购买新榜会员或等待未来多账户支持
|
||||
|
||||
:::
|
||||
|
||||
## 知乎 {#zhi-hu}
|
||||
|
|
@ -1828,7 +1843,7 @@ rule
|
|||
|
||||
<Route author="SeanChao" example="/zhihu/timeline" path="/zhihu/timeline" anticrawler="1" selfhost="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
用户关注动态需要登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 📖 Study
|
||||
|
||||
## 51VOA 美国之音 {#51voa-mei-guo-zhi-yin}
|
||||
|
|
@ -383,7 +381,7 @@ paramsDesc={['一个整数,筛选最近的limit场比赛,默认为5']}>
|
|||
| ---- | ---- | ---- |
|
||||
| tz | dt | gs |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
分类字段处填写的是对应东莞教研网网址中中介于 **<https://www.dgjyw.com/>** 和 **.htm** 中间的一段。
|
||||
|
||||
|
|
@ -451,7 +449,7 @@ paramsDesc={['一个整数,筛选最近的limit场比赛,默认为5']}>
|
|||
|
||||
<Route author="nczitzk" example="/sdzk" path="/sdzk/:bcid?/:cid?" paramsDesc={['板块 id,可在对应板块页 URL 中找到,默认为 `1`,即信息与政策', '栏目 id,可在对应板块页 URL 中找到,默认为 `16`,即通知公告']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若订阅 [信息与政策](https://www.sdzk.cn/NewsList.aspx?BCID=1),网址为 <https://www.sdzk.cn/NewsList.aspx?BCID=1>。截取 `BCID=1` 作为参数,此时路由为 [`/sdzk/1`](https://rsshub.app/sdzk/1)。
|
||||
|
||||
|
|
@ -499,7 +497,7 @@ paramsDesc={['一个整数,筛选最近的limit场比赛,默认为5']}>
|
|||
|
||||
<Route author="nczitzk" example="/edrawsoft/mindmap/1/PV/DESC/CN/1" path="/edrawsoft/mindmap/:classId?/:order?/:sort?/:lang?/:price?/:search?" paramsDesc={['分类编号,见下表,默认为全部分类', '排序参数,`PV` 指 最多浏览,`TIME` 指 最新发布,`LIKE` 指 最多点赞,默认为 `PV` 即 最多浏览', '排序方式,`DESC` 指 降序,`ASC` 指 升序,默认为 `DESC` 即 降序', '模板语言,默认为 `CN`', '是否免费,`1` 指 全部,`2` 指 免费,`3` 指 付费,`4` 指 会员免费,默认为 `1` 即 全部', '搜索关键词,默认为空']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
不支持分类搜索和自定义搜索排序,即 `search` 参数不为空时,其他参数不起作用。
|
||||
|
||||
|
|
@ -631,7 +629,7 @@ paramsDesc={['一个整数,筛选最近的limit场比赛,默认为5']}>
|
|||
|
||||
<Route author="nczitzk" example="/yinxiang/card/32" path="/yinxiang/card/:id?" paramsDesc={['卡片 id,见下表,默认为每周收藏排行榜・TOP5']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
卡片对应的话题、专题等内容过期后,该卡片 id 也会失效,此时填入该卡片 id 将会报错。
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 📰 News
|
||||
|
||||
## 21 财经 {#21-cai-jing}
|
||||
|
|
@ -14,7 +12,7 @@ import Route from '@site/src/components/Route';
|
|||
|
||||
<Route author="nczitzk" example="/abc" path="/abc/:id?" paramsDesc={['id, can be found in the Channel or Topic page, can also be filled in the `documentId` in the source code of the page, see below, Just In by default']}>
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
All Topics in [Topic Library](https://abc.net.au/news/topics) are supported, you can fill in the field after `topic` in its URL, or fill in the `documentId`.
|
||||
|
||||
|
|
@ -72,7 +70,7 @@ Language
|
|||
| ------ | ------- | ------- |
|
||||
| arbric | chinese | english |
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
If you subscribe to [Al Jazeera English - Economy](https://www.aljazeera.com/economy), whose language is `english` and whose path is `economy`, you can get the route as [`/aljazeera/english/economy`](https://rsshub.app/aljazeera/english/economy)
|
||||
|
||||
|
|
@ -92,7 +90,7 @@ Language
|
|||
| ------ | ------- | ------- |
|
||||
| arbric | chinese | english |
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
If you subscribe to [Al Jazeera English - Science and Technology](https://www.aljazeera.com/tag/science-and-technology), whose language is `english` and whose path is `science-and-technology`, you can get the route as [`/aljazeera/english/tag/science-and-technology`](https://rsshub.app/aljazeera/english/tag/science-and-technology)
|
||||
|
||||
|
|
@ -110,7 +108,7 @@ Language
|
|||
| ------ | ------- | ------- |
|
||||
| arbric | chinese | english |
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
There is no RSS source for Al Jazeera Chinese, returning homepage content by default
|
||||
|
||||
|
|
@ -283,7 +281,9 @@ Topics:
|
|||
|dna-verified|
|
||||
|
||||
:::tip Topic
|
||||
|
||||
The URL of the form `https://www.dnaindia.com/topic/dna-verified` demonstrates the utilization of the subdomain `topic`
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
|
@ -294,7 +294,7 @@ The URL of the form `https://www.dnaindia.com/topic/dna-verified` demonstrates t
|
|||
|
||||
<Route author="HenryQW xyqfer" example="/ft/chinese/hotstoryby7day" path="/ft/:language/:channel?" paramsDesc={['语言,简体`chinese`,繁体`traditional`', '频道,缺省为每日更新']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
- 不支持付费文章。
|
||||
|
||||
|
|
@ -313,7 +313,7 @@ The URL of the form `https://www.dnaindia.com/topic/dna-verified` demonstrates t
|
|||
|
||||
<Route author="HenryQW" example="/ft/myft/rss-key" path="/ft/myft/:key" paramsDesc={['the last part of myFT personal RSS address']}>
|
||||
|
||||
:::tip tips
|
||||
:::tip
|
||||
|
||||
- Visit ft.com -> myFT -> Contact Preferences to enable personal RSS feed, see [help.ft.com](https://help.ft.com/faq/email-alerts-and-contact-preferences/what-is-myft-rss-feed/)
|
||||
- Obtain the key from the personal RSS address, it looks like `12345678-abcd-4036-82db-vdv20db024b8`
|
||||
|
|
@ -395,8 +395,10 @@ Provides a way to get an specific rss feed by date and category over the officia
|
|||
|
||||
<Route author="TonyRL" example="/mingpao/pns/s00017" path="/mingpao/pns/:category?" paramsDesc={['channel,default to brief']}/>
|
||||
|
||||
:::tip tips
|
||||
:::tip
|
||||
|
||||
Only `s00017` is in English.
|
||||
|
||||
:::
|
||||
|
||||
| category | Channel |
|
||||
|
|
@ -445,7 +447,7 @@ Only `s00017` is in English.
|
|||
|
||||
<Route author="nczitzk" example="/now/news" path="/now/news/:category?/:id?" paramsDesc={['分类,见下表,默认为首页', '编号,可在对应专题/节目页 URL 中找到 topicId']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
**编号** 仅对事件追蹤、評論節目、新聞專題三个分类起作用,例子如下:
|
||||
|
||||
|
|
@ -606,7 +608,7 @@ This route adds the missing photo and Link element. (Offical RSS doesn't have Li
|
|||
|
||||
<Route author="nczitzk" example="/sbs/chinese" path="/sbs/chinese/:category?/:id?/:dialect?/:language?" paramsDesc={['Category, `news` or `podcast`, `news` by default', 'Id, see below, can be found in URL, `news` by default', 'Dialect, `mandarin` or `cantonese`, `mandarin` by default', 'Language, `zh-hans` or `zh-hant`, `zh-hans` by default']}>
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
When subscribing to podcasts, fill `category` with **podcast**. For example, URL to [SBS 普通话电台](https://www.sbs.com.au/chinese/mandarin/zh-hans/podcast/sbs-mandarin) is <https://www.sbs.com.au/chinese/mandarin/zh-hans/podcast/sbs-mandarin>, with **sbs-mandarin** as `id`, **mandarin** as `dialect`, `language` as **zh-hans**, and the route is [`/sbs/chinese/podcast/sbs-mandarin/mandarin/zh-hans`](https://rsshub.app/sbs/chinese/podcast/sbs-mandarin/mandarin/zh-hans).
|
||||
|
||||
|
|
@ -644,7 +646,7 @@ SBS Cantonese Programs:
|
|||
| ------------------ | -------------- | -------------- | ----------- | ---------------- |
|
||||
| healthy-happy-life | gardening-tips | global-finance | culture-360 | technology-world |
|
||||
|
||||
:::tip Tip
|
||||
:::tip
|
||||
|
||||
Mostly, you can omit `language`, for the reason that **madarin** is with **zh-hans** and **cantonese** is with **zh-hant** by default. For example, the route of [SBS 普通话电台](https://www.sbs.com.au/chinese/mandarin/zh-hans/podcast/sbs-mandarin) is [`/sbs/chinese/podcast/sbs-mandarin/mandarin/zh-hans`](https://rsshub.app/sbs/chinese/podcast/sbs-mandarin/mandarin/zh-hans), which can also be [`/sbs/chinese/podcast/sbs-mandarin/mandarin`](https://rsshub.app/sbs/chinese/podcast/sbs-mandarin/mandarin).
|
||||
|
||||
|
|
@ -660,7 +662,7 @@ You still can customize `language`, however, it is important to note that not al
|
|||
|
||||
<Route author="sgqy" example="/solidot/linux" path="/solidot/:type?" paramsDesc={['消息类型。默认为 www. 在网站上方选择后复制子域名即可']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
Solidot 提供的 feed:
|
||||
|
||||
|
|
@ -873,7 +875,7 @@ Provides all of the articles by the specified New York Times author.
|
|||
|
||||
<Route author="nczitzk" example="/nikkei/cn" path="/nikkei/cn/:language?/:path?" paramsDesc={['语言,可选 `zh` 即 繁体中文,`cn` 即 简体中文', '类目路径,默认为空,可在对应类目页 URL 中找到']} radar="1" rssbud="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
如 [中国 经济 日经中文网](https://cn.nikkei.com/china/ceconomy.html) 的 URL 为 <https://cn.nikkei.com/china/ceconomy.html> 对应路由为 [`/nikkei/cn/cn/china/ceconomy`](https://rsshub.app/nikkei/cn/cn/china/ceconomy)
|
||||
|
||||
|
|
@ -1080,8 +1082,6 @@ Category 列表:
|
|||
|
||||
<Route author="yuxinliu-alex nczitzk" example="/cankaoxiaoxi/column/diyi" path="/cankaoxiaoxi/column/:id?" paramsDesc={['栏目 id,默认为 `diyi`,即第一关注']}>
|
||||
|
||||
:::note 栏目
|
||||
|
||||
| 栏目 | id |
|
||||
| -------------- | -------- |
|
||||
| 第一关注 | diyi |
|
||||
|
|
@ -1104,13 +1104,11 @@ Category 列表:
|
|||
| 军事 | junshi |
|
||||
| 参考人物 | cankaorw |
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
||||
## 朝日新聞中文網(繁體中文版) {#chao-ri-xin-wen-zhong-wen-wang-%EF%BC%88-fan-ti-zhong-wen-ban-%EF%BC%89}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
朝日新闻中文网已于 2021 年 3 月 31 日关闭。
|
||||
|
||||
|
|
@ -1120,7 +1118,7 @@ Category 列表:
|
|||
|
||||
<Route author="nczitzk" example="/asahi" path="/asahi/:genre?/:category?" paramsDesc={['类型,见下表,默认为トップ', '分类,见下表,默认为空,即该类型下所有新闻']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
以下小标题即类型 `genre`,标题下表格中为对应类型的分类 `category`,两者需要配合使用。
|
||||
|
||||
|
|
@ -1284,7 +1282,7 @@ IT・科学 tech_science
|
|||
|
||||
<Route author="nczitzk" example="/yicai/feed/669" path="/yicai/feed/:id?" paramsDesc={['主题 id,可在对应主题页中找到,默认为一财早报']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
全部主题词见 [此处](https://www.yicai.com/feed/alltheme)
|
||||
|
||||
|
|
@ -1462,7 +1460,7 @@ IT・科学 tech_science
|
|||
|
||||
<Route author="TimWu007" example="/gzdaily/app/74" path="/gzdaily/app/:column?" paramsDesc={['栏目 ID,点击对应栏目后在地址栏找到']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
在北京时间深夜可能无法获取内容。
|
||||
|
||||
|
|
@ -1676,7 +1674,7 @@ IT・科学 tech_science
|
|||
|
||||
<Route author="nczitzk" example="/eeo/yaowen/dashi" path="/eeo/:column?/:category?" paramsDesc={['栏目,见下表,默认为 商业产业', '分类,见下表,默认为该栏目下所有分类']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
以下小标题即栏目 `column`,标题下表格中为对应栏目的分类 `category`,两者需要配合使用。
|
||||
|
||||
|
|
@ -1808,7 +1806,7 @@ category 对应的关键词有
|
|||
|
||||
## 联合早报 {#lian-he-zao-bao}
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
由于 [RSSHub#10309](https://github.com/DIYgod/RSSHub/issues/10309) 中的问题,使用靠近香港的服务器部署将从 hk 版联合早报爬取内容,造成输出的新闻段落顺序错乱。如有订阅此源的需求,建议寻求部署在远离香港的服务器上的 RSSHub,或者在自建时选择远离香港的服务器。
|
||||
|
||||
|
|
@ -1908,8 +1906,10 @@ category 对应的关键词有
|
|||
|
||||
<Route author="TimWu007" example="/southcn/nfapp/column/38" path="/southcn/nfapp/column/:column?" paramsDesc={['栏目或南方号 ID']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若此处输入的是栏目 ID(而非南方号 ID),则该接口会返回与输入栏目相关联栏目的文章。例如,输入栏目 ID `38`(广州),则返回的结果还会包含 ID 为 `3547`(市长报道集)的文章。
|
||||
|
||||
:::
|
||||
|
||||
1. `pc.nfapp.southcn.com` 下的文章页面,可通过 url 查看,例:<http://pc.nfapp.southcn.com/13707/7491109.html> 的栏目 ID 为 `13707`。
|
||||
|
|
@ -1996,7 +1996,7 @@ category 对应的关键词有
|
|||
|
||||
<Route author="nczitzk" example="/nmtv/column/877" path="/nmtv/column/:id?" paramsDesc={['栏目 id,可在对应栏目 URL 中找到']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
如 [蒙古语卫视新闻联播](http://www.nmtv.cn/folder292/folder663/folder301/folder830/folder877) 的 URL 为 <http://www.nmtv.cn/folder292/folder663/folder301/folder830/folder877>,其栏目 id 为末尾数字编号,即 `877`。可以得到其对应路由为 [`/nmtv/column/877`](https://rsshub.app/nmtv/column/877)
|
||||
|
||||
|
|
@ -2212,7 +2212,7 @@ category 对应的关键词有
|
|||
2. 把 `http://opinion.people.com.cn/GB/` 与 `/index.html` 间 `427456/434878` 作为 `category` 参数填入;
|
||||
3. 最终可获得 [`/people/opinion/427456/434878`](https://rsshub.app/people/opinion/427456/434878)。
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
人民网大部分站点支持上述通用规则进行订阅。
|
||||
|
||||
|
|
@ -2276,7 +2276,7 @@ category 对应的关键词有
|
|||
|
||||
<Route author="nczitzk" example="/sctv/programme/1" path="/sctv/programme/:id?/:limit?/:isFull?" paramsDesc={['节目 id,可在对应节目页中找到,默认为 `1`,即四川新闻联播', '期数,默认为 15,即单次获取最新 15 期', '是否仅获取完整视频,填写 true/yes 表示是、false/no 表示否,默认是']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
参数 **是否仅获取完整视频** 设置为 `true` `yes` `t` `y` 等值后,路由仅返回当期节目的完整视频,而不会返回节目所提供的节选视频。
|
||||
|
||||
|
|
@ -2585,7 +2585,7 @@ category 对应的关键词有
|
|||
| 头条 | 国内 | 国际 | 言路 | 财经 | 地方 | 副刊 | 娱乐 | 体育 | 百格 | 星角攝 | 好运来 |
|
||||
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ------ | ------ |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若订阅单级分类 [头条](https://www.sinchew.com.my/category/头条),其 URL 为 [https://www.sinchew.com.my/category/ 头条](https://www.sinchew.com.my/category/头条),则路由为 [`/sinchew/category/头条`](https://rsshub.app/sinchew/category/头条)。
|
||||
|
||||
|
|
@ -2617,7 +2617,7 @@ category 对应的关键词有
|
|||
| -------- | ---------- | ------------ |
|
||||
| zdzy | jjbxs | dydhly |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
更多栏目请看 [这里](https://tv.cctv.com/lm)
|
||||
|
||||
|
|
@ -2629,7 +2629,7 @@ category 对应的关键词有
|
|||
|
||||
<Route author="nczitzk" example="/cctv/special/315" path="/cctv/special/:id?" paramsDesc={['专题 id,可在对应专题页 URL 中找到,默认为 `315` 即 3·15 晚会']} radar="1" rssbud="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
如 [2020 年国家网络安全宣传周](https://news.cctv.com/special/2020gjwlaqxcz/index.shtml) 的专题页 URL 为 <https://news.cctv.com/special/2020gjwlaqxcz/index.shtml。其专题> id 即为 `2020gjwlaqxcz`。
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 🛫 Travel
|
||||
|
||||
## 12306 {#12306}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 🎓 University
|
||||
|
||||
## Beijing Jiaotong University 北京交通大学 {#beijing-jiaotong-university-bei-jing-jiao-tong-da-xue}
|
||||
|
|
@ -305,7 +303,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
|
||||
<Route author="wooddance" example="/pku/bbs/hot" path="/pku/bbs/hot" radar="1" rssbud="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
论坛部分帖子正文内容的获取需要用户登录后的 Cookie 值,详情见部署页面的配置模块。
|
||||
|
||||
|
|
@ -327,7 +325,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
|
||||
<Route author="nczitzk" example="/pku/hr" path="/pku/hr/:category?" paramsDesc={['分类,见下方说明,默认为首页最新公告']} radar="1" rssbud="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
分类字段处填写的是对应北京大学人事处分类页网址中介于 **<http://hr.pku.edu.cn/>** 和 **/index.htm** 中间的一段,并将其中的 `/` 修改为 `-`。
|
||||
|
||||
|
|
@ -489,7 +487,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
|
||||
<Route author="TonyRL" example="/bnu/fdy/tzgg/dwjs" path="/bnu/fdy/:path*" paramsDesc={['路径,默认为 `tzgg`']} radar="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径处填写对应页面 URL 中 `https://fdy.bnu.edu.cn/` 和 `/index.htm` 之间的字段。下面是一个例子。
|
||||
|
||||
|
|
@ -505,8 +503,10 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
|
||||
<Route author="Muxq99" example="/bwu/news" path="/bwu/news" />
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
由于学校官网对非大陆 IP 的访问存在限制,需自行部署。
|
||||
|
||||
:::
|
||||
|
||||
## 北京协和医学院 {#bei-jing-xie-he-yi-xue-yuan}
|
||||
|
|
@ -535,7 +535,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
|
||||
<Route author="RicardoMing wzekin" example="/bupt/portal" path="/bupt/portal" />
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
由于需要登陆 `https://webapp.bupt.edu.cn/wap/login.html?redirect=http://` 后的 Cookie 值,所以只能自建,详情见部署页面的配置模块
|
||||
|
||||
|
|
@ -545,7 +545,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
|
||||
<Route author="wzekin" example="/bupt/news" path="/bupt/news" />
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
由于需要登陆 `https://webapp.bupt.edu.cn/wap/login.html?redirect=http://` 后的 Cookie 值,所以只能自建,详情见部署页面的配置模块
|
||||
|
||||
|
|
@ -554,7 +554,8 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
### BTBYR 趣味盒 {#bei-jing-you-dian-da-xue-btbyr-qu-wei-he}
|
||||
|
||||
<Route author="prnake" example="/bupt/funbox" path="/bupt/funbox" selfhost="1"/>
|
||||
:::caution 注意
|
||||
|
||||
:::caution
|
||||
|
||||
由于需要登陆 BTBYR 后的 Cookie 值,所以只能自建,并且部署和订阅端均需支持 IPV6 网络或使用镜像站点。
|
||||
|
||||
|
|
@ -623,16 +624,20 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
|
||||
</Route>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径参数的值为相应通知列表页面的地址去除后缀名和域名后的路径。
|
||||
|
||||
例如 “通知公告” 列表页面地址为 <http://jwc.cqu.edu.cn/index/tzgg.htm>,相应参数为 `index/tgzz`。
|
||||
|
||||
:::
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
原重庆大学教务网网站变更为重庆大学本科教学信息网。该路由编写时(2021-07-29)它[正处于试运行阶段](http://jwc.cqu.edu.cn/info/1080/3482.htm)。
|
||||
|
||||
通知的分类比较迷,请小心甄别、使用(以免漏掉需要的通知)。
|
||||
|
||||
:::
|
||||
|
||||
### 新闻网讲座预告 {#chong-qing-da-xue-xin-wen-wang-jiang-zuo-yu-gao}
|
||||
|
|
@ -824,7 +829,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
| -------- | -------- | -------- |
|
||||
| tzgg | gzdt | zcfg |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
表格仅呈现了部分分类栏目,更多分类栏目参见 [大连理工大学人事处](http://perdep.dlut.edu.cn),并按照上方 [**通用**](#da-lian-li-gong-da-xue-tong-yong) 规则订阅。
|
||||
|
||||
|
|
@ -840,7 +845,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
| -------- | -------- | -------- |
|
||||
| xwkd | zytg | bhgs |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
表格仅呈现了部分分类栏目,更多分类栏目参见 [大连理工大学教务处](http://teach.dlut.edu.cn),并按照上方 [**通用**](#da-lian-li-gong-da-xue-tong-yong) 规则订阅。
|
||||
|
||||
|
|
@ -860,7 +865,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
| --------------------- | --------------------- | --------------------- |
|
||||
| yjszs/zcwj1 | yjszs/gzdt/gzdt | yjszs/zlxz/zlxz |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
表格仅呈现了部分分类栏目,更多分类栏目参见 [大连理工大学研究生院](http://gs.dlut.edu.cn),并按照上方 [**通用**](#da-lian-li-gong-da-xue-tong-yong) 规则订阅。
|
||||
|
||||
|
|
@ -876,7 +881,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
| -------- | -------- | -------- | -------- | ---------- | ---------- |
|
||||
| jdxw | zhxw | xytz | xsdt | bkstz | yjstz |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
表格仅呈现了部分分类栏目,更多分类栏目参见 [大连理工大学软件学院](http://ssdut.dlut.edu.cn),并按照上方 [**通用**](#da-lian-li-gong-da-xue-tong-yong) 规则订阅。
|
||||
|
||||
|
|
@ -892,7 +897,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
| -------- | -------- |
|
||||
| tzgg | xqxw |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
表格仅呈现了部分分类栏目,更多分类栏目参见 [大连理工大学开发区校区](http://eda.dlut.edu.cn),并按照上方 [**通用**](#da-lian-li-gong-da-xue-tong-yong) 规则订阅。
|
||||
|
||||
|
|
@ -908,7 +913,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
| -------- | -------- | -------- | -------- | -------- | ---- |
|
||||
| xqxw | xywh | xyfc | xsdt | mtbd | gg |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
表格仅呈现了部分分类栏目,更多分类栏目参见 [大连理工大学盘锦校区](https://panjin.dlut.edu.cn/index.htm),并按照上方 [**通用**](#da-lian-li-gong-da-xue-tong-yong) 规则订阅。
|
||||
|
||||
|
|
@ -924,7 +929,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
| -------- | -------- | --------- |
|
||||
| zytz | xgdt | gsgonggao |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
表格仅呈现了部分分类栏目,更多分类栏目参见 [大连理工大学盘锦校区学生事务办公室](http://xsgzb.dlut.edu.cn/index.htm),并按照上方 [**通用**](#da-lian-li-gong-da-xue-tong-yong) 规则订阅。
|
||||
|
||||
|
|
@ -940,7 +945,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
| -------- | -------- | -------- | -------- | ---------- |
|
||||
| xwkd | zytz | jxwj | cjwt | xkyks |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
表格仅呈现了部分分类栏目,更多分类栏目参见 [大连理工大学盘锦校区教务教学事务办公室](http://pjteach.dlut.edu.cn),并按照上方 [**通用**](#da-lian-li-gong-da-xue-tong-yong) 规则订阅。
|
||||
|
||||
|
|
@ -956,7 +961,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
| -------- | -------- | -------- | -------- |
|
||||
| tzgg | dzyd | zwkx | fgzd |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
表格仅呈现了部分分类栏目,更多分类栏目参见 [大连理工大学盘锦校区总务部](http://pjxqzwb.dlut.edu.cn/index.htm),并按照上方 [**通用**](#da-lian-li-gong-da-xue-tong-yong) 规则订阅。
|
||||
|
||||
|
|
@ -972,7 +977,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
| -------- | -------- |
|
||||
| xyxw | zxgg |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
表格仅呈现了部分分类栏目,更多分类栏目参见 [大连理工大学体育与健康学院盘锦分院](http://tjpj.dlut.edu.cn/index.htm),并按照上方 [**通用**](#da-lian-li-gong-da-xue-tong-yong) 规则订阅。
|
||||
|
||||
|
|
@ -988,7 +993,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
| -------- | ---------- | -------- |
|
||||
| jstz | xstong_zhi | xwsd |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
表格仅呈现了部分分类栏目,更多分类栏目参见 [大连理工大学国际合作与交流处(港澳台办)](http://dutdice.dlut.edu.cn),并按照上方 [**通用**](#da-lian-li-gong-da-xue-tong-yong) 规则订阅。
|
||||
|
||||
|
|
@ -1004,7 +1009,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
| -------- | -------- | -------- | -------- |
|
||||
| tzgg | hdrc | xwdt | jkzs |
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
表格仅呈现了部分分类栏目,更多分类栏目参见 [大连理工大学体育场馆中心](http://tycgzx.dlut.edu.cn),并按照上方 [**通用**](#da-lian-li-gong-da-xue-tong-yong) 规则订阅。
|
||||
|
||||
|
|
@ -1126,7 +1131,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
|
||||
<Route author="nczitzk" example="/nenu/sohac" path="/nenu/sohac/:path+" paramsDesc={['路径,默认为通知公告']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若订阅 [通知公告](https://sohac.nenu.edu.cn/index/tzgg.htm),网址为 <https://sohac.nenu.edu.cn/index/tzgg.htm>。截取 `https://sohac.nenu.edu.cn/` 到末尾 `.htm` 的部分 `index/tzgg` 作为参数,此时路由为 [`/nenu/sohac/index/tzgg`](https://rsshub.app/nenu/sohac/index/tzgg)。
|
||||
|
||||
|
|
@ -1140,7 +1145,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
|
||||
<Route author="nczitzk" example="/nenu/yjsy" path="/nenu/yjsy/:path+" paramsDesc={['路径,默认为通知公告']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若订阅 [通知公告](https://yjsy.nenu.edu.cn/tzgg.htm),网址为 <https://yjsy.nenu.edu.cn/tzgg.htm>。截取 `https://yjsy.nenu.edu.cn/` 到末尾 `.htm` 的部分 `tzgg` 作为参数,此时路由为 [`/nenu/yjsy/tzgg`](https://rsshub.app/nenu/yjsy/tzgg)。
|
||||
|
||||
|
|
@ -1248,7 +1253,7 @@ Note:[Source website](https://ece.umass.edu/seminar) may be empty when there's
|
|||
|
||||
<Route author="nczitzk" example="/uibe/hr" path="/uibe/hr/:category?/:type?" paramsDesc={['分类,可在对应页 URL 中找到,默认为通知公告', '类型,可在对应页 URL 中找到,默认为空']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
如 [通知公告](http://hr.uibe.edu.cn/tzgg) 的 URL 为 <http://hr.uibe.edu.cn/tzgg>,其路由为 [`/uibe/hr/tzgg`](https://rsshub.app/uibe/hr/tzgg)
|
||||
|
||||
|
|
@ -1478,8 +1483,10 @@ category 列表:
|
|||
|
||||
## 哈尔滨工业大学 {#ha-er-bin-gong-ye-da-xue}
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
哈工大网站疑似禁止了`rsshub.app`的访问,使用路由需要自行 [部署](https://docs.rsshub.app/install)。
|
||||
|
||||
:::
|
||||
|
||||
### 教务处通知公告 {#ha-er-bin-gong-ye-da-xue-jiao-wu-chu-tong-zhi-gong-gao}
|
||||
|
|
@ -1490,13 +1497,17 @@ category 列表:
|
|||
|
||||
<Route author="ranpox" example="/hit/today/10" path="/hit/today/:category" paramsDesc={['分类编号,`10`为公告公示,`11`为新闻快讯,同时支持详细分类,使用方法见下']} radar="1" rssbud="1">
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
今日哈工大的文章分为公告公示和新闻快讯,每个页面右侧列出了更详细的分类,其编号为每个 URL 路径的最后一个数字。
|
||||
例如会议讲座的路径为`/taxonomy/term/10/25`,则可以通过 [`/hit/today/25`](https://rsshub.app/hit/today/25) 订阅该详细类别。
|
||||
|
||||
:::
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
部分文章需要经过统一身份认证后才能阅读全文。
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
|
@ -1637,8 +1648,10 @@ category 列表:
|
|||
|
||||
</Route>
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS_REJECT_UNAUTHORIZED = 0
|
||||
|
||||
:::
|
||||
|
||||
## 湖南大学 {#hu-nan-da-xue}
|
||||
|
|
@ -1794,8 +1807,10 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS
|
|||
|
||||
<Route author="auto-bot-ty" example="/scut/seie/news_center" path="/scut/seie/news_center" radar="1" />
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
由于学院官网对非大陆 IP 的访问存在限制,需自行部署。
|
||||
|
||||
:::
|
||||
|
||||
## 华南农业大学 {#hua-nan-nong-ye-da-xue}
|
||||
|
|
@ -2324,7 +2339,7 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS
|
|||
|
||||
## 南京信息工程大学 {#nan-jing-xin-xi-gong-cheng-da-xue}
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路由地址全部按照 **学校官网域名和栏目编号** 设计
|
||||
|
||||
|
|
@ -2352,7 +2367,7 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS
|
|||
| -------- | -------- | -------- | -------- | -------- | -------- | ---- |
|
||||
| 783 | 784 | 785 | 786 | 788 | 789 | qt |
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
全文内容需使用 校园网或[VPN](http://vpn.nuist.edu.cn) 获取
|
||||
|
||||
|
|
@ -2384,7 +2399,7 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS
|
|||
|
||||
<Route author="gylidian nczitzk" example="/nuist/yjs/index/tzgg" path="/nuist/yjs/:path+" paramsDesc={['默认为通知公告']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
路径字段处填写的是对应南京信息工程大学研究生院学科建设处分类页网址中介于 **<https://yjs.nuist.edu.cn/>** 和 **.htm** 中间的一段。
|
||||
|
||||
|
|
@ -2482,8 +2497,10 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS
|
|||
|
||||
</Route>
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
由于学校通知仅允许校园网访问,需自行部署。
|
||||
|
||||
:::
|
||||
|
||||
### 清华大学招聘信息 {#qing-hua-da-xue-qing-hua-da-xue-zhao-pin-xin-xi}
|
||||
|
|
@ -2790,7 +2807,7 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS
|
|||
|
||||
## 上海立信会计金融学院 {#shang-hai-li-xin-kuai-ji-jin-rong-xue-yuan}
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
分区 ID 是`info/iList.jsp?cat_id=`后方数字
|
||||
|
||||
|
|
@ -2866,8 +2883,10 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS
|
|||
|
||||
<Route author="HyperCherry" example="/stbu/jsjxy" path="/stbu/jsjxy" />
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
计算机学院通知公告疑似禁止了非大陆 IP 访问,使用路由需要自行 [部署](https://docs.rsshub.app/install)。
|
||||
|
||||
:::
|
||||
|
||||
## 四川旅游学院 {#si-chuan-l%C3%BC-you-xue-yuan}
|
||||
|
|
@ -3114,7 +3133,7 @@ paramsDesc={['公告类型,详见表格']}>
|
|||
|
||||
<Route author="hoilc" example="/xjtu/dean/jxxx/xytz/ksap" path="/xjtu/dean/:subpath+" paramsDesc={['栏目路径,支持多级,不包括末尾的`.htm`']} >
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
支持`http://dean.xjtu.edu.cn/`下所有**有文章列表**的栏目,
|
||||
|
||||
|
|
@ -3199,9 +3218,10 @@ paramsDesc={['公告类型,详见表格']}>
|
|||
|
||||
<Route author="mocusez" example="/xaut/jwc/tzgg" path="/xaut/jwc/:category?" paramsDesc={['通知类别,默认为通知公告']} radar="1" rssbud="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
有些内容需使用校园网或 VPN 访问知行网获取
|
||||
|
||||
:::
|
||||
|
||||
| 通知公告 | 新闻动态 | 规章制度 | 竞赛结果公示 | 竞赛获奖通知 | 竞赛信息 | 公开公示 |
|
||||
|
|
@ -3214,9 +3234,10 @@ paramsDesc={['公告类型,详见表格']}>
|
|||
|
||||
<Route author="light0926 mocusez" example="/xaut/rsc/tzgg" path="/xaut/rsc/:category?" paramsDesc={['通知类别,默认为通知公告']} radar="1" rssbud="1">
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
有些内容指向外部链接,目前只提供这些链接,不提供具体内容,去除 jwc 和 index 的修改
|
||||
|
||||
:::
|
||||
|
||||
| 通知公告 | 工作动态 |
|
||||
|
|
@ -3465,7 +3486,7 @@ paramsDesc={['公告类型,详见表格']}>
|
|||
|
||||
<Route author="nczitzk" example="/yangtzeu/dongke" path="/yangtzeu/dongke/:path+" paramsDesc={['路径,默认为学院新闻']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
若订阅 [院情总览 - 通知公告](https://dongke.yangtzeu.edu.cn/yqzl/tzgg.htm),网址为 <https://dongke.yangtzeu.edu.cn/yqzl/tzgg.htm>。截取 `https://dongke.yangtzeu.edu.cn` 到末尾 `.htm` 的部分 `/yqzl/tzgg` 作为参数,此时路由为 [`/yangtzeu/dongke/yqzl/tzgg`](https://rsshub.app/yangtzeu/dongke/yqzl/tzgg)。
|
||||
|
||||
|
|
@ -3714,11 +3735,16 @@ paramsDesc={['公告类型,详见表格']}>
|
|||
|
||||
### 选课信息教务通知 {#zhong-guo-hai-yang-da-xue-xuan-ke-xin-xi-jiao-wu-tong-zhi}
|
||||
|
||||
<Route author="3401797899" example="/ouc/jwgl" path="/ouc/jwgl" radar="1" selfhost="1"/>
|
||||
:::caution 注意
|
||||
<Route author="3401797899" example="/ouc/jwgl" path="/ouc/jwgl" radar="1" selfhost="1">
|
||||
|
||||
:::caution
|
||||
|
||||
由于选课通知仅允许校园网访问,需自行部署。
|
||||
|
||||
:::
|
||||
|
||||
</Route>
|
||||
|
||||
## 中国科学技术大学 {#zhong-guo-ke-xue-ji-shu-da-xue}
|
||||
|
||||
### 官网通知公告 {#zhong-guo-ke-xue-ji-shu-da-xue-guan-wang-tong-zhi-gong-gao}
|
||||
|
|
@ -3857,7 +3883,7 @@ paramsDesc={['公告类型,详见表格']}>
|
|||
|
||||
<Route author="nczitzk" example="/ruc/hr" path="/ruc/hr/:category?" paramsDesc={['分类,见下方说明,默认为首页通知公告']}>
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
分类字段处填写的是对应中国人民大学人事处分类页网址中介于 **<http://hr.ruc.edu.cn/>** 和 **/index.htm** 中间的一段,并将其中的 `/` 修改为 `-`。
|
||||
|
||||
|
|
|
|||
|
|
@ -22,29 +22,29 @@ Apart from serving as an information source hub, RSSHub is also made compatible
|
|||
|
||||
### Install
|
||||
|
||||
<code-group>
|
||||
<code-block title="pnpm" active>
|
||||
<Tabs>
|
||||
<TabItem value="pnpm" label="pnpm" default>
|
||||
|
||||
```bash
|
||||
pnpm add rsshub
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="yarnv1">
|
||||
</TabItem>
|
||||
<TabItem value="yarn" label="yarnv1">
|
||||
|
||||
```bash
|
||||
yarn add rsshub
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="npm">
|
||||
</TabItem>
|
||||
<TabItem value="npm" label="npm">
|
||||
|
||||
```bash
|
||||
npm install rsshub --save
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
### Usage
|
||||
|
||||
|
|
|
|||
|
|
@ -54,9 +54,9 @@ const config = {
|
|||
{ from: '/joinus/use-cache', to: '/joinus/advanced/use-cache' },
|
||||
...Object.values(require('./sidebars').guideSidebar)
|
||||
.find((s) => s.label === 'Routes')
|
||||
.items.map((category) => ({
|
||||
from: `/${category.split('/')[1]}`,
|
||||
to: `/routes/${category.split('/')[1]}`,
|
||||
.items.map(({ id }) => ({
|
||||
from: `/${id.split('/')[1]}`,
|
||||
to: `/routes/${id.split('/')[1]}`,
|
||||
})),
|
||||
],
|
||||
}),
|
||||
|
|
@ -235,6 +235,7 @@ const config = {
|
|||
prism: {
|
||||
theme: lightCodeTheme,
|
||||
darkTheme: darkCodeTheme,
|
||||
additionalLanguages: ['bash'],
|
||||
},
|
||||
}),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -38,5 +38,97 @@
|
|||
"sidebar.joinusSidebar.category.Advanced": {
|
||||
"message": "高级用法",
|
||||
"description": "The label for category Advanced in sidebar joinusSidebar"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.💬 Social Media": {
|
||||
"message": "💬 社交媒体",
|
||||
"description": "The label for the doc item 💬 Social Media in sidebar guideSidebar, linking to the doc routes/social-media"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.📱 New media": {
|
||||
"message": "📱 新媒体",
|
||||
"description": "The label for the doc item 📱 New media in sidebar guideSidebar, linking to the doc routes/new-media"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.📰 News": {
|
||||
"message": "📰 传统媒体",
|
||||
"description": "The label for the doc item 📰 News in sidebar guideSidebar, linking to the doc routes/traditional-media"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.💬️ BBS": {
|
||||
"message": "💬️ 论坛",
|
||||
"description": "The label for the doc item 💬️ BBS in sidebar guideSidebar, linking to the doc routes/bbs"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.🖊️️ Blog": {
|
||||
"message": "🖊️️ 博客",
|
||||
"description": "The label for the doc item 🖊️️ Blog in sidebar guideSidebar, linking to the doc routes/blog"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.💻 Programming": {
|
||||
"message": "💻 编程",
|
||||
"description": "The label for the doc item 💻 Programming in sidebar guideSidebar, linking to the doc routes/programming"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.🎨️ Design": {
|
||||
"message": "🎨️ 设计",
|
||||
"description": "The label for the doc item 🎨️ Design in sidebar guideSidebar, linking to the doc routes/design"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.🎥 Live": {
|
||||
"message": "🎥 直播",
|
||||
"description": "The label for the doc item 🎥 Live in sidebar guideSidebar, linking to the doc routes/live"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.🔊 Multimedia": {
|
||||
"message": "🔊 音视频",
|
||||
"description": "The label for the doc item 🔊 Multimedia in sidebar guideSidebar, linking to the doc routes/multimedia"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.🖼️ Picture": {
|
||||
"message": "🖼️ 图片",
|
||||
"description": "The label for the doc item 🖼️ Picture in sidebar guideSidebar, linking to the doc routes/picture"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.🎨️ ACG": {
|
||||
"message": "🎨️ 二次元",
|
||||
"description": "The label for the doc item 🎨️ ACG in sidebar guideSidebar, linking to the doc routes/anime"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.🔄 Application Updates": {
|
||||
"message": "🔄 程序更新",
|
||||
"description": "The label for the doc item 🔄 Application Updates in sidebar guideSidebar, linking to the doc routes/program-update"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.🎓 University": {
|
||||
"message": "🎓 大学通知",
|
||||
"description": "The label for the doc item 🎓 University in sidebar guideSidebar, linking to the doc routes/university"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.❗️ Forecast and Alerts": {
|
||||
"message": "❗️ 预报预警",
|
||||
"description": "The label for the doc item ❗️ Forecast and Alerts in sidebar guideSidebar, linking to the doc routes/forecast"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.🛫 Travel": {
|
||||
"message": "🛫 出行旅游",
|
||||
"description": "The label for the doc item 🛫 Travel in sidebar guideSidebar, linking to the doc routes/travel"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.🛍️ Shopping": {
|
||||
"message": "🛍️ 购物",
|
||||
"description": "The label for the doc item 🛍️ Shopping in sidebar guideSidebar, linking to the doc routes/shopping"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.🎮 Gaming": {
|
||||
"message": "🎮 游戏",
|
||||
"description": "The label for the doc item 🎮 Gaming in sidebar guideSidebar, linking to the doc routes/game"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.📚 Reading": {
|
||||
"message": "📚 阅读",
|
||||
"description": "The label for the doc item 📚 Reading in sidebar guideSidebar, linking to the doc routes/reading"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.📢 Government": {
|
||||
"message": "📢 政务消息",
|
||||
"description": "The label for the doc item 📢 Government in sidebar guideSidebar, linking to the doc routes/government"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.📖 Study": {
|
||||
"message": "📖 学习",
|
||||
"description": "The label for the doc item 📖 Study in sidebar guideSidebar, linking to the doc routes/study"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.🔬 Scientific Journal": {
|
||||
"message": "🔬 科学期刊",
|
||||
"description": "The label for the doc item 🔬 Scientific Journal in sidebar guideSidebar, linking to the doc routes/journal"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.💰 Finance": {
|
||||
"message": "💰 金融",
|
||||
"description": "The label for the doc item 💰 Finance in sidebar guideSidebar, linking to the doc routes/finance"
|
||||
},
|
||||
"sidebar.guideSidebar.doc.🔍 Uncategorized": {
|
||||
"message": "🔍 其他",
|
||||
"description": "The label for the doc item 🔍 Uncategorized in sidebar guideSidebar, linking to the doc routes/other"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,15 +1,19 @@
|
|||
# API
|
||||
|
||||
:::caution 注意
|
||||
API 仍处于开发状态中, 并可能会有改动。欢迎提供建议!
|
||||
:::caution
|
||||
|
||||
API 仍处于开发状态中,并可能会有改动。欢迎提供建议!
|
||||
|
||||
:::
|
||||
|
||||
RSSHub 提供下列 API:
|
||||
|
||||
## 可用公共路由列表
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
`protected_router.js`下的路由**不会被**包含在此 API 返回的结果当中.
|
||||
|
||||
:::
|
||||
|
||||
举例: <https://rsshub.app/api/routes/bilibili>
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ $ docker pull diygod/rsshub
|
|||
|
||||
## Docker 部署
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
如需启用 puppeteer,请在**每条**命令中均将 `diygod/rsshub` 替换为 `diygod/rsshub:chromium-bundled`。
|
||||
|
||||
|
|
@ -186,29 +186,29 @@ $ cd RSSHub
|
|||
|
||||
下载完成后,需要安装依赖(开发不要加 `--production` 参数)
|
||||
|
||||
<code-group>
|
||||
<code-block title="pnpm" active>
|
||||
<Tabs groupId="package-manager">
|
||||
<TabItem value="pnpm" label="pnpm" active>
|
||||
|
||||
```bash
|
||||
pnpm install --prod
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="yarnv1">
|
||||
</TabItem>
|
||||
<TabItem value="yarn" label="yarnv1">
|
||||
|
||||
```bash
|
||||
yarn --production
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="npm">
|
||||
</TabItem>
|
||||
<TabItem value="npm" label="npm">
|
||||
|
||||
```bash
|
||||
npm install --omit=dev
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
由于众所周知的原因,在中国使用 `npm` 下载依赖十分缓慢,建议挂一个代理或者考虑使用 [NPM 镜像](https://npm.taobao.org/)
|
||||
|
||||
|
|
@ -238,7 +238,7 @@ $ pm2 start lib/index.js --name rsshub
|
|||
|
||||
### 添加配置
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
在 arm/arm64 上,此部署方式不包含 puppeteer 依赖。要启用 puppeteer,你需要先从发行版安装 Chromium,然后设置 `CHROMIUM_EXECUTABLE_PATH` 为其可执行路径。
|
||||
|
||||
|
|
@ -309,7 +309,7 @@ in pkgs.stdenv.mkDerivation {
|
|||
|
||||
### 注意
|
||||
|
||||
:::caution 更新
|
||||
:::caution
|
||||
|
||||
Heroku [不再](https://blog.heroku.com/next-chapter) 提供免费服务。
|
||||
|
||||
|
|
@ -500,7 +500,7 @@ gcloud app deploy
|
|||
|
||||
[](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/DIYgod/RSSHub/master/docker-compose.yml)
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
- 需要 [DockerHub](https://hub.docker.com) 账号
|
||||
- [Play with Docker](https://labs.play-with-docker.com/) 一次仅能使用 4 小时,不能作为持久化解决方案,应当用于测试 / 验证路由规则
|
||||
|
|
@ -585,7 +585,7 @@ RSSHub 支持 `memory` 和 `redis` 两种缓存方式
|
|||
|
||||
### 反向代理
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
这种代理方式无法代理包含 cookie 的请求。
|
||||
|
||||
|
|
@ -734,7 +734,7 @@ RSSHub 支持使用访问密钥 / 码,白名单和黑名单三种方式进行
|
|||
|
||||
### 部分 RSS 模块配置
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
此处信息不完整。完整配置请参考路由对应的文档和 `lib/config.js`。
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,6 @@
|
|||
sidebar_position: 1
|
||||
---
|
||||
|
||||
import Route from '@site/src/components/Route';
|
||||
|
||||
# RSS 基础
|
||||
|
||||
本指南面向希望深入了解如何制作 RSS 订阅源的高级用户。如果您是第一次制作 RSS 订阅源,我们建议先阅读 [制作自己的 RSSHub 路由](/zh/joinus/new-rss/start-code)。
|
||||
|
|
@ -56,6 +54,7 @@ import Route from '@site/src/components/Route';
|
|||
| **`doi`** | *(可选)* 条目的数字对象标识符 (DOI),应为格式为 `10.xxx/xxxxx.xxxx` 的字符串 | `undefinded` | R |
|
||||
|
||||
:::caution 格式考虑
|
||||
|
||||
在指定 RSS 订阅源中的某些字段时,重要的是要注意一些格式考虑因素。具体来说,您应避免在以下字段中包含任何换行符、连续的空格或前导/尾随空格:**`title`**,**`subtitle`**(仅适用于 Atom),**`author`**(仅适用于 Atom),**`item.title`** 和 **`item.author`**。
|
||||
|
||||
虽然大多数 RSS 阅读器将自动修剪这些空字符,但有些阅读器可能无法正确处理它们。因此,为确保与所有 RSS 阅读器兼容,我们建议在输出这些字段之前将其修剪。如果您制作的路由无法容忍修剪这些空字符,您应考虑更改它们的格式。
|
||||
|
|
@ -63,6 +62,7 @@ import Route from '@site/src/components/Route';
|
|||
另外,虽然其他字段不会被强制修剪,但我们建议尽可能避免违反上述格式规则。如果您正在使用 Cheerio 从网页中提取内容,时刻谨记 Cheerio 会保留换行和缩进。特别是对于 **`item.description`** 字段,任何预期之内的换行都应转换为 `<br>` 标签,以防止其被 RSS 阅读器修剪。尤其是您从 JSON 数据中制作 RSS 订阅时,目标网站返回的 JSON 很有可能含有需要显示的换行符,在这种情况下,应将它们转换为 `<br>` 标签。
|
||||
|
||||
请牢记这些格式考虑因素,以确保您的 RSS 订阅源与所有 RSS 阅读器兼容。
|
||||
|
||||
:::
|
||||
|
||||
## 制作 BitTorrent/磁力订阅源
|
||||
|
|
@ -89,7 +89,7 @@ ctx.state.data = {
|
|||
|
||||
如果您要在 RSSHub 路由中添加对 BitTorrent/磁力订阅支持,最重要的是在文档以反映此功能。要做到这一点,您需要将 `Route` 组件的 `supportBT` 属性设置为 `"1"`。 以下是一个示例:
|
||||
|
||||
```vue
|
||||
```tsx
|
||||
<Route author="..." example="..." path="..." supportBT="1" />
|
||||
```
|
||||
|
||||
|
|
@ -115,7 +115,7 @@ ctx.state.data = {
|
|||
|
||||
要显示您制作的期刊订阅源支持 Sci-hub 功能,您需要将 `Route` 组件的 `supportScihub` 属性设置为 `"1"`。以下是一个示例:
|
||||
|
||||
```vue
|
||||
```tsx
|
||||
<Route author="..." example="..." path="..." supportScihub="1" />
|
||||
```
|
||||
|
||||
|
|
@ -155,7 +155,7 @@ ctx.state.data = {
|
|||
|
||||
要显示您制作的订阅源与播客播放器兼容,您需要将 `Route` 组件的 `supportPodcast` 属性设置为 `"1"`。以下是一个示例:
|
||||
|
||||
```vue
|
||||
```tsx
|
||||
<Route author="..." example="..." path="..." supportPodcast="1" />
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -36,8 +36,10 @@ const pubDate = parseDate('2020/12/30');
|
|||
const pubDate = parseDate('2020/12/30', 'YYYY/MM/DD');
|
||||
```
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
你可以参考 [day.js 文档](https://day.js.org/docs/zh-CN/parse/string-format#支持的解析占位符列表) 查看所有可用日期格式。
|
||||
|
||||
:::
|
||||
|
||||
如果你需要解析相对日期,请使用 `parseRelativeDate`。
|
||||
|
|
|
|||
|
|
@ -109,8 +109,10 @@ RSSHub 会将所有路由命名空间的文件夹名附加到路由前面。路
|
|||
|
||||
要生成维护者列表,可使用以下命令:`pnpm run build:maintainer`,它将在 `assets/build/` 目录下一份维护者列表。
|
||||
|
||||
:::danger 警告
|
||||
:::danger
|
||||
|
||||
在 `@koa/router` 对象中的路由应该与相应的文档中添加命名空间前的 `path` 一致。
|
||||
|
||||
:::
|
||||
|
||||
### Radar 规则
|
||||
|
|
@ -119,8 +121,10 @@ RSSHub 会将所有路由命名空间的文件夹名附加到路由前面。路
|
|||
|
||||
要生成完整的 `radar-rules.js` 文件,可使用以下命令:`yarn build:radar`,它将在 `assets/build/` 目录下创建文件。
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
在提交代码之前,请记得删除所有在 `assets/build/` 中的生成的资源。
|
||||
|
||||
:::
|
||||
|
||||
### 渲染模板
|
||||
|
|
@ -156,7 +160,7 @@ const renderAuthor = (author) => art(path.join(__dirname, 'templates/author.art'
|
|||
|
||||
### v1 路由规范
|
||||
|
||||
:::danger 警告
|
||||
:::danger
|
||||
|
||||
v1 路由规范已被弃用。所有新路由都应遵循 [v2 路由规范](#v2-lu-you-gui-fan)。
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,8 @@ sidebar_position: 3
|
|||
|
||||
上一个语句返回的对象将被重复使用,并且会添加一个额外的 `description` 属性。每个 `item.link` 的返回缓存将是`{ title, link, pubDate, author, category, description }`。下一次请求相同路由时,将直接返回处理过后的缓存而不是向服务器发出请求并重新计算数据。
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
在 `tryGet()` 函数之外声明的变量的任何赋值都不会在缓存命中的情况下被处理。例如,以下代码将无法按预期工作:
|
||||
|
||||
```js
|
||||
|
|
@ -62,10 +63,12 @@ sidebar_position: 3
|
|||
|
||||
[lib/middleware/cache/index.js](https://github.com/DIYgod/RSSHub/blob/master/lib/middleware/cache/index.js#L58)
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
以下是使用缓存的高级方法。大多数情况下,您应使用 `ctx.cache.tryGet()`。
|
||||
|
||||
请注意,当使用 `ctx.cache.get()` 获取缓存时,您需要使用 `JSON.parse()`。
|
||||
|
||||
:::
|
||||
|
||||
### ctx.cache.get(key \[, refresh ])
|
||||
|
|
|
|||
|
|
@ -40,13 +40,14 @@ module.exports = {
|
|||
|
||||
其余的内部对象键是网站的子域名。如果要匹配的网站没有子域名,或者想同时匹配 `www.example.com` 和 `example.com`,则应使用 `'.'`。在此示例中,我们将使用 `'.'`,因为我们希望匹配 `github.com`。请注意,每个子域名键应返回**一个对象数组**。
|
||||
|
||||
<code-group>
|
||||
<code-block title="github.com 和 www.github.com">
|
||||
<Tabs>
|
||||
<TabItem value="github.com" label="github.com 和 www.github.com">
|
||||
|
||||
```js{4}
|
||||
```js
|
||||
module.exports = {
|
||||
'github.com': {
|
||||
_name: 'GitHub',
|
||||
// highlight-next-line
|
||||
'.': [
|
||||
{
|
||||
title: '...',
|
||||
|
|
@ -59,13 +60,14 @@ module.exports = {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="abc.github.com">
|
||||
</TabItem>
|
||||
<TabItem value="abc.github.com" label="abc.github.com">
|
||||
|
||||
```js{4}
|
||||
```js
|
||||
module.exports = {
|
||||
'github.com': {
|
||||
_name: 'GitHub',
|
||||
// highlight-next-line
|
||||
abc: [
|
||||
{
|
||||
title: '...',
|
||||
|
|
@ -78,13 +80,14 @@ module.exports = {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="abc.def.github.com">
|
||||
</TabItem>
|
||||
<TabItem value="abc.def.github.com" label="abc.def.github.com">
|
||||
|
||||
```js{4}
|
||||
```js
|
||||
module.exports = {
|
||||
'github.com': {
|
||||
_name: 'GitHub',
|
||||
// highlight-next-line
|
||||
'abc.def': [
|
||||
{
|
||||
title: '...',
|
||||
|
|
@ -97,8 +100,8 @@ module.exports = {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
### `title`
|
||||
|
||||
|
|
@ -114,8 +117,10 @@ source 是*可选*字段,应指定 URL 路径。如果不想匹配任何 URL
|
|||
|
||||
source 应为一个字符串数组。例如,如果 `GitHub 仓库 Issues` 的 source 是 `/:user/:repo`,则意味着当您访问 `https://github.com/DIYgod/RSSHub` 时将匹配 `/:user/:repo`,此时返回的结果 params 将是:`{user: 'DIYgod', repo: 'RSSHub'}`。浏览器扩展程序使用这些参数根据 target 字段建立 RSSHub 订阅地址。
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
如果要提取的值在 URL 参数或 URL hash 中,请使用 target 函数而不是 source 字段。 此外,请记住,source 字段仅匹配 URL 路径,而不匹配 URL 的任何其他部分。
|
||||
|
||||
:::
|
||||
|
||||
您也可以使用 `*` 符号执行通配符匹配。请注意,此处的语法与 [path-to-regexp](https://github.com/pillarjs/path-to-regexp) 不同。例如,`/:user/:repo/*` 将匹配 `https://github.com/DIYgod/RSSHub/issues` 和 `https://github.com/DIYgod/RSSHub/issues/1234`。如果要对匹配结果进行命名,可以在 `*` 符号后放置变量名。例如,`/user/:repo/*path`,在此情况下,`path` 将是 `issues` 和 `issues/1234`。
|
||||
|
|
@ -136,10 +141,10 @@ source 应为一个字符串数组。例如,如果 `GitHub 仓库 Issues` 的
|
|||
|
||||
下面是使用 `target` 字段作为函数的两个示例:
|
||||
|
||||
<code-group>
|
||||
<code-block title="使用 params 匹配">
|
||||
<Tabs>
|
||||
<TabItem value="params" label="使用 params 匹配">
|
||||
|
||||
```js{9}
|
||||
```js
|
||||
module.exports = {
|
||||
'github.com': {
|
||||
_name: 'GitHub',
|
||||
|
|
@ -148,6 +153,7 @@ module.exports = {
|
|||
title: '仓库 Issues',
|
||||
docs: 'https://docs.rsshub.app/routes/programming#github',
|
||||
source: ['/:user/:repo/issues/:id', '/:user/:repo/issues', '/:user/:repo'],
|
||||
// highlight-next-line
|
||||
target: (params) => `/github/issue/${params.user}/${params.repo}`,
|
||||
},
|
||||
],
|
||||
|
|
@ -155,10 +161,10 @@ module.exports = {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="使用 URL 匹配">
|
||||
</TabItem>
|
||||
<TabItem value="url" label="使用 URL 匹配">
|
||||
|
||||
```js{9}
|
||||
```js
|
||||
module.exports = {
|
||||
'github.com': {
|
||||
_name: 'GitHub',
|
||||
|
|
@ -167,6 +173,7 @@ module.exports = {
|
|||
title: '仓库 Issues',
|
||||
docs: 'https://docs.rsshub.app/routes/programming#github',
|
||||
source: ['/:user/:repo'],
|
||||
// highlight-next-line
|
||||
target: (_, url) => `/github/issue${new URL(url).pathname}`
|
||||
},
|
||||
],
|
||||
|
|
@ -174,8 +181,8 @@ module.exports = {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
两个示例将返回与 [第一个示例](/zh/joinus/new-radar#编写规则) 相同的 RSSHub 订阅地址。
|
||||
|
||||
|
|
|
|||
|
|
@ -2,67 +2,81 @@
|
|||
sidebar_position: 4
|
||||
---
|
||||
|
||||
import Route from '@site/src/components/Route';
|
||||
|
||||
# 添加文档
|
||||
|
||||
现在我们完成了代码,是时候为您的路由添加文档了。在 [文档 (/website/docs)](https://github.com/DIYgod/RSSHub/blob/master/website/docs) 中打开相应的文件,本例中是 `website/docs/routes/programming.md`。
|
||||
|
||||
为了实时预览文档,您需要在 **`website` 目录** 下安装文档的依赖项。在终端中输入以下命令:
|
||||
|
||||
<code-group>
|
||||
<code-block title="pnpm" active>
|
||||
<Tabs groupId="package-manager">
|
||||
<TabItem value="pnpm" label="pnpm" active>
|
||||
|
||||
```bash
|
||||
pnpm i
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="yarn">
|
||||
</TabItem>
|
||||
<TabItem value="yarn" label="yarn">
|
||||
|
||||
```bash
|
||||
yarn
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="npm">
|
||||
</TabItem>
|
||||
<TabItem value="npm" label="npm">
|
||||
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
您现在可以在 **`website` 目录** 下运行以下命令实时预览文档:
|
||||
您现在可以在 **`website` 目录** 下运行以下命令实时预览中文文档:
|
||||
|
||||
<code-group>
|
||||
<code-block title="pnpm" active>
|
||||
<Tabs groupId="package-manager">
|
||||
<TabItem value="pnpm" label="pnpm" active>
|
||||
|
||||
```bash
|
||||
pnpm run start:zh
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="yarn" label="yarn">
|
||||
|
||||
```bash
|
||||
yarn start:zh
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="npm" label="npm">
|
||||
|
||||
```bash
|
||||
npm run start:zh
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
:::tip 英文文档
|
||||
|
||||
运行以下命令实时预览英文文档
|
||||
|
||||
```bash
|
||||
pnpm run start
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="yarn">
|
||||
:::
|
||||
|
||||
```bash
|
||||
yarn start
|
||||
```
|
||||
:::caution
|
||||
|
||||
</code-block>
|
||||
<code-block title="npm">
|
||||
在开发模式下,您无法切换到其他语言。这是 Docusaurus 的 [技术限制](https://docusaurus.io/docs/i18n/tutorial#start-your-site)。
|
||||
|
||||
```bash
|
||||
npm run start
|
||||
```
|
||||
:::
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
文档使用 MDX 编写,并使用 [Docusaurus v2](https://docusaurus.io/docs) 渲染。
|
||||
|
||||
文档使用 Markdown 编写,并使用 [VuePress v1](https://v1.vuepress.vuejs.org) 渲染。
|
||||
|
||||
要为您的路由添加文档,请使用 Vue 组件。它们类似于 HTML 标签。以下是最常用的组件:
|
||||
要为您的路由添加文档,请使用 `Route` React 组件。它类似于 HTML 标签。以下是最常用的组件属性:
|
||||
|
||||
- `author`:路由维护者,用单个空格分隔。应与 [`maintainer.js`](/zh/joinus/new-rss/before-start#maintainerjs) 相同
|
||||
- `example`:路由示例,以 `/` 开头
|
||||
|
|
@ -78,7 +92,7 @@ npm run start
|
|||
|
||||
### 仓库 Issues(无参数)
|
||||
|
||||
```vue
|
||||
```tsx
|
||||
<Route author="HenryQW" example="/sspai/series" path="/sspai/series" />
|
||||
```
|
||||
|
||||
|
|
@ -90,7 +104,7 @@ npm run start
|
|||
|
||||
### 仓库 Issues(多个参数)
|
||||
|
||||
```vue
|
||||
```tsx
|
||||
<Route author="HenryQW" example="/github/issue/DIYgod/RSSHub" path="/github/issue/:user/:repo?" paramsDesc={['GitHub 用户名', 'GitHub 仓库名称,默认为 `RSSHub`']} />
|
||||
```
|
||||
|
||||
|
|
@ -102,7 +116,7 @@ npm run start
|
|||
|
||||
### 关键词(带表格的说明)
|
||||
|
||||
```vue
|
||||
```tsx
|
||||
<Route author="DIYgod" example="/pixiv/search/麻衣/popular/2" path="/pixiv/search/:keyword/:order?/:mode?" paramsDesc={['关键词', '排序方式,`popular` 按热门度排序,空或其他任意值按时间排,默认为 `date`', '过滤方式,见下表 默认为空']}>
|
||||
|
||||
| 只看非 R18 内容 | 只看 R18 内容 | 不过滤 |
|
||||
|
|
@ -129,46 +143,84 @@ npm run start
|
|||
如果您想提供关于路由的更多信息,可以使用这些自定义容器:
|
||||
|
||||
```md
|
||||
<details>
|
||||
<summary>点击展开全文</summary>
|
||||
这是一个详细块,标题 (summary) 是可选的,不支持 Markdown。
|
||||
</details>
|
||||
|
||||
:::note
|
||||
|
||||
这是一个备注。
|
||||
|
||||
:::
|
||||
|
||||
:::tip 提示标题
|
||||
这是一个提示。
|
||||
|
||||
标题是可选的。
|
||||
|
||||
:::
|
||||
|
||||
:::caution 警告标题
|
||||
这是一个警告。
|
||||
:::info
|
||||
|
||||
内容支持 Markdown。
|
||||
|
||||
:::
|
||||
|
||||
:::danger 危险标题
|
||||
这是一条危险的警告。
|
||||
:::caution
|
||||
|
||||
开始和结束的 `:::` 周围需要空出一行
|
||||
|
||||
:::
|
||||
|
||||
:::note 详细标题
|
||||
这是一个详细块。
|
||||
:::danger
|
||||
|
||||
否则内容可能无法正常渲染。
|
||||
|
||||
:::
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>点击展开全文</summary>
|
||||
这是一个详细块,标题 (summary) 是可选的,不支持 Markdown。
|
||||
</details>
|
||||
|
||||
:::note
|
||||
|
||||
这是一个备注。
|
||||
|
||||
:::
|
||||
|
||||
:::tip 提示标题
|
||||
这是一个提示。
|
||||
|
||||
标题是可选的。
|
||||
|
||||
:::
|
||||
|
||||
:::caution 警告标题
|
||||
这是一个警告。
|
||||
:::info
|
||||
|
||||
内容支持 Markdown。
|
||||
|
||||
:::
|
||||
|
||||
:::danger 危险标题
|
||||
这是一条危险的警告。
|
||||
:::caution
|
||||
|
||||
开始和结束的 `:::` 周围需要空出一行
|
||||
|
||||
:::
|
||||
|
||||
:::note 详细标题
|
||||
这是一个详细块。
|
||||
:::danger
|
||||
|
||||
否则内容可能无法正常渲染。
|
||||
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
### 其他组件
|
||||
|
||||
除了路由组件之外,还有几个组件可用于提供有关路径的更多信息:
|
||||
除了上述组件属性之外,还有几个组件属性可用于提供有关路径的更多信息:
|
||||
|
||||
- `anticrawler`:如果目标网站有反爬机制,则设置为 `1`。
|
||||
- `puppeteer`:如果源使用 puppeteer 抓取,则设置为 `1`。
|
||||
|
|
@ -179,9 +231,9 @@ npm run start
|
|||
- `supportPodcast`:如果源支持播客,则设置为 `1`。
|
||||
- `supportScihub`:如果源支持 Sci-Hub,则设置为 `1`。
|
||||
|
||||
通过添加这些组件,您可以向用户提供有用的信息,并使其更易于理解和使用您的路由。将这些组件添加到路由文档中将在其前面添加一个徽章。
|
||||
通过添加这些属性,您可以向用户提供有用的信息,并使其更易于理解和使用您的路由。将这些属性添加到路由文档中将在其前面添加一个徽章。
|
||||
|
||||
```vue
|
||||
```tsx
|
||||
<Route author="HenryQW" example="/github/issue/DIYgod/RSSHub" path="/github/issue/:user/:repo?" paramsDesc={['GitHub 用户名', 'GitHub 仓库名称,默认为 `RSSHub`']} anticrawler="1" puppeteer="1" radar="1" rssbud="1" selfhost="1" supportBT="1" supportPodcast="1" supportScihub="1" />
|
||||
```
|
||||
|
||||
|
|
@ -200,26 +252,26 @@ npm run start
|
|||
- **别忘了关闭标签!**
|
||||
- 在提交 Pull Request 之前,请务必运行在 RSSHub 的根目录运行以下命令检查和格式化您的代码:
|
||||
|
||||
<code-group>
|
||||
<code-block title="pnpm" active>
|
||||
<Tabs groupId="package-manager">
|
||||
<TabItem value="pnpm" label="pnpm" active>
|
||||
|
||||
```bash
|
||||
pnpm run format
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="yarn">
|
||||
</TabItem>
|
||||
<TabItem value="yarn" label="yarn">
|
||||
|
||||
```bash
|
||||
yarn format
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="npm">
|
||||
</TabItem>
|
||||
<TabItem value="npm" label="npm">
|
||||
|
||||
```bash
|
||||
npm run format
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
|
|
|||
|
|
@ -10,57 +10,57 @@ sidebar_position: 2
|
|||
|
||||
开始之前,您需要安装 RSSHub 的依赖项。您可以在 RSSHub 的根目录下运行以下命令来完成安装:
|
||||
|
||||
<code-group>
|
||||
<code-block title="pnpm" active>
|
||||
<Tabs groupId="package-manager">
|
||||
<TabItem value="pnpm" label="pnpm" default>
|
||||
|
||||
```bash
|
||||
pnpm i
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="yarn">
|
||||
</TabItem>
|
||||
<TabItem value="yarn" label="yarn">
|
||||
|
||||
```bash
|
||||
yarn
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="npm">
|
||||
</TabItem>
|
||||
<TabItem value="npm" label="npm">
|
||||
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## 开始调试
|
||||
|
||||
一旦您成功安装了依赖,您可以通过运行以下命令来开始调试 RSSHub:
|
||||
|
||||
<code-group>
|
||||
<code-block title="pnpm" active>
|
||||
<Tabs groupId="package-manager">
|
||||
<TabItem value="pnpm" label="pnpm" default>
|
||||
|
||||
```bash
|
||||
pnpm run dev
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="yarn">
|
||||
</TabItem>
|
||||
<TabItem value="yarn" label="yarn">
|
||||
|
||||
```bash
|
||||
yarn dev
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="npm">
|
||||
</TabItem>
|
||||
<TabItem value="npm" label="npm">
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
请务必密切关注控制台输出的任何错误消息或其他有用的信息,这些信息可以帮助您诊断和解决问题。另外,如果您遇到任何困难,不要犹豫向 RSSHub 文档或社区寻求帮助。
|
||||
|
||||
|
|
@ -78,8 +78,10 @@ npm run dev
|
|||
|
||||
制作新的 RSS 路由的第一步是创建命名空间。命名空间应该与您制作 RSS 源的主要网站的二级域名**相同**。例如,如果您正在为 <https://github.com/DIYgod/RSSHub/issues> 制作 RSS 源,第二级域名是 `github`。因此,您应该在 `lib/v2` 下创建名为 `github` 的文件夹,作为您的 RSS 路由的命名空间。
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
在创建命名空间时,避免为同一命名空间的创建多个变体。例如,如果您为 `yahoo.co.jp` 和 `yahoo.com` 制作 RSS 源,则应该使用单个命名空间 `yahoo`,而不是创建多个命名空间如 `yahoo-jp`、`yahoojp`、`yahoo.jp`、`jp.yahoo`、`yahoocojp` 等。
|
||||
|
||||
:::
|
||||
|
||||
## 理解基础知识
|
||||
|
|
@ -90,26 +92,28 @@ npm run dev
|
|||
|
||||
例如,如果您为 [GitHub 仓库 Issues](/zh/routes/programming#github-yong-hu-cang-ku) 制作 RSS 源,并且假设您希望用户输入 GitHub 用户名和仓库名,如果他们没有输入仓库名,则返回到 `RSSHub`,您可以使用以下代码在 `github/router.js` 中注册您的新 RSS 路由:
|
||||
|
||||
<code-group>
|
||||
<code-block title="箭头函数" active>
|
||||
<Tabs>
|
||||
<TabItem value="Arrow Functions" label="箭头函数" active>
|
||||
|
||||
```js{2}
|
||||
```js
|
||||
module.exports = (router) => {
|
||||
// highlight-next-line
|
||||
router.get('/issue/:user/:repo?', require('./issue'));
|
||||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="传统函数">
|
||||
</TabItem>
|
||||
<TabItem value="Regular Functions" label="传统函数">
|
||||
|
||||
```js{2}
|
||||
```js
|
||||
module.exports = function (router) {
|
||||
// highlight-next-line
|
||||
router.get('/issue/:user/:repo?', require('./issue'));
|
||||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
在 `router.js` 中注册您的新 RSS 路由时,您可以定义路由路径并指定要执行的相应函数。在上面的代码中,`router.get()` 方法用于指定新的 RSS 路由的 HTTP 方法和路径。`router.get()` 的第一个参数是使用 [path-to-regexp](https://github.com/pillarjs/path-to-regexp) 语法的路由路径。第二个参数是您新的 RSS 规则 `issue.js` 中导出的函数。您可以省略 `.js` 扩展名。
|
||||
|
||||
|
|
@ -121,16 +125,19 @@ module.exports = function (router) {
|
|||
|
||||
您可以使用 `*` 或 `+` 符号来匹配路径的其余部分,例如 `/some/path/:variable*`。请注意,`*` 和 `+` 分别意味着“零个或多个”和“一个或多个”。您还可以使用模式,例如 `/some/path/:variable(\\d+)?`,甚至是正则表达式。
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
有关 `router` 的更高级用法,请参阅 [@koa/router API 参考文档](https://github.com/koajs/router/blob/master/API.md)。
|
||||
|
||||
:::
|
||||
|
||||
### maintainer.js
|
||||
|
||||
该文件用于存储 RSS 路由的维护者信息。您可以将您的 GitHub 用户名添加到该值数组中。请注意,此处的键应与 `router.js` 中的路径完全匹配:
|
||||
|
||||
```js{2}
|
||||
```js
|
||||
module.exports = {
|
||||
// highlight-next-line
|
||||
'/issue/:user/:repo?': ['DIYgod'],
|
||||
};
|
||||
```
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@ sidebar_position: 3
|
|||
|
||||
以下是让您开始的基本代码:
|
||||
|
||||
<code-group>
|
||||
<code-block title="issue.js">
|
||||
<Tabs>
|
||||
<TabItem value="issue.js" label="issue.js">
|
||||
|
||||
```js
|
||||
// 导入所需模组
|
||||
|
|
@ -40,18 +40,19 @@ module.exports = async (ctx) => {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
### 获取用户输入
|
||||
|
||||
如前所述,我们需要从用户输入中获取 GitHub 用户名和仓库名称。如果请求 URL 中未提供仓库名称,则应默认为 `RSSHub`。您可以使用以下代码实现:
|
||||
|
||||
<code-group>
|
||||
<code-block title="解构赋值" active>
|
||||
<Tabs>
|
||||
<TabItem value="Object destructuring" label="解构赋值" default>
|
||||
|
||||
```js{2}
|
||||
```js
|
||||
module.exports = async (ctx) => {
|
||||
// highlight-next-line
|
||||
const { user, repo = 'RSSHub' } = ctx.params;
|
||||
|
||||
ctx.state.data = {
|
||||
|
|
@ -60,13 +61,15 @@ module.exports = async (ctx) => {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="传统赋值">
|
||||
</TabItem>
|
||||
<TabItem value="Traditional assignment" label="传统赋值">
|
||||
|
||||
```js{2,3}
|
||||
```js
|
||||
module.exports = async (ctx) => {
|
||||
// highlight-start
|
||||
const user = ctx.params.user;
|
||||
const repo = ctx.params.repo ?? 'RSSHub';
|
||||
// highlight-end
|
||||
|
||||
ctx.state.data = {
|
||||
// 在此处输出您的 RSS
|
||||
|
|
@ -74,8 +77,8 @@ module.exports = async (ctx) => {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
这两个代码片段都执行相同的操作。第一个使用对象解构将 `user` 和 `repo` 变量赋值,而第二个使用传统赋值和空值合并运算符在请求 URL 中未提供它的情况下将 `repo` 变量分配默认值 `RSSHub`。
|
||||
|
||||
|
|
@ -83,12 +86,13 @@ module.exports = async (ctx) => {
|
|||
|
||||
在获取用户输入后,我们可以使用它向 API 发送请求。大多数情况下,您需要使用 `@/utils/got` 中的 `got`(一个自订的 [got](https://www.npmjs.com/package/got) 包装函数)发送 HTTP 请求。有关更多信息,请参阅 [got 文档](https://github.com/sindresorhus/got/tree/v11#usage)。
|
||||
|
||||
<code-group>
|
||||
<code-block title="解构赋值" active>
|
||||
<Tabs>
|
||||
<TabItem value="Object destructuring" label="解构赋值" default>
|
||||
|
||||
```js{3-14}
|
||||
```js
|
||||
module.exports = async (ctx) => {
|
||||
const { user, repo = 'RSSHub' } = ctx.params;
|
||||
// highlight-start
|
||||
// 发送 HTTP GET 请求到 API 并解构返回的数据对象
|
||||
const { data } = await got(`https://api.github.com/repos/${user}/${repo}/issues`, {
|
||||
headers: {
|
||||
|
|
@ -101,6 +105,7 @@ module.exports = async (ctx) => {
|
|||
per_page: ctx.query.limit ? parseInt(ctx.query.limit, 10) : 30,
|
||||
},
|
||||
});
|
||||
// highlight-end
|
||||
|
||||
ctx.state.data = {
|
||||
// 在此处输出您的 RSS
|
||||
|
|
@ -108,13 +113,14 @@ module.exports = async (ctx) => {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="传统赋值">
|
||||
</TabItem>
|
||||
<TabItem value="Traditional assignment" label="传统赋值">
|
||||
|
||||
```js{4-14}
|
||||
```js
|
||||
module.exports = async (ctx) => {
|
||||
const user = ctx.params.user;
|
||||
const repo = ctx.params.repo ?? 'RSSHub';
|
||||
// highlight-start
|
||||
// 发送 HTTP GET 请求到 API
|
||||
const response = await got(`https://api.github.com/repos/${user}/${repo}/issues`, {
|
||||
headers: {
|
||||
|
|
@ -126,6 +132,7 @@ module.exports = async (ctx) => {
|
|||
});
|
||||
// response.data 是上述请求返回的数据对象
|
||||
const data = response.data;
|
||||
// highlight-end
|
||||
|
||||
ctx.state.data = {
|
||||
// 在此处输出您的 RSS
|
||||
|
|
@ -133,8 +140,8 @@ module.exports = async (ctx) => {
|
|||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
### 生成 RSS 源
|
||||
|
||||
|
|
@ -144,10 +151,10 @@ module.exports = async (ctx) => {
|
|||
|
||||
以下是应有的最终代码:
|
||||
|
||||
<code-group>
|
||||
<code-block title="最终代码" active>
|
||||
<Tabs>
|
||||
<TabItem value="Final code" label="最终代码" default>
|
||||
|
||||
```js{16-30,32-39}
|
||||
```js
|
||||
const got = require('@/utils/got');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
|
||||
|
|
@ -163,6 +170,7 @@ module.exports = async (ctx) => {
|
|||
},
|
||||
});
|
||||
|
||||
// highlight-start
|
||||
// 从 API 响应中提取相关数据
|
||||
const items = data.map((item) => ({
|
||||
// 文章标题
|
||||
|
|
@ -179,6 +187,7 @@ module.exports = async (ctx) => {
|
|||
category: item.labels.map((label) => label.name),
|
||||
}));
|
||||
|
||||
// highlight-start
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `${user}/${repo} issues`,
|
||||
|
|
@ -187,13 +196,14 @@ module.exports = async (ctx) => {
|
|||
// 源文章
|
||||
item: items,
|
||||
};
|
||||
// highlight-end
|
||||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="替代代码">
|
||||
</TabItem>
|
||||
<TabItem value="Alternative" label="替代代码">
|
||||
|
||||
```js{16-36}
|
||||
```js
|
||||
const got = require('@/utils/got');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
|
||||
|
|
@ -209,6 +219,7 @@ module.exports = async (ctx) => {
|
|||
},
|
||||
});
|
||||
|
||||
// highlight-start
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `${user}/${repo} issues`,
|
||||
|
|
@ -230,11 +241,12 @@ module.exports = async (ctx) => {
|
|||
category: item.labels.map((label) => label.name),
|
||||
}));
|
||||
};
|
||||
// highlight-end
|
||||
};
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
## 通过 got 从 HTML 获取数据
|
||||
|
||||
|
|
@ -267,10 +279,12 @@ module.exports = async (ctx) => {
|
|||
|
||||
如前所述,我们需要从用户输入中获取 GitHub 用户名和仓库名称。如果请求 URL 中未提供仓库名称,则应默认为 `RSSHub`。您可以使用以下代码实现:
|
||||
|
||||
```js{2-3}
|
||||
```js
|
||||
module.exports = async (ctx) => {
|
||||
// highlight-start
|
||||
// 从 URL 参数中获取用户名和仓库名称
|
||||
const { user, repo = 'RSSHub' } = ctx.params;
|
||||
// highlight-end
|
||||
|
||||
ctx.state.data = {
|
||||
// 在此处输出您的 RSS
|
||||
|
|
@ -286,20 +300,23 @@ module.exports = async (ctx) => {
|
|||
|
||||
首先,我们将向 API 发送 HTTP GET 请求,并将 HTML 响应加载到 Cheerio 中,Cheerio 是一个帮助我们解析和操作 HTML 的库。
|
||||
|
||||
```js{5-6}
|
||||
```js
|
||||
const baseUrl = 'https://github.com';
|
||||
const { user, repo = 'RSSHub' } = ctx.params;
|
||||
|
||||
// 注意,".data" 属性包含了请求返回的目标页面的完整 HTML 源代码
|
||||
// highlight-start
|
||||
const { data: response } = await got(`${baseUrl}/${user}/${repo}/issues`);
|
||||
const $ = cheerio.load(response);
|
||||
// highlight-end
|
||||
```
|
||||
|
||||
接下来,我们将使用 Cheerio 选择器选择相关的 HTML 元素,解析我们需要的数据,并将其转换为数组。
|
||||
|
||||
```js{3-21}
|
||||
```js
|
||||
// 我们使用 Cheerio 选择器选择所有带类名“js-navigation-container”的“div”元素,
|
||||
// 其中包含带类名“flex-auto”的子元素。
|
||||
// highlight-start
|
||||
const item = $('div.js-navigation-container .flex-auto')
|
||||
// 使用“toArray()”方法将选择的所有 DOM 元素以数组的形式返回。
|
||||
.toArray()
|
||||
|
|
@ -319,6 +336,7 @@ module.exports = async (ctx) => {
|
|||
.map((item) => $(item).text()),
|
||||
};
|
||||
});
|
||||
// highlight-end
|
||||
|
||||
ctx.state.data = {
|
||||
// 在此处输出您的 RSS
|
||||
|
|
@ -333,7 +351,7 @@ module.exports = async (ctx) => {
|
|||
|
||||
以下是应有的最终代码:
|
||||
|
||||
```js{29-36}
|
||||
```js
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
|
|
@ -362,6 +380,7 @@ module.exports = async (ctx) => {
|
|||
};
|
||||
});
|
||||
|
||||
// highlight-start
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `${user}/${repo} issues`,
|
||||
|
|
@ -370,6 +389,7 @@ module.exports = async (ctx) => {
|
|||
// 源文章
|
||||
item: items,
|
||||
};
|
||||
// highlight-end
|
||||
};
|
||||
```
|
||||
|
||||
|
|
@ -379,7 +399,7 @@ module.exports = async (ctx) => {
|
|||
|
||||
以下是更新后的代码:
|
||||
|
||||
```js{12,29-43,48}
|
||||
```js
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
|
|
@ -391,6 +411,7 @@ module.exports = async (ctx) => {
|
|||
const { data: response } = await got(`${baseUrl}/${user}/${repo}/issues`);
|
||||
const $ = cheerio.load(response);
|
||||
|
||||
// highlight-next-line
|
||||
const list = $('div.js-navigation-container .flex-auto')
|
||||
.toArray()
|
||||
.map((item) => {
|
||||
|
|
@ -408,6 +429,7 @@ module.exports = async (ctx) => {
|
|||
};
|
||||
});
|
||||
|
||||
// highlight-start
|
||||
const items = await Promise.all(
|
||||
list.map((item) =>
|
||||
ctx.cache.tryGet(item.link, async () => {
|
||||
|
|
@ -423,10 +445,12 @@ module.exports = async (ctx) => {
|
|||
})
|
||||
)
|
||||
);
|
||||
// highlight-end
|
||||
|
||||
ctx.state.data = {
|
||||
title: `${user}/${repo} issues`,
|
||||
link: `https://github.com/${user}/${repo}/issues`,
|
||||
// highlight-next-line
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -435,10 +459,12 @@ module.exports = async (ctx) => {
|
|||
|
||||
现在,这个 RSS 源将具有类似于原始网站的阅读体验。
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
请注意,在先前的部分中,我们仅需向 API 发送一个 HTTP 请求即可获得所需的所有数据。然而,在此部分中,我们需要发送 `1 + n` 个 HTTP 请求,其中 `n` 是从第一个请求获取的文章列表中的数量。
|
||||
|
||||
部分网站可能不喜欢在短时间内接收大量请求,并返回类似于“429 Too Many Requests”的错误。
|
||||
|
||||
:::
|
||||
|
||||
## 使用通用配置路由
|
||||
|
|
@ -476,7 +502,7 @@ module.exports = async (ctx) => {
|
|||
我们的 RSS 订阅源目前缺少内容。必须设置 `item` 才能添加内容。以下是一个示例:
|
||||
|
||||
|
||||
```js{15-22}
|
||||
```js
|
||||
const buildData = require('@/utils/common-config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
@ -491,6 +517,7 @@ module.exports = async (ctx) => {
|
|||
title: `${user}/${repo} issues`,
|
||||
baseUrl: 'https://github.com',
|
||||
},
|
||||
// highlight-start
|
||||
item: {
|
||||
item: 'div.js-navigation-container .flex-auto',
|
||||
// 如果要使用变量,必须使用模板字符串
|
||||
|
|
@ -499,6 +526,7 @@ module.exports = async (ctx) => {
|
|||
// description: ..., 目前没有文章正文
|
||||
pubDate: `parseDate($('relative-time').attr('datetime'))`,
|
||||
},
|
||||
// highlight-end
|
||||
});
|
||||
};
|
||||
```
|
||||
|
|
@ -509,10 +537,12 @@ module.exports = async (ctx) => {
|
|||
|
||||
要获取每个 GitHub Issue 的正文,你需要添加一些代码。以下是一个示例:
|
||||
|
||||
```js{2-3,25-34}
|
||||
```js
|
||||
const buildData = require('@/utils/common-config');
|
||||
// highlight-start
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
// highlight-end
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const { user, repo = 'RSSHub' } = ctx.params;
|
||||
|
|
@ -534,6 +564,7 @@ module.exports = async (ctx) => {
|
|||
},
|
||||
});
|
||||
|
||||
// highlight-start
|
||||
await Promise.all(
|
||||
ctx.state.data.item.map((item) =>
|
||||
ctx.cache.tryGet(item.link, async () => {
|
||||
|
|
@ -544,6 +575,7 @@ module.exports = async (ctx) => {
|
|||
})
|
||||
)
|
||||
);
|
||||
// highlight-end
|
||||
};
|
||||
```
|
||||
|
||||
|
|
@ -576,10 +608,10 @@ module.exports = async (ctx) => {
|
|||
|
||||
现在,我们将使用 `puppeteer` 代替 `got` 来从网页获取数据。
|
||||
|
||||
<code-group>
|
||||
<code-block title="puppeteer">
|
||||
<Tabs>
|
||||
<TabItem value="puppeteer" label="puppeteer">
|
||||
|
||||
```js{9-33,39-40}
|
||||
```js
|
||||
const cheerio = require('cheerio');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
const logger = require('@/utils/logger');
|
||||
|
|
@ -588,6 +620,7 @@ module.exports = async (ctx) => {
|
|||
const baseUrl = 'https://github.com';
|
||||
const { user, repo = 'RSSHub' } = ctx.params;
|
||||
|
||||
// highlight-start
|
||||
// 导入 puppeteer 工具类并初始化浏览器实例
|
||||
const browser = await require('@/utils/puppeteer')();
|
||||
// 打开一个新标签页
|
||||
|
|
@ -613,13 +646,16 @@ module.exports = async (ctx) => {
|
|||
const response = await page.content();
|
||||
// 关闭标签页
|
||||
page.close();
|
||||
// highlight-end
|
||||
|
||||
const $ = cheerio.load(response);
|
||||
|
||||
// const item = ...;
|
||||
|
||||
// highlight-start
|
||||
// 不要忘记关闭浏览器实例
|
||||
browser.close();
|
||||
// highlight-end
|
||||
|
||||
ctx.state.data = {
|
||||
// 在此处输出您的 RSS
|
||||
|
|
@ -627,10 +663,10 @@ module.exports = async (ctx) => {
|
|||
}
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="got">
|
||||
</TabItem>
|
||||
<TabItem value="got" label="got">
|
||||
|
||||
```js{9}
|
||||
```js
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
|
|
@ -639,6 +675,7 @@ module.exports = async (ctx) => {
|
|||
const baseUrl = 'https://github.com';
|
||||
const { user, repo = 'RSSHub' } = ctx.params;
|
||||
|
||||
// highlight-next-line
|
||||
const { data: response } = await got(`${baseUrl}/${user}/${repo}/issues`);
|
||||
const $ = cheerio.load(response);
|
||||
|
||||
|
|
@ -648,14 +685,14 @@ module.exports = async (ctx) => {
|
|||
}
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
### 获取完整文章
|
||||
|
||||
使用浏览器新标签页获取每个 GitHub Issue 的正文,类似于 [上一节](#tong-guo-got-cong-html-huo-qu-shu-ju-geng-hao-de-yue-du-ti-yan)。我们可以使用以下代码:
|
||||
|
||||
```js{46-60,71-72}
|
||||
```js
|
||||
const cheerio = require('cheerio');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
const logger = require('@/utils/logger');
|
||||
|
|
@ -701,6 +738,7 @@ module.exports = async (ctx) => {
|
|||
const items = await Promise.all(
|
||||
list.map((item) =>
|
||||
ctx.cache.tryGet(item.link, async () => {
|
||||
// highlight-start
|
||||
// 重用浏览器实例并打开新标签页
|
||||
const page = await browser.newPage();
|
||||
// 设置请求拦截,仅允许 HTML 请求
|
||||
|
|
@ -716,6 +754,7 @@ module.exports = async (ctx) => {
|
|||
const response = await page.content();
|
||||
// 获取 HTML 内容后关闭标签页
|
||||
page.close();
|
||||
// highlight-end
|
||||
|
||||
const $ = cheerio.load(response);
|
||||
|
||||
|
|
@ -726,8 +765,10 @@ module.exports = async (ctx) => {
|
|||
)
|
||||
);
|
||||
|
||||
// highlight-start
|
||||
// 所有请求完成后关闭浏览器实例
|
||||
browser.close();
|
||||
// highlight-end
|
||||
|
||||
ctx.state.data = {
|
||||
title: `${user}/${repo} issues`,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# 通用参数
|
||||
|
||||
:::tip 提示
|
||||
:::tip
|
||||
|
||||
通用参数实际上是 URI 中的 query,可以使用 `&` 连接组合使用,效果叠加。
|
||||
|
||||
|
|
@ -41,13 +41,13 @@ https://rsshub.app/twitter/user/durov/
|
|||
|
||||
## 内容过滤
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
请务必显式进行[彻底的 URL 编码](https://gchq.github.io/CyberChef/#recipe=URL_Encode\(true\))。切勿依赖浏览器的自动 URL 编码,某些字符,如 `+`, `&`,将不会被自动编码,进而导致最终解析结果不正确。
|
||||
|
||||
:::
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
filter 支持正则表达式。由于正则部分特性可被利用于 DoS (ReDOS),默认引擎`re2`屏蔽了部分`Regexp`功能,且在部分情况下表现不一致。具体差异可以[查看文档](https://github.com/uhop/node-re2#limitations-things-re2-does-not-support)
|
||||
|
||||
|
|
@ -142,7 +142,7 @@ Telegram 即时预览模式需要在官网制作页面处理模板,请前往[
|
|||
|
||||
## 多媒体处理
|
||||
|
||||
:::caution 注意
|
||||
:::caution
|
||||
|
||||
这是个测试中的 API
|
||||
|
||||
|
|
|
|||
|
|
@ -22,29 +22,29 @@ RSSHub 的发展离不开社区的力量,欢迎编写你感兴趣的订阅源[
|
|||
|
||||
### 安装
|
||||
|
||||
<code-group>
|
||||
<code-block title="pnpm" active>
|
||||
<Tabs groupId="package-manager">
|
||||
<TabItem value="pnpm" label="pnpm" default>
|
||||
|
||||
```bash
|
||||
pnpm add rsshub
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="yarnv1">
|
||||
</TabItem>
|
||||
<TabItem value="yarn" label="yarnv1">
|
||||
|
||||
```bash
|
||||
yarn add rsshub
|
||||
```
|
||||
|
||||
</code-block>
|
||||
<code-block title="npm">
|
||||
</TabItem>
|
||||
<TabItem value="npm" label="npm">
|
||||
|
||||
```bash
|
||||
npm install rsshub --save
|
||||
```
|
||||
|
||||
</code-block>
|
||||
</code-group>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
### 使用
|
||||
|
||||
|
|
|
|||
|
|
@ -45,29 +45,121 @@ const sidebars = {
|
|||
description: 'Routes are the access paths of RSSHub. Each route contains a RSSHub rule, which tells RSSHub how to extract content from the website and generate RSS subscription.',
|
||||
},
|
||||
items: [
|
||||
'routes/social-media',
|
||||
'routes/new-media',
|
||||
'routes/traditional-media',
|
||||
'routes/bbs',
|
||||
'routes/blog',
|
||||
'routes/programming',
|
||||
'routes/design',
|
||||
'routes/live',
|
||||
'routes/multimedia',
|
||||
'routes/picture',
|
||||
'routes/anime',
|
||||
'routes/program-update',
|
||||
'routes/university',
|
||||
'routes/forecast',
|
||||
'routes/travel',
|
||||
'routes/shopping',
|
||||
'routes/game',
|
||||
'routes/reading',
|
||||
'routes/government',
|
||||
'routes/study',
|
||||
'routes/journal',
|
||||
'routes/finance',
|
||||
'routes/other',
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/social-media',
|
||||
label: '💬 Social Media',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/new-media',
|
||||
label: '📱 New media',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/traditional-media',
|
||||
label: '📰 News',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/bbs',
|
||||
label: '💬️ BBS',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/blog',
|
||||
label: '🖊️️ Blog',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/programming',
|
||||
label: '💻 Programming',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/design',
|
||||
label: '🎨️ Design',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/live',
|
||||
label: '🎥 Live',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/multimedia',
|
||||
label: '🔊 Multimedia',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/picture',
|
||||
label: '🖼️ Picture',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/anime',
|
||||
label: '🎨️ ACG',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/program-update',
|
||||
label: '🔄 Application Updates',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/university',
|
||||
label: '🎓 University',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/forecast',
|
||||
label: '❗️ Forecast and Alerts',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/travel',
|
||||
label: '🛫 Travel',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/shopping',
|
||||
label: '🛍️ Shopping',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/game',
|
||||
label: '🎮 Gaming',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/reading',
|
||||
label: '📚 Reading',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/government',
|
||||
label: '📢 Government',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/study',
|
||||
label: '📖 Study',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/journal',
|
||||
label: '🔬 Scientific Journal',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/finance',
|
||||
label: '💰 Finance',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'routes/other',
|
||||
label: '🔍 Uncategorized',
|
||||
},
|
||||
],
|
||||
collapsible: false,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
import MDXComponents from '@theme-original/MDXComponents';
|
||||
import Badge from '@site/src/components/Badge';
|
||||
import Route from '@site/src/components/Route';
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
|
||||
// https://docusaurus.io/docs/markdown-features/react#mdx-component-scope
|
||||
export default {
|
||||
...MDXComponents,
|
||||
Badge,
|
||||
Route,
|
||||
Tabs,
|
||||
TabItem,
|
||||
};
|
||||
Loading…
Reference in New Issue