Notion API リレーションを含むアイテムの追加 モデルケース
下記に、シンプルなデータベースとリレーションによる例を示します。
解決の一助になれば幸いです。
<全体構成>
NotionAPITestという親ページがあり、
その下に
・MyDatabase
・MyProjects
というタイトルの2つのデータベースが作られているとします。
MyDatabaseはGASでレコードを追加しようとする先のデータベース、
MyProjectsは、MyDatabase内でリレーション設定先となるデータベースです。
<前提となる各データベースの構造>
(1)MyDatabase
-
説明:レコードの追加先となるデータベースです。
-
構造:
「名前」(テキスト)、
「タグ」(マルチセレクト)、(あらかじめ「tag1」「tag2」「test3」という名称のタグが登録されているものとします)
「プロジェクト」(下記(2)のMyProjectsをリレーションとして設定済みとします)
という名称の3つの列を持ちます。
(2)MyProjects
- 説明:MyDatabaseの「プロジェクト」という列のリレーション設定先となるデータベースです。
- 構造:
「プロジェクト名」(テキスト)、
「完了期限」(日付)、
「担当者」(テキスト)
という名称の3つの列を持ちます。
![]
ここで、(今回MyDatabaseに追加しようとしている)3番目の「Project3」のページのurlが以下であるとします。(Project3をポイントしたときに左に現れる6つの点をクリックして「リンクのコピー」で得られるurl)
[Project3のurl]
https://www.notion.so/Project3-**Project3のページID**
※注意:ページIDの左にそのページのタイトルが自動でついていますが、
GASで指定するべきページIDは、先頭のタイトルを含まない部分になります。
先頭のタイトル(この例だと"Project3-")まで含めてページIDとして指定してしまうと、エラーになります。
下記のコードは、上記を前提として
MyDatabaseのレコード2の下に、
・ 名前:「record3」
・ タグ:「test3」
・プロジェクト:「Project3」へのリレーション
を設定したアイテムを追加するものです。
js
1function addToDB() {
2 const NOTION_API_TOKEN = 'NOTIONのトークン'
3 const recordObj = {
4 'parent': {
5 'type': 'database_id',
6 'database_id': '**MyDatabaseのデータベースID**'
7 },
8 'properties': {
9 '名前': {
10 'title': [
11 {
12 'text': {
13 'content': 'record3',
14 }
15 }
16 ]
17 },
18 'タグ': {
19 'multi_select': [
20 {
21 'name': 'test3',
22 },
23 ]
24 },
25 // リレーション設定先
26 'プロジェクト': {
27 'relation': [
28 {
29 'id': '**Project3のページID**' //MyProjectsのデータベースIDではない。また、ページタイトル(Project3-)は含まない。
30 }
31 ]
32 },
33 }
34 };
35
36 try {
37 const url = 'https://api.notion.com/v1/pages';
38 const options = {
39 method: 'post',
40 muteHttpExceptions: true,
41 headers: {
42 'Content-Type': 'application/json; charset=UTF-8',
43 'Authorization': 'Bearer ' + NOTION_API_TOKEN,
44 'Notion-Version': '2021-08-16'
45 },
46 payload: JSON.stringify(recordObj)
47 };
48
49 const res = UrlFetchApp.fetch(url, options);
50
51 console.log(res.getResponseCode());
52 console.log(res.getContentText());
53
54 } catch (e) {
55 console.log('Error');
56 console.log(e.toString());
57 }
58}
上記を実行し、エラーなく登録されたならば、ログに200と表示され、登録された内容のJSONが表示されるはずです。
仮にエラーがある場合は、200以外のステータスコードが表示され、エラーメッセージの全文が表示されます。(muteHttpExceptions:trueに設定しています)
・正常に追加された後の状態