名刺管理テンプレートの再構築 (4) - ショートカットの作成 : hkob の雑記録 (321)

はじめに

hkob の雑記録の第321回目は、昨日の続きでいよいよショートカットアプリを作成します。

基礎部分の作成

写真を撮ってテキストを取得するまではこれまでのものと同じです。ギャラリービューの表示であればそれほどの解像度は必要ないので、横ピクセルサイズを640くらいにサイズ変更しています。この後のアップロードの20MB制限にかからないようにファイルサイズを小さくする目的もあります。また、実際にファイルの形式にする必要があるので、JPEG に変換しました。

基礎部分の作成

FileUploadObject の作成

まずは FileUploadObject の作成です。ただし、NotionRubyMapping では multipart の処理などをライブラリ内に隠してしまったので、dry_run などで内容を確認できません。このため、テストに利用した fixtures データで確認します。 spec/fixtures/create_file_upload_image.sh は以下のようになっています。

#!/bin/sh
curl --request POST \
  --url 'https://api.notion.com/v1/file_uploads' \
  -H 'Authorization: Bearer '"$NOTION_API_KEY"'' \
  -H 'Content-Type: application/json' \
  -H 'Notion-Version: 2025-09-03' \
  --data '{}'

これによって返却された JSON がこちらです。ここで必要なのは、 idupload_url です。

{
    "object": "file_upload",
    "id": "20cd8e4e-98ab-81aa-973b-00b23083c115",
    "created_time": "2025-06-08T11:34:00.000Z",
    "created_by": {
        "id": "40673a87-d8ed-41e0-aa55-7f0e8ace24cd",
        "type": "bot"
    },
    "last_edited_time": "2025-06-08T11:34:00.000Z",
    "expiry_time": "2025-06-08T12:34:00.000Z",
    "upload_url": "https://api.notion.com/v1/file_uploads/20cd8e4e-98ab-81aa-973b-00b23083c115/send",
    "archived": false,
    "status": "pending",
    "filename": null,
    "content_type": null,
    "content_length": null,
    "request_id": "32fdc5bc-ff34-4501-9b7c-ad2a14c5f9b5"
}

ここまでをショートカットに取り入れます。まずは、NOTION_API_KEY と機能取得した DataSource の id をテキストで記録しておきます。

定数をテキストに記録

API アクセスの部分は以下のようになります。

FileUploadObject の作成 API

返却された JSON の id と upload_url の値を辞書から取得しておきます。

file_upload_object_id と upload_url の取得

ファイルアップロード

次に file_upload_object に対して、ファイルをアップロードします。スクリプトはこちらです。

curl --request POST \
  --url 'https://api.notion.com/v1/file_uploads/20cd8e4e-98ab-81aa-973b-00b23083c115/send' \
  -H 'Authorization: Bearer '"$NOTION_API_KEY"'' \
  -H 'Notion-Version: 2025-09-03' \
  -H 'Content-Type: multipart/form-data' \
  -F "file=@ErSxuLeq.png-medium.png"

これをショートカットにすると以下のようになります。

file upload API の呼び出し

ファイルの部分にはサイズ変換した後の画像を設定しています。

アップロードするファイルの指定

ページ追加

まずはページ作成のための JSON を作成します。改行が含まれるので、それを「\n」に書き換えた後で、JSON の中に埋め込みます。file_upload_object の id と data_source_id は事前に準備したものを埋め込んであります。

payload データの作成

この JSON を使ってページを作成します。

作成した payload でページを作成

あとは作成されたページを開くだけです。

作成したページを開く

動作確認

作成したショートカットを起動するとカメラが起動します。iPad で先日のブログ記事を表示し、iPhone で撮影してみました。ここで、「写真を使用」とすると、API 経由で写真がアップロードされ、作成したページが表示されます。

撮影した名刺

実際に作成されたページは以下のようになります。余計な情報が入っていますが、本来の名刺であればこれらはないはずなので、問題はないでしょう。名刺画像に撮影した写真も登録されているのが見えます。

作成されたページ

おわりに

今回はショートカットでページを作成するところまでを実施しました。結局 API から展開されたテンプレートページでは AI が発行しないことがわかったので、明日は crm コマンドの作り直しをして完成とします。

hkob.notion.site