mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-11 15:47:48 +08:00
@@ -415,3 +415,7 @@ RSSHub 支持 `memory` 和 `redis` 两种缓存方式
|
||||
- 邮箱 邮件列表路由:
|
||||
|
||||
- `EMAIL_CONFIG_{email}`: 邮箱设置,替换 `{email}` 为 邮箱账号,邮件账户的 `@` 替换为 `.`,例如 `EMAIL_CONFIG_xxx.qq.com`。内容格式为 `password=密码&host=服务器&port=端口`,例如 `password=123456&host=imap.qq.com&port=993`。
|
||||
|
||||
- 吹牛部落 栏目更新
|
||||
|
||||
- `CHUINIU_MEMBER`: 吹牛部落登录后的 x-member,获取方式:1. 登陆后点开文章正文 2. 打开控制台 3. 刷新 4. 找到 <http://api.duanshu.com/h5/content/detail/> 开头的请求 5. 找到请求头中的 x-member
|
||||
|
||||
@@ -52,6 +52,18 @@ pageClass: routes
|
||||
|
||||
</Route>
|
||||
|
||||
## 吹牛部落
|
||||
|
||||
### 栏目
|
||||
|
||||
<Route author="LogicJake" example="/chuiniu/column/0b1c4cf6e7f24e8da11e37882de73704" path="/chuiniu/column/:id" :paramsDesc="['栏目 id, 可在对应栏目页 URL 中找到']">
|
||||
|
||||
::: warning 注意
|
||||
|
||||
正文内容需要用户登录后的 x-member 值,详情见部署页面的配置模块。若无相关配置或 x-member 失效,则只显示文章摘要。
|
||||
:::
|
||||
</Route>
|
||||
|
||||
## 刺猬猫
|
||||
|
||||
### 章节
|
||||
|
||||
@@ -89,4 +89,7 @@ module.exports = {
|
||||
config: email_config,
|
||||
},
|
||||
sentry: process.env.SENTRY,
|
||||
chuiniu: {
|
||||
member: process.env.CHUINIU_MEMBER,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1710,4 +1710,7 @@ router.get('/pintu360/:type?', require('./routes/pintu360/index'));
|
||||
// engadget中国版
|
||||
router.get('/engadget-cn', require('./routes/engadget-cn/home'));
|
||||
|
||||
// 吹牛部落
|
||||
router.get('/chuiniu/column/:id', require('./routes/chuiniu/column'));
|
||||
|
||||
module.exports = router;
|
||||
|
||||
88
lib/routes/chuiniu/column.js
Normal file
88
lib/routes/chuiniu/column.js
Normal file
@@ -0,0 +1,88 @@
|
||||
const got = require('@/utils/got');
|
||||
const config = require('@/config');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const url = 'http://chuiniu.duanshu.com';
|
||||
const column_id = ctx.params.id;
|
||||
|
||||
let response = await got({
|
||||
method: 'get',
|
||||
url: 'http://api.duanshu.com/fairy/api/v1/shop/identifier/',
|
||||
headers: {
|
||||
Origin: url,
|
||||
Referer: url,
|
||||
},
|
||||
});
|
||||
const shop_id = response.data.shop_id;
|
||||
|
||||
response = await got({
|
||||
method: 'get',
|
||||
url: `http://api.duanshu.com/h5/content/free/column/detail/${column_id}?shop_id=${shop_id}`,
|
||||
headers: {
|
||||
Referer: url,
|
||||
},
|
||||
});
|
||||
const title = response.data.response.data.title;
|
||||
const description = response.data.response.data.brief;
|
||||
|
||||
response = await got({
|
||||
method: 'get',
|
||||
url: `http://api.duanshu.com/h5/content/column/contents?page=1&count=10&column_id=${column_id}&shop_id=${shop_id}`,
|
||||
headers: {
|
||||
Referer: url,
|
||||
},
|
||||
});
|
||||
const list = response.data.response.data;
|
||||
|
||||
const out = await Promise.all(
|
||||
list.map(async (item) => {
|
||||
const title = item.title;
|
||||
const brief = item.brief;
|
||||
const up_time = item.up_time;
|
||||
const content_id = item.content_id;
|
||||
const item_link = `http://chuiniu.duanshu.com/#/brief/article/${content_id}`;
|
||||
|
||||
const cache = await ctx.cache.get(item_link);
|
||||
if (cache) {
|
||||
return Promise.resolve(JSON.parse(cache));
|
||||
}
|
||||
|
||||
const member = config.chuiniu.member;
|
||||
let content;
|
||||
if (member === undefined) {
|
||||
content = brief + '<br>...<br>正文内容需会员登录后查看';
|
||||
} else {
|
||||
try {
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: `http://api.duanshu.com/h5/content/detail/${content_id}?shop_id=${shop_id}`,
|
||||
headers: {
|
||||
Referer: url,
|
||||
'x-member': member,
|
||||
},
|
||||
});
|
||||
content = response.data.response.data.content;
|
||||
} catch (error) {
|
||||
content = brief + '<br>...<br>正文内容需会员登录后查看';
|
||||
}
|
||||
}
|
||||
|
||||
const single = {
|
||||
pubDate: new Date(up_time).toUTCString(),
|
||||
link: item_link,
|
||||
title: title,
|
||||
description: content,
|
||||
};
|
||||
|
||||
ctx.cache.set(item_link, JSON.stringify(single));
|
||||
return Promise.resolve(single);
|
||||
})
|
||||
);
|
||||
|
||||
ctx.state.data = {
|
||||
title,
|
||||
description,
|
||||
link: url,
|
||||
item: out,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user