NotionRubyMapping のアップデート(21) : hkob の雑記録 (180)

はじめに

hkob の雑記録の第180回目は、外部URLからファイルをアップロードするためのテストデータを作成します。

create_file_upload_external_url.sh

外部ファイルを取り込む create_file_upload_external_url.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: 2022-06-28' \
  --data '{
    "mode": "external_url",
    "external_url": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
    "filename": "dummy.pdf"
  }'

取得した JSON は以下のようになりました。

{
    "object": "file_upload",
    "id": "21fd8e4e-98ab-8108-bb77-00b2ea9e9905",
    "created_time": "2025-06-27T13:54:00.000Z",
    "created_by": {
        "id": "40673a87-d8ed-41e0-aa55-7f0e8ace24cd",
        "type": "bot"
    },
    "last_edited_time": "2025-06-27T13:54:00.000Z",
    "expiry_time": "2025-06-27T14:54:00.000Z",
    "upload_url": "https://api.notion.com/v1/file_uploads/21fd8e4e-98ab-8108-bb77-00b2ea9e9905/send",
    "archived": false,
    "status": "pending",
    "filename": "dummy.pdf",
    "content_type": "application/pdf",
    "content_length": null,
    "request_id": "a5cb3b24-664d-4928-9046-e227be63ec43"
}

retrieve_a_file_upload.sh

アップロードが完了したら確認するために、 retrieve_a_file_upload.sh で File Upload object を確認します。

curl --request GET \
     --url https://api.notion.com/v1/file_uploads/21fd8e4e-98ab-8108-bb77-00b2ea9e9905 \
     -H 'accept: application/json' \
     -H 'Authorization: Bearer '"$NOTION_API_KEY"'' \
     -H 'Notion-Version: 2022-06-28'

ファイルが小さいためにすぐに status が uploaded になってしまいました。pending のテストもしたいのですが、その status を得るのは面倒そうなので、ダミーで作った方がいいかもしれません。

{
    "object": "file_upload",
    "id": "21fd8e4e-98ab-8108-bb77-00b2ea9e9905",
    "created_time": "2025-06-27T13:54:00.000Z",
    "created_by": {
        "id": "40673a87-d8ed-41e0-aa55-7f0e8ace24cd",
        "type": "bot"
    },
    "last_edited_time": "2025-06-27T13:54:00.000Z",
    "expiry_time": "2025-06-27T14:54:00.000Z",
    "archived": false,
    "status": "uploaded",
    "filename": "dummy.pdf",
    "content_type": "application/pdf",
    "content_length": 13264,
    "file_import_result": {
        "type": "success",
        "success": {},
        "imported_time": "2025-06-27T13:54:10.000+00:00"
    },
    "request_id": "324b1ff8-7b9e-4557-b90e-2e616ab18848"
}

update_block_pdf_file_upload.sh

アップロードした PDF ファイルを PDF block に割り当てるスクリプトを作成します。

#!/bin/sh
curl -X PATCH 'https://api.notion.com/v1/blocks/20bd8e4e98ab80e6ad4cdfd71964c48c' \
  -H 'Notion-Version: 2022-06-28' \
  -H 'Authorization: Bearer '"$NOTION_API_KEY"'' \
  -H 'Content-Type: application/json' \
  --data '{"pdf":{"type":"file_upload", "file_upload":{"id": "21fd8e4e98ab8108bb7700b2ea9e9905"}}}'

取得した結果は以下のようになりました。

{
    "object": "block",
    "id": "20bd8e4e-98ab-80e6-ad4c-dfd71964c48c",
    "parent": {
        "type": "page_id",
        "page_id": "20bd8e4e-98ab-80c7-9576-dcf6f6e5ee4a"
    },
    "created_time": "2025-06-07T10:00:00.000Z",
    "last_edited_time": "2025-06-27T14:14:00.000Z",
    "created_by": {
        "object": "user",
        "id": "2200a911-6a96-44bb-bd38-6bfb1e01b9f6"
    },
    "last_edited_by": {
        "object": "user",
        "id": "40673a87-d8ed-41e0-aa55-7f0e8ace24cd"
    },
    "has_children": false,
    "archived": false,
    "in_trash": false,
    "type": "pdf",
    "pdf": {
        "caption": [],
        "type": "file",
        "file": {
            "url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/2b7b01f0-67a8-40f8-acd4-88dd2805f216/f8c6995d-830c-4a31-adb5-4598014c213b/dummy.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB4664J5EREBD%2F20250627%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20250627T141421Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEH0aCXVzLXdlc3QtMiJHMEUCIHcc6bT0q6LrRMN28p6c8zNKvJsww7orxttIopbbvLnmAiEA3jdbNAL8nTHDNOoPOtopkDsFjoR5%2FDwJ2JiTm7az%2BrEq%2FwMIdhAAGgw2Mzc0MjMxODM4MDUiDEk7djqszsODp2hSzyrcA6VtouOH7qFLxhgBcR6h4l6pOFRj7n7lcrA2%2F2DGxtyQEifdf5gQe27BRttfYpOMcX%2B6dtt4T4PEu5gFVOBcRy%2BeUue%2BkIFNkV85fYHy4cf%2Fll83cbb9MexWlz%2BRJTd7SAv8FwQYW3QR2akYMd73y1qYjlGKoJndHs7talMh0dYsRrDFenszHTBu9xTx5axfh4tovzP8kGVSRI5QxNX1BKZCsCTv9Ov1K%2BzNVV6LpU6059JPhJA2XlZMXDocaEtpJtfU3jad8rYcyls6RdXSBE%2BXfEQN0aLuqUJqRzR14MaTXqGHZGBagv3Lu3Fwhrc7iQ2sstAuG%2F6TEU7Um26Hah1x%2BnqoEnlKv7dGSHg4nC3kHrP7ah4NQJSOsX5UC1iuTpAOZmQGhHK1IAJzBsXMzyoeQpApi%2Bm9H8rrf8PcHtbTZtkETCBwlFIzA0Zp9mnZiMY3tLFsScs%2BfqdXAdnIDClOBbxCqusZ8MrdS%2FZ0jvNxZox%2F%2Ft3ktXiy5izyy9AKbtLHnG%2FoDezdxclpJUIiBR62SGdo2dQ1WMmlhV096t73CxEzRTxePjdTZIIu6tpD1VK9GGuv08O8ckYYW6YImpTwdhXfwYhmZ8p5XZjxOy5TgKu44F3vKyysQgl6MNSx%2BsIGOqUBW0vnp2T%2FJmYmhWvgyaNax1HI2Ns7OTri2%2BXhIs9gVk%2FKKZyVdOu6JkwJR2gaUmODa4akTZ2PmqWFkOaCmIEJiOfe3R3mLQpG08nuNBDwRC7QbpSxl0ePuzlrXwLCpyuas%2Bv0pAXhkGYWlpz9GxZxqvYFwtV6tPUpNN8TKANevkdj6cSBa4s05nRvpp8RASggRutzxDsTj6ItJxBpmeKOIiyvAE%2FR&X-Amz-Signature=d05c29a2308ac97e981b000a738f6ac4ebca8171f82f78b481dc742bf3d51d14&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject",
            "expiry_time": "2025-06-27T15:14:21.408Z"
        }
    },
    "request_id": "4c842fa2-6c7b-4db7-9e63-6c0e34212a34"
}

おわりに

明日はこの結果を元にテストと実装を記載します。

hkob.notion.site