feat(route): add hashnode 用户博客 (#9987)

* 添加hashnode用户posts获取

* fix(route)(hashnode): update route v1 to v2

* fix(route)(hashnode): 优化代码名称和完善doc

* update parseDate function

Co-authored-by: wenhao <wenhao@mafengwo.com>
This commit is contained in:
Leo
2022-06-20 12:05:58 +08:00
committed by GitHub
parent 303b91ffec
commit e8266add8f
6 changed files with 96 additions and 0 deletions

62
lib/v2/hashnode/blog.js Normal file
View File

@@ -0,0 +1,62 @@
const got = require('@/utils/got');
const { art } = require('@/utils/render');
const path = require('path');
const { parseDate } = require('@/utils/parse-date');
const baseApiUrl = 'https://api.hashnode.com';
module.exports = async (ctx) => {
const username = ctx.params.username;
if (!username) {
return;
}
const query = `
{
user(username: "${username}") {
publication {
posts{
slug
title
brief
coverImage
dateAdded
}
}
}
}
`;
const userUrl = `https://${username}.hashnode.dev`;
const response = await got({
method: 'POST',
url: baseApiUrl,
headers: {
Referer: userUrl,
'Content-type': 'application/json',
},
body: JSON.stringify({ query }),
});
const publication = response.data.data.user.publication;
if (!publication) {
return;
}
const list = publication.posts;
ctx.state.data = {
title: `Hashnode by ${username}`,
link: userUrl,
item: list
.map((item) => ({
title: item.title,
description: art(path.join(__dirname, 'templates/description.art'), {
image: item.coverImage,
brief: item.brief,
}),
pubDate: parseDate(item.dateAdded),
link: `${userUrl}/${item.slug}`,
}))
.filter((item) => item !== ''),
};
};