From 8bd8c2db4f1c55484242a45f87ba0acc51e2bba3 Mon Sep 17 00:00:00 2001
From: Fatpandac <1779196284@qq.com>
Date: Sun, 13 Feb 2022 21:24:26 +0800
Subject: [PATCH] fix(route): youzhiyouxing/materials get full text and
refactor to V2 (#9082)
---
docs/finance.md | 8 ++-
lib/router.js | 3 +-
lib/routes/youzhiyouxing/materials.js | 29 -----------
lib/v2/youzhiyouxing/maintainer.js | 3 ++
lib/v2/youzhiyouxing/materials.js | 46 +++++++++++++++++
lib/v2/youzhiyouxing/radar.js | 73 +++++++++++++++++++++++++++
lib/v2/youzhiyouxing/router.js | 3 ++
7 files changed, 133 insertions(+), 32 deletions(-)
delete mode 100644 lib/routes/youzhiyouxing/materials.js
create mode 100644 lib/v2/youzhiyouxing/maintainer.js
create mode 100644 lib/v2/youzhiyouxing/materials.js
create mode 100644 lib/v2/youzhiyouxing/radar.js
create mode 100644 lib/v2/youzhiyouxing/router.js
diff --git a/docs/finance.md b/docs/finance.md
index f5b2ab6344..92b25bb5e2 100644
--- a/docs/finance.md
+++ b/docs/finance.md
@@ -277,7 +277,13 @@ pageClass: routes
### 有知文章
-
+
+
+| 全部 | 知行小酒馆 | 知行黑板报 | 无人知晓 | 孟岩专栏 | 知行读书会 | 你好,同路人 |
+| :--: | :--------: | :--------: | :------: | :------: | :--------: | :----------: |
+| 0 | 4 | 2 | 10 | 1 | 3 | 11 |
+
+
## 证券时报网
diff --git a/lib/router.js b/lib/router.js
index c6068343e4..54d6845606 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -2057,8 +2057,7 @@ router.get('/weidian/goods/:id', lazyloadRouteHandler('./routes/weidian/goods'))
// 有赞
router.get('/youzan/goods/:id', lazyloadRouteHandler('./routes/youzan/goods'));
-// 有知有行
-router.get('/youzhiyouxing/materials', lazyloadRouteHandler('./routes/youzhiyouxing/materials'));
+
// 币世界快讯
router.get('/bishijie/kuaixun', lazyloadRouteHandler('./routes/bishijie/kuaixun'));
diff --git a/lib/routes/youzhiyouxing/materials.js b/lib/routes/youzhiyouxing/materials.js
deleted file mode 100644
index e96a6706a5..0000000000
--- a/lib/routes/youzhiyouxing/materials.js
+++ /dev/null
@@ -1,29 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const link = `https://youzhiyouxing.cn/materials`;
- const response = await got({
- method: 'get',
- url: link,
- });
- const $ = cheerio.load(response.data);
- const list = $('[phx-click=material]');
- const resData = {
- title: '有知有行 - 有知',
- link,
- description: '有知有行 - 有知',
- item: list
- .map((_index, item) => {
- const $item = $(item);
- const res = {
- title: $item.find('.title-bar > h3').text(),
- description: $item.find('.sm-text').text(),
- link: `https://youzhiyouxing.cn/materials/${$item.attr('phx-value-id')}`,
- };
- return res;
- })
- .get(),
- };
- ctx.state.data = resData;
-};
diff --git a/lib/v2/youzhiyouxing/maintainer.js b/lib/v2/youzhiyouxing/maintainer.js
new file mode 100644
index 0000000000..5d519098d4
--- /dev/null
+++ b/lib/v2/youzhiyouxing/maintainer.js
@@ -0,0 +1,3 @@
+module.exports = {
+ '/materials/:column?': ['broven', 'Fatpandac'],
+};
diff --git a/lib/v2/youzhiyouxing/materials.js b/lib/v2/youzhiyouxing/materials.js
new file mode 100644
index 0000000000..ac1aec964e
--- /dev/null
+++ b/lib/v2/youzhiyouxing/materials.js
@@ -0,0 +1,46 @@
+const got = require('@/utils/got');
+const cheerio = require('cheerio');
+const { parseDate } = require('@/utils/parse-date');
+
+const rootUrl = 'https://youzhiyouxing.cn';
+
+module.exports = async (ctx) => {
+ const column = ctx.params.column ?? '0';
+ const limit = ctx.query.limit ? parseInt(ctx.query.limit) : 30;
+ const url = `${rootUrl}/materials?column=${column}&limit=${limit}`;
+
+ const response = await got(url);
+ const $ = cheerio.load(response.data);
+ const title = $(`a[phx-value-column="${column}"]`).text() === '' ? '全部' : $(`a[phx-value-column="${column}"]`).text();
+ const list = $('[phx-click=material]')
+ .map((_, item) => ({
+ title: $(item).find('h3').text(),
+ link: `${rootUrl}/materials/${$(item).attr('phx-value-id')}`,
+ pubDate: parseDate($(item).find('div.xs-text.muted-text.tw-text-right').text(), ['YYYY年M月D日', 'M月D日']),
+ }))
+ .get();
+
+ const items = await Promise.all(
+ list.map((item) =>
+ ctx.cache.tryGet(item.link, async () => {
+ const detailResponse = await got(item.link);
+ const content = cheerio.load(detailResponse.data);
+
+ item.description = content('#zx-rangy-root')
+ .html()
+ .replace(/()/g, '$1 data$2')
+ .replace(/()/g, '$1 src$2');
+ item.author = content('span.tw-inline').text().replace('·', '');
+
+ return item;
+ })
+ )
+ );
+
+ ctx.state.data = {
+ title: `有知有行 - ${title}`,
+ link: url,
+ description: `有知有行 - ${title}`,
+ item: items,
+ };
+};
diff --git a/lib/v2/youzhiyouxing/radar.js b/lib/v2/youzhiyouxing/radar.js
new file mode 100644
index 0000000000..112c13c920
--- /dev/null
+++ b/lib/v2/youzhiyouxing/radar.js
@@ -0,0 +1,73 @@
+module.exports = {
+ 'youzhiyouxing.cn': {
+ _name: '有知有行',
+ '.': [
+ {
+ title: '有知 - 全部',
+ docs: 'https://docs.rsshub.app/finance.html#you-you-wei-zhi-zhi-you-you-wei-xing-hang-xing-hang-heng-you-you-wei-zhi-zhi-wen-zhang-zhang',
+ source: ['/materials'],
+ target: '/youzhiyouxing/materials',
+ },
+ {
+ title: '有知 - 知行小酒馆',
+ docs: 'https://docs.rsshub.app/finance.html#you-you-wei-zhi-zhi-you-you-wei-xing-hang-xing-hang-heng-you-you-wei-zhi-zhi-wen-zhang-zhang',
+ source: ['/materials'],
+ target: (_params, url) => {
+ if (new URL(url).searchParams.get('column') === '4') {
+ return '/youzhiyouxing/materials/4';
+ }
+ },
+ },
+ {
+ title: '有知 - 知行黑板报',
+ docs: 'https://docs.rsshub.app/finance.html#you-you-wei-zhi-zhi-you-you-wei-xing-hang-xing-hang-heng-you-you-wei-zhi-zhi-wen-zhang-zhang',
+ source: ['/materials'],
+ target: (_params, url) => {
+ if (new URL(url).searchParams.get('column') === '2') {
+ return '/youzhiyouxing/materials/2';
+ }
+ },
+ },
+ {
+ title: '有知 - 无人知晓',
+ docs: 'https://docs.rsshub.app/finance.html#you-you-wei-zhi-zhi-you-you-wei-xing-hang-xing-hang-heng-you-you-wei-zhi-zhi-wen-zhang-zhang',
+ source: ['/materials'],
+ target: (_params, url) => {
+ if (new URL(url).searchParams.get('column') === '10') {
+ return '/youzhiyouxing/materials/10';
+ }
+ },
+ },
+ {
+ title: '有知 - 孟岩专栏',
+ docs: 'https://docs.rsshub.app/finance.html#you-you-wei-zhi-zhi-you-you-wei-xing-hang-xing-hang-heng-you-you-wei-zhi-zhi-wen-zhang-zhang',
+ source: ['/materials'],
+ target: (_params, url) => {
+ if (new URL(url).searchParams.get('column') === '1') {
+ return '/youzhiyouxing/materials/1';
+ }
+ },
+ },
+ {
+ title: '有知 - 知行读书会',
+ docs: 'https://docs.rsshub.app/finance.html#you-you-wei-zhi-zhi-you-you-wei-xing-hang-xing-hang-heng-you-you-wei-zhi-zhi-wen-zhang-zhang',
+ source: ['/materials'],
+ target: (_params, url) => {
+ if (new URL(url).searchParams.get('column') === '3') {
+ return '/youzhiyouxing/materials/3';
+ }
+ },
+ },
+ {
+ title: '有知 - 你好,同路人',
+ docs: 'https://docs.rsshub.app/finance.html#you-you-wei-zhi-zhi-you-you-wei-xing-hang-xing-hang-heng-you-you-wei-zhi-zhi-wen-zhang-zhang',
+ source: ['/materials'],
+ target: (_params, url) => {
+ if (new URL(url).searchParams.get('column') === '11') {
+ return '/youzhiyouxing/materials/11';
+ }
+ },
+ },
+ ],
+ },
+};
diff --git a/lib/v2/youzhiyouxing/router.js b/lib/v2/youzhiyouxing/router.js
new file mode 100644
index 0000000000..01d969746c
--- /dev/null
+++ b/lib/v2/youzhiyouxing/router.js
@@ -0,0 +1,3 @@
+module.exports = function (router) {
+ router.get('/materials/:column?', require('./materials'));
+};