動機
- macで勉強するとき、見知らぬ単語があったらストックしたい
- ストック先はNotionのデータベースがいい
- 意味もついでに入力したい
手順
下準備
データを格納するNotion Databaseを作成します。
コードをそのまま動かすには、
のようなデータベースにしてください。
-
Automatorを開きます。
-
「新規書類」を選択し、「クイックアクション」を選びます。
-
左上の検索欄で「AppleScript」と入力します。
その下に「AppleScriptを実行」という項目が出てくるので、ダブルクリックするか、右のエリアにドラッグ&ドロップします。
-
「ワークフローが受け取る項目」を「テキスト」に設定します。
-
左側のライブラリから「AppleScriptを実行」アクションを探し、ワークフロー領域にドラッグ&ドロップします。
-
「AppleScriptを実行」アクション内のスクリプト領域に、下記のコードを貼り付けます
※NOTION_TOKEN_ID, DATABASE_IDについては,自分のtoken id, database idに変更。
参考)
Notion token ID : NotionAPIインテグレーション - 内部インテグレーションの作成を参考に取得してください。
DATABASE_ID : 追加先のdatabaseのurlの以下の部分です。
(引用:https://developers.notion.com/reference/retrieve-a-database)
インテグレーションと接続するのを忘れないようにしましよう。接続方法については、https://zenn.dev/kou_pg_0131/articles/notion-api-usage の記事が詳しいです。 -
クイックアクションを名前をつけて保存
-
任意のアプリケーションで文字を選択し、上でつけた名前が右クリックメニューに表示されることを確認してください。
on run {input, parameters}
set selectedText to input as text
-- ユーザーに説明の入力を求める
set descriptionText to text returned of (display dialog "この項目の説明を入力してください:" default answer "")
-- Notionのデータベースに追加するためのAPIリクエストを作成
set notionToken to "NOTION_TOKEN_ID"
set databaseId to "DATABASE_ID"
-- JSONデータをエスケープ
set escapedText to do shell script "echo " & quoted form of selectedText & " | sed 's/\"/\\\\\"/g'"
set escapedDescription to do shell script "echo " & quoted form of descriptionText & " | sed 's/\"/\\\\\"/g'"
set curlCommand to "curl 'https://api.notion.com/v1/pages' " & ¬
"-H 'Authorization: Bearer " & notionToken & "' " & ¬
"-H 'Content-Type: application/json' " & ¬
"-H 'Notion-Version: 2022-06-28' " & ¬
"--data '{\"parent\": {\"database_id\": \"" & databaseId & "\"}, " & ¬
"\"properties\": {" & ¬
"\"Name\": {\"title\": [{\"text\": {\"content\": \"" & escapedText & "\"}}]}, " & ¬
"\"tag\": {\"multi_select\": [{\"name\": \"word\"}]}, " & ¬
"\"Description\": {\"rich_text\": [{\"text\": {\"content\": \"" & escapedDescription & "\"}}]}" & ¬
"}}'"
-- APIリクエストを実行
set apiResponse to do shell script curlCommand
-- レスポンスを解析してエラーチェック
if apiResponse contains "error" then
display dialog "エラーが発生しました: " & apiResponse buttons {"OK"} default button "OK" with icon caution
else
display notification "単語「" & selectedText & "」がNotionデータベースに追加されました。"
end if
return input
end run