質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

1451閲覧

GASで、Notionにページを自動作成。データベースIDが見つからないエラー(404)(Notionに日付名の新規ページを毎日自動で作成したい)

cardamon

総合スコア19

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2023/04/11 21:04

実現したいこと

Notionで毎日、日付がタイトルの新規ページを自動で追加したい。

発生している問題・エラーメッセージ

データベースが見つからないというエラーが返ってくる

status: 404, code: 'object_not_found', message: 'Could not find database with ID: xxxxxx(実際はDB名).

該当のソースコード

GoogleAppsScript

1 2// Create a common header object for Notion API 3const notionHeader = token => ({ 4 'Content-Type': 'application/json', 5 'Authorization': 'Bearer ' + token, 6 'Notion-Version': '2021-05-13' 7}) 8 9// zero-fill month/day string 10const zfill2 = str => { 11 return str.length === 2 ? str : '0' + str 12} 13 14// Create a diary page for the given date 15const createDiaryPage = (dbId, date, token) => { 16 const url = `https://api.notion.com/v1/pages` 17 const jaToday = date.toLocaleDateString("ja-JP", { timeZone: "Asia/Tokyo" }) // e.g. 2021/7/3 18 const jaDate = jaToday.split('/') 19 const dayOfWeek = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][date.getDay()] 20 21 const body = { 22 parent: { 23 database_id: dbId, 24 }, 25 properties: { 26 Date: { 27 date: { 28 start: `${jaDate[0]}-${zfill2(jaDate[1])}-${zfill2(jaDate[2])}`, // YYYY-MM-DD 29 end: null 30 } 31 }, 32 Name: { 33 title: [{ 34 text: { 35 // without zfill (e.g. 2021/7/3(Sat)) 36 content: `${jaToday}(${dayOfWeek})` 37 } 38 }] 39 } 40 } 41 } 42 const options = { 43 method: 'post', 44 headers: notionHeader(token), 45 payload: JSON.stringify(body), 46 muteHttpExceptions: true // muteHttpExceptionsという箱を作り、trueという値を入れる 47 } 48 const resp = UrlFetchApp.fetch(url, options) 49 return JSON.parse(resp.getContentText()) 50} 51 52 53// 定時実行する関数 54const createEmptyDiaryForToday = () => { 55 const diaryDbId = "xxxxxx(実際はDB名)" 56 const token = "xxxxxx(実際はAPIトークン)" 57 58 const now = new Date() 59 console.log(now) 60 const resp = createDiaryPage(diaryDbId, now, token) 61 console.log(resp) 62}

試したこと

・APIはコネクトから追加済であることを確認
・DB名は以下「★日報」という親ページのリンク(★〜★)部分をコピペして貼り付け

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

macaron_xxx

2023/04/11 23:01

それ、データベースではなく、ページなのでは? page_idでやってみてください。
cardamon

2023/04/13 21:50 編集

ありがとうございます。試しにpage_idで、以下のように修正したところ該当エラーが解消されました。ただ日付入りのページでなく無題のページが作成され、また作りたい場所と異なる場所に生成されたので、また修正しようと思います。 なお、場所が違った件は、そもそも私のスクショ掲載が誤っていました。作りたいのは青丸画像の"俯瞰のビュー"配下でした(こちらがデータベース形式でした) コメント頂けたことで、そもそも、自分の中で、Notionにおけるページとデータベースの違いの理解が曖昧だったと気づけました。ありがとうございます! // Create a common header object for Notion API const notionHeader = token => ({ 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + token, 'Notion-Version': '2021-05-13' }) // zero-fill month/day string const zfill2 = str => { return str.length === 2 ? str : '0' + str } // Create a diary page for the given date const createDiaryPage = (parentId, date, token) => { const url = `https://api.notion.com/v1/pages` const jaToday = date.toLocaleDateString("ja-JP", { timeZone: "Asia/Tokyo" }) // e.g. 2021/7/3 const jaDate = jaToday.split('/') const dayOfWeek = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][date.getDay()] const body = { parent: { page_id: parentId, }, properties: { Date: { date: { start: `${jaDate[0]}-${zfill2(jaDate[1])}-${zfill2(jaDate[2])}`, // YYYY-MM-DD end: null } }, Name: { title: [{ text: { // without zfill (e.g. 2021/7/3(Sat)) content: `${jaToday}(${dayOfWeek})` } }] } } } const options = { method: 'post', headers: notionHeader(token), payload: JSON.stringify(body), muteHttpExceptions: true } const resp = UrlFetchApp.fetch(url, options) return JSON.parse(resp.getContentText()) } // 定時実行する関数 const createEmptyDiaryForToday = () => { const parentId = "xxxxx"; // page_idを指定 const token = "xxxxx" const now = new Date() console.log(now) const resp = createDiaryPage(parentId, now, token) console.log(resp) }
cardamon

2023/04/13 23:06

データベースIDと勘違いしてページIDを指定していた部分を直し、以下で動きました。ありがとうございます! 念のため、他の方用に動いたコードを残します。 (以下、0414金のように、今日の日付名の日報を自動で作るコード) // Create a common header object for Notion API const notionHeader = token => ({ 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + token, 'Notion-Version': '2021-05-13' }) // zero-fill month/day string const zfill2 = str => { return str.length === 2 ? str : '0' + str } // Create a diary page for the given date const createDiaryPage = (dbId, date, token) => { const url = `https://api.notion.com/v1/pages` const jaToday = date.toLocaleDateString("ja-JP", { timeZone: "Asia/Tokyo" }) // e.g. 2021/7/3 const jaDate = jaToday.split('/') const dayOfWeek = ['日', '月', '火', '水', '木', '金', '土'][date.getDay()] // 曜日の日本語表記 const body = { parent: { database_id: dbId, }, properties: { Date: { date: { start: `${jaDate[0]}-${zfill2(jaDate[1])}-${zfill2(jaDate[2])}`, // YYYY-MM-DD end: null } }, Name: { title: [{ text: { // 日付のフォーマットを修正して追加 content: `${zfill2(jaDate[1])}${zfill2(jaDate[2])}(${dayOfWeek})` // MMDD(曜日) } }] } } } const options = { method: 'post', headers: notionHeader(token), payload: JSON.stringify(body), muteHttpExceptions: true } const resp = UrlFetchApp.fetch(url, options) return JSON.parse(resp.getContentText()) } // 定時実行する関数 const createEmptyDiaryForToday = () => { const diaryDbId = "hoge" const token = "hoge" const now = new Date() console.log(now) // 現在時刻をログに出力 const resp = createDiaryPage(diaryDbId, now, token) console.log(resp) // APIのレスポンスをログに出力 }
guest

回答1

0

自己解決

(自己解決欄に記載しないと質問を閉じられないため、こちらにコメント欄と同じ内容を再掲します)

コメント欄にてアドバイスいただいた、データベースIDと勘違いしてページIDを指定していた部分を直し、以下で動きました。ありがとうございます!

念のため、動いたコードを残します。
(以下、0414金のように、今日の日付名の日報を自動で作るコード)

GoogleAppsScript

1// Create a common header object for Notion API 2const notionHeader = token => ({ 3'Content-Type': 'application/json', 4'Authorization': 'Bearer ' + token, 5'Notion-Version': '2021-05-13' 6}) 7 8// zero-fill month/day string 9const zfill2 = str => { 10return str.length === 2 ? str : '0' + str 11} 12 13// Create a diary page for the given date 14const createDiaryPage = (dbId, date, token) => { 15const url = `https://api.notion.com/v1/pages` 16const jaToday = date.toLocaleDateString("ja-JP", { timeZone: "Asia/Tokyo" }) // e.g. 2021/7/3 17const jaDate = jaToday.split('/') 18const dayOfWeek = ['日', '月', '火', '水', '木', '金', '土'][date.getDay()] // 曜日の日本語表記 19 20const body = { 21parent: { 22database_id: dbId, 23}, 24properties: { 25Date: { 26date: { 27start: `${jaDate[0]}-${zfill2(jaDate[1])}-${zfill2(jaDate[2])}`, // YYYY-MM-DD 28end: null 29} 30}, 31Name: { 32title: [{ 33text: { 34// 日付のフォーマットを修正して追加 35content: `${zfill2(jaDate[1])}${zfill2(jaDate[2])}(${dayOfWeek})` // MMDD(曜日) 36} 37}] 38} 39} 40} 41const options = { 42method: 'post', 43headers: notionHeader(token), 44payload: JSON.stringify(body), 45muteHttpExceptions: true 46} 47const resp = UrlFetchApp.fetch(url, options) 48return JSON.parse(resp.getContentText()) 49} 50 51// 定時実行する関数 52const createEmptyDiaryForToday = () => { 53const diaryDbId = "hoge" 54const token = "hoge" 55 56const now = new Date() 57console.log(now) // 現在時刻をログに出力 58const resp = createDiaryPage(diaryDbId, now, token) 59console.log(resp) // APIのレスポンスをログに出力 60} 61コード

投稿2023/04/13 23:10

cardamon

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問