diff --git a/docs/blog.md b/docs/blog.md index 1e72b261e..ef6947dac 100644 --- a/docs/blog.md +++ b/docs/blog.md @@ -72,6 +72,10 @@ pageClass: routes +## WordPress + + + ## 阿里云系统组技术博客 ### 首页 diff --git a/lib/router.js b/lib/router.js index 472fcbdb5..8a90b1bb6 100644 --- a/lib/router.js +++ b/lib/router.js @@ -1411,6 +1411,9 @@ router.get('/blogs/wangyin', require('./routes/blogs/wangyin')); // 王五四文集 router.get('/blogs/wang54/:id?', require('./routes/blogs/wang54')); +// WordPress +router.get('/blogs/wordpress/:domain/:https?', require('./routes/blogs/wordpress')); + // 裏垢女子まとめ router.get('/uraaka-joshi', require('./routes/uraaka-joshi/uraaka-joshi')); router.get('/uraaka-joshi/:id', require('./routes/uraaka-joshi/uraaka-joshi-user')); diff --git a/lib/routes/blogs/wordpress.js b/lib/routes/blogs/wordpress.js new file mode 100644 index 000000000..f05fe6287 --- /dev/null +++ b/lib/routes/blogs/wordpress.js @@ -0,0 +1,30 @@ +const parser = require('@/utils/rss-parser'); + +module.exports = async (ctx) => { + const scheme = ctx.params.https || 'https'; + const domain = `${scheme}://${ctx.params.domain}`; + const feed = await parser.parseURL(`${domain}/feed/`); + const items = await Promise.all( + feed.items.map(async (item) => { + const cache = await ctx.cache.get(item.link); + if (cache) { + return Promise.resolve(JSON.parse(cache)); + } + const article = { + title: item.title, + description: item['content:encoded'], + pubDate: item.pubDate, + link: item.link, + author: item.creator, + }; + return Promise.resolve(article); + }) + ); + + ctx.state.data = { + title: feed.title, + link: feed.link, + description: feed.description, + item: items, + }; +};