はじめに
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" }
おわりに
明日はこの結果を元にテストと実装を記載します。