🙆

Discordのslash Commandでnotionのタイトル検索を実装する

2023/10/21に公開

はじめに

ミドラボというコミュニティでdiscordを開発しているのですが、よりよい環境になるようにNotionのページ検索も入れようと考え実装しました
割と簡単にはできましたが、API周りで少し調べたので記録を残しておきます!

環境

コマンドの実装

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"]
MidraLab(ミドラボ)

Discussion