\できあがった状態は以下の通り/
ブログ上:
Notion上:
返ってきたやつメモ:
{
object: 'list',
results: [
{
object: 'comment',
id: '1155c7d2-12ad-802e-afde-001d7c2dda7b',
parent: [Object],
discussion_id: '1155c7d2-12ad-8090-a3fa-001c1bf734f8',
created_time: '2024-10-04T07:50:00.000Z',
last_edited_time: '2024-10-04T07:50:00.000Z',
created_by: [Object],
rich_text: [Array]
},
{
object: 'comment',
id: '1155c7d2-12ad-80af-a872-001dd957ff5c',
parent: [Object],
discussion_id: '1155c7d2-12ad-8090-a3fa-001c1bf734f8',
created_time: '2024-10-04T13:25:00.000Z',
last_edited_time: '2024-10-04T13:25:00.000Z',
created_by: [Object],
rich_text: [Array]
}
],
next_cursor: null,
has_more: false,
type: 'comment',
comment: {},
request_id: '372094f9-f0e9-4dde-b2bd-670d2f81d256'
}
すばらしくて涙が出そう….( ;∀;)
では、さっそく作り方を解説します!!!
分からない部分はAIに聞いて下さい。ポイントだけ提示されていれば把握できるかと思います✌
export async function getCommentsPage(pageId: string): Promise<Comment> {
const blockId = pageId;
const res = await client.comments.list({ block_id: blockId });
const comments = res.results.map((comment) => {
return {
id: comment.id,
text: comment.rich_text[0].plain_text // 例えば、コメントのテキストを抽出
};
});
return comments
}
これをconsole.logすると、配列になって返ってくる
[
{
id: '1155c7d2-12ad-802e-afde-001d7c2dda7b',
text: 'コメントをする',
},
{
id: '1155c7d2-12ad-80af-a872-001dd957ff5c',
text: '2つめのコメントをする。これは、スレッドにぶらさげてる感じかな?',
}
]
<div>{comment.map((comment) => (<div>{comment.text}</div>))} </div>
コメントごとに改行を加える。
<div>{comment.map((comment) => (<div style={{ marginBottom: '10px'}}>{comment.text}</div>))} </div>
コメントをした主の名前を添える。
async function getUserName(userId: string){
const res = await client.users.retrieve({ user_id: userId });
const user= res.name
return user
}
Promiseで約束をしとくw
export async function getCommentsPage(pageId: string) {
const blockId = pageId;
const res = await client.comments.list({ block_id: blockId });
const comments = await Promise.all(res.results.map(async (comment) => {
const userName = await getUserName(comment.created_by.id);
return {
id: comment.id,
text: comment.rich_text[0].plain_text, // コメントのテキストを抽出
user: userName // ユーザー名を追加
};
}));
return comments
}
<div>
{comment.map((comment, index) => (
<div key={index} style={{ display: 'flex', alignItems: 'center', marginBottom: '10px' }}>
<div style={{ marginRight: '10px', fontWeight: 'bold' }}>{comment.user}:</div>
<div>{comment.text}</div>
</div>
))}
</div>
参照した公式ドキュメント
特に、コメントの構造は見てて楽しかった。
あと、notion apiの権限の設定を変更しないと動きません。
本番環境で動いてるapiの変更を忘れてdeployして怒られました。
くれぐれも、お気をつけくださいませm(_ _)m
▼ この記事に興味があったら同じタグから関連記事をのぞいてみてね
RSSリーダーにatomのリンクを登録すると通知が行くよ🐌
https://herohoro.com/atom
やってみてね(*´ω`*)(*´ω`*)
フォロー大歓迎\(^o^)/
フォロー大歓迎\(^o^)/