実現したいこと
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名は以下「★日報」という親ページのリンク(★〜★)部分をコピペして貼り付け
それ、データベースではなく、ページなのでは?
page_idでやってみてください。
ありがとうございます。試しに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)
}
データベース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のレスポンスをログに出力
}
回答1件
あなたの回答
tips
プレビュー