MacroDroidでNotionに最速でメモをする

# AndoroidでもNotionにサクッとメモがしたい
どうも、Androidユーザーです。先日こんな記事を見つけました。

https://tech-you.jp/notion-onetouch-setting/

テンプレも配布されてて、めっちゃいいじゃんと思ったのですが、ショートカット機能はMac, iPhone限定。。Androidで同じことをやりたくて、調べてみたもののMacroDroidってアプリが使えそうところまでしか見つけられなかったのでこのブログ記事を参考にしつつAndoroid版のNotionの連携機能を真似して作ってみました。

# こうしたらできました

## 下準備([こちら](https://tech-you.jp/notion-onetouch-setting/)を参考に)
- Notionインテグレーションの設定(`token`の値)
- Notionデータベースの作成
- インテグレーションの接続
- データベースIDの確認(`database_id`の値)
- 入力したい列のタイトルプロパティ名の確認(`property_title`の値)
- MacroDroidをPlayストアからインストールする

## MacroDroidを設定する

### 新規アクションの追加
- 右下の`+`ボタンから新規マクロを作成する

### `Triggers`の設定
- `Widget Button`を検索して追加する
- 適当なウィジェットの色や形を設定してください
- あとからホーム画面に設置して使います

### `Actions`の設定

#### Local変数`token`の定義
- `Set Variable`を選んで, `[新規変数]`を選択する
- Variable Typeを`String`に設定し、Local変数名 `token`を定義
- `Value`を選択して下準備でゲットした`token`の値を設定する

#### Local変数`database_id`の定義
- `Set Variable`を選んで, `[新規変数]`を選択する
- Variable Typeを`String`に設定し、Local変数名 `database_id`を定義
- `Value`を選択して下準備でゲットした`database_id`の値を設定する

####  Local変数`property_title`の定義
- `Set Variable`を選んで, `[新規変数]`を選択する
- Variable Typeを`String`に設定し、Local変数名 `property_title`を定義
- `Value`を選択して下準備でゲットした`property_title`の値を設定する

####  Local変数`auth_header`の定義
- `Set Variable`を選んで, `[新規変数]`を選択する
- Variable Typeを`String`に設定し、Local変数名 `auth_header`を定義
- `Value`を選択して`Bearer {lv=token}`と値を設定する

####  ユーザー入力を受け取る変数を定義
- `Set Variable`を選んで, `[新規変数]`を選択する
- Variable Typeを`String`に設定し、Local変数名 `note_content`を定義
- `[User Prompt]`を選択する
- `Title`, `Description`は空のままokをおして閉じてよい

####  POST部分の作成
- `HTTP Request`を検索して選択
    - `Settings` を下記のように編集(logは任意で)
        <img width=400 alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257616/ea438ea8-49b4-fdd4-2256-93ad034d216c.png>

    - `Header Params` を下記のように編集
        <img width=400 alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257616/529d65a1-1436-114f-f2db-689a42444794.png>

    - `Content Body` を下記のように編集
        <img width=400 alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257616/036df678-7f6f-eb40-2784-2409605b4d78.png>

JSONはこんな感じで    
```json
{
    "parent": {
        "database_id": "{lv=database_id}"
    },
    "properties": {
        "{lv=property_title}": {
            "title": [
                {
                    "text": {
                        "content": "{lv=note_content}"
                    }
                }
            ]
        }
    }
}
```

追記) もしメモした日付も一緒に記録したい場合はこう書く。(`記載日`列を日付フォーマットで入力する) もちろん個別に変数定義してもok。
```json
{
    "parent": {
        "database_id": "{lv=database_id}"
    },
    "properties": {
        "{lv=property_title}": {
            "title": [
                {
                    "text": {
                        "content": "{lv=note_content}"
                    }
                }
            ]
        },
    "記載日": {
          "date": {
                "start":"{year}-{month_digit}-{dayofmonth}"
            }
       }  
    }
}
```



- 設定が終わったらこうなってるはず。。。。
<img width=400 alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257616/3ea8140c-89e5-bdbe-4eea-09e489030acc.png>)

### 動作確認する
- MacroDroidの右上のボタンを押して`Test Actions`を押すと動きます。
- うまくいかないときはlogを見てパラメータミスが無いか確認しました。
    - HTTP RequestのSettingsでlogファイルを出力するように設定できます
    

# おまけ
よくわかんなかったのでGeminiやClaude 3に助けてもらいながら設定しました。
MacroDroid内でlocal変数を呼び出す場合は`{lv=変数名}`みたいな書き方をするようです。
`Voice Input`のActionを使うことで音声入力からも同じくメモが取れます。
デバッグはPostman使ってMACのショートカットと同じ入力した場合の返り値とエラーの場合の返り値とを比較しました。

https://www.postman.com/