5️⃣

S25. レシート自動記録アプリ

レシート自動登録アプリも、テンプレートとともにアプリを配布しています。単に使いたいだけの人は、以下のリンクからテンプレートを複製してください。

25.1 登録するデータベース

現在設定しているインテグレーションキーで処理できるように、このページにデータベースを用意しました。レシートデータベースの Linked view はこちらです。「レシート(NotionAPI活用術版)」の部分をクリックして、フルページを表示し、そのページ URL を取得して下に貼ってください。
🧾
レシート(Notion API活用術版)
件名
種別
支出
収入
月まとめ
日付
📝
ページへのリンク (後のスクリーンショットに合わせているので実際の URL とは異なります)
例: https://www.notion.so/hkob/cb497221fe934ee1ba676e909f9fb5c0?v=f46d5380e5fb419ba7d0db6ba9324384&pvs=4
ここから database_id (?v= の前の32桁の16進数)を取り出します。
📝
レシートの database_id (後のスクリーンショットに合わせているので実際の URL とは異なります)
例: cb497221fe934ee1ba676e909f9fb5c0
 
月まとめのデータベースの Linked view はこちらです。こちらも「月まとめ(NotionAPI活用術版)」の部分をクリックして、フルページを表示し、そのページ URL を取得して下に貼ってください。
🈷️
月まとめ (Notion API 活用術版)
個別収支 (Notion API活用術版)
📝
ページへのリンク (後のスクリーンショットに合わせているので実際の URL とは異なります)
例: https://www.notion.so/hkob/904abe15c98b46d6ae99a5c35bcd8f45?v=2d3ca536a48542db9aaa092576ea7e2d&pvs=4
📝
月まとめの database_id (後のスクリーンショットに合わせているので実際の URL とは異なります)
例: 904abe15c98b46d6ae99a5c35bcd8f45

25.2 ショートカット作成

写真の文字認識でコピーした文字列は、頭に貨幣記号が含まれる場合があります。最初の部分ではそれらを正規表現で取り除きます。今回は、[¥¥$$€£,,]+ としましたが、他の国での記号があれば、それも除外するようにしてください。
貨幣記号や,を削除貨幣記号や,を削除
貨幣記号や,を削除
次に各種定数を設定します。上からそれぞれ、NOTION_API_KEYreceipt_database_idmonth_database_iddate_format として参照します。下に同期ブロックを用意したので、最初の三つはここからコピーするとよいでしょう。yyyy-MM だと 2023-04 のようになります。yyyy年MM月のようにすると、2023年04月のようになります。この辺りは自分の好きなように変更してみてください。
notion imagenotion image
📝
自分のインテグレーションキーを記録
コピーしたインテグレーションキー
📝
レシートの database_id (後のスクリーンショットに合わせているので実際の URL とは異なります)
例: cb497221fe934ee1ba676e909f9fb5c0
📝
月まとめの database_id (後のスクリーンショットに合わせているので実際の URL とは異なります)
例: 904abe15c98b46d6ae99a5c35bcd8f45
 
現在の日付を取得し、そのデータから月まとめのタイトル文字列を作成します。また、レシートの日付を保持するために、ISO8601 フォーマットの文字列 も保持しておきます。こちらはiso8601time と命名しました。
notion imagenotion image
 
月まとめのページか存在するかを Retrieve a page endpoint で確認します。NotionRubyMapping で payload を確認します。
# 月まとめデータベースを取得 mdb = Database.find "月まとめのデータベースID" print mdb.query_database(mdb.properties["月"].filter_equals("2022-11"), dry_run: true)
📝
出力した payload を記録しておきます。
 
この結果を受けて以下のようにアクションを作成します。
notion imagenotion image
 
この時、最初の項目がなければ、ページを新規作成します。これも NotionRubyMapping で月まとめのページを作成する payload を教えてもらいます。
print(mdb.create_child_page(dry_run: true) do |_, pp| pp["月"] << "2022-11" end)
📝
出力した payload を記録しておきます。
 
ページが存在しない時の処理は以下のようになりました。作成したページの id を month_id という変数に記録しておきます。
notion imagenotion image
 
逆に存在した場合には、ページID を month_id 変数に記録しておくだけでよいです。
notion imagenotion image
 
リレーション先の page_id が取得できたので、レシートページを登録します。こちらも NotionRubyMapping に payload を教えてもらいます。
rdb = Database.find "cb497221fe934ee1ba676e909f9fb5c0" print(rdb.create_child_page(dry_run: true) do |_, pp| pp["件名"] << "" pp["日付"].start_date = DateTime.now pp["支出"].number = 1234 pp["月まとめ"].add_relation "5678" end
📝
出力した payload を記録しておきます。
 
これを元に Create a page endpoint を呼び出します。以下のようになりました。残りは音声でタスク登録とほぼ同様の処理であるので説明は省略します。
notion imagenotion image
 
情報タブは以下のようにしています。
情報タブの詳細情報タブの詳細
情報タブの詳細
情報タブの設定情報タブの設定
情報タブの設定

25.3 動作確認

クリップボードに「¥1,234」のような貨幣記号を含んだ文字列をクリップボードに入れた状態で、このアプリを実行します。実行するとページが表示されます。
テスト登録したレシートページテスト登録したレシートページ
テスト登録したレシートページ
 

25.4 iPhone の設定

ショートカットの準備ができたので、次に iPhone の設定を行います。最初にカメラ撮影時に画面上のテキストを認識できるようにする設定を行います。iOS 16 の場合、「一般」→「言語と地域」の一番下にある「テキスト認識表示」をオンにします。
 
notion imagenotion image
次に、アクセスシビリティ → タッチ → 背面タップのダブルタップを、先ほど設定を行った「レシート登録」ショートカットに設定します。
notion imagenotion image
notion imagenotion image

25.5 使用方法

このショートカットの使い方は以下の通りです。
  1. カメラを起動してレシートの金額部分が見えるようにします。
  1. 撮影中に画面の右下に現れる「テキスト認識」マークをクリックします。
  1. 数字部分をダブルタップするなどして選択します。
  1. 選択するとポップアップが表示されるのでコピーをクリックします。
  1. この状態で iPhone の背面をダブルタップすると、今回設定したショートカットが起動します。
  1. レシートページが Notion で開くので、タイトルや種別を変更します。
以上です。Twitter に使用例の動画を載せているので、そちらもご覧ください。

データベース置場