🙆
Discordのslash Commandでnotionのタイトル検索を実装する
はじめに
ミドラボというコミュニティでdiscordを開発しているのですが、よりよい環境になるようにNotionのページ検索も入れようと考え実装しました
割と簡単にはできましたが、API周りで少し調べたので記録を残しておきます!
環境
- python 3.10.5
- notion-client 2.0.0
コマンドの実装
Commandの仕様
- 引数で入力した単語からNotionのタイトル検索をした結果を数件返したい
- 最終更新日でソートを行い、新しいものを知りたい
コード
ここでは、表示するページは5件にしています
コマンドの実装
@com.command(name="search_notion_page", description="notionのページをあいまい検索するコマンド")
async def notion_page_search(
self,
ctx: discord.ApplicationContext,
title: Option(
str,
description="ページのタイトル",
)
):
# ページの検索
page_suggestions = await self.notion.search_page(title)
# ページの検索結果を送信するメッセージを作成します
send_message = ""
for page in page_suggestions:
send_message += f"{page['properties']['名前']['title'][0]['text']['content']} \n {page['url']} \n"
# discordにメッセージを送信します
await ctx.response.send_message(send_message)
タイトル名からnotion apiを使って概要のページを取得する関数
import os
from notion_client import AsyncClient
class notion:
def __init__(self):
self.notion = AsyncClient(auth=os.environ["NOTION_TOKEN"])
# ページの検索
async def search_page(self, name: str) -> list:
results = await self.notion.search(
**{
"query": name,
"sort": {
"direction": "descending",
"timestamp": "last_edited_time",
},
"filter": {
"value": "page",
"property": "object",
},
"page_size": 5,
}
)
return results["results"]
midra-lab.notion.site/MidraLab-dd08b86fba4e4041a14e09a1d36f36ae 個人が興味を持ったこと × チームで面白いものや興味を持ったものを試していくコミュニティ
Discussion