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

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

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

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

3236閲覧

【Notion API】【GAS】リレーション属性指定について

Yamato_1623

総合スコア5

Google Apps Script

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2021/12/20 07:53

Notion APIとGASを用いて、Googleカレンダーの予定情報からNotionのデータベースに予定を自動追加できるようにしたいです。
その際に、自動作成する予定にリレーション項目が存在しています。
リレーションをAPIで指定する際には、リレーション先のIDを指定するだけで問題ないようにサイトに書いてあり、それを実行しましたが、予定が作成されません。
どなたか詳しい方がいらっしゃいましたら、リレーションの指定方法についてご教授ください。
よろしくお願いします。

ちなみに連携先のデータベースはウェブサイトに公開する設定にしてあります。
その他、解決に不足する情報がありましたらお気軽にお申し付けください。

↓試したリレーションの指定

GAS

1 "リレーションの項目名":{ 2 "relation":[ 3 { 4 "id":"xxxxxxxxxxxxxxxx" 5 } 6 ] 7},

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/12/20 13:50

・「予定が作成されません」とのことですが、エラーは発生しているのでしょうか。 発生しているのであれば、どういう内容のエラーが出ているのでしょうか? ・リレーション以外の項目は特に問題なく作成されるのでしょうか。
Yamato_1623

2021/12/20 23:40

ご質問ありがとうございます。GAS側でのエラーは現在出ておらず、予定自体は作成されています(昨日の段階ではエラーが出ていたのですが、おそらく他の部分でのエラーと考えられます)。しかし、リレーションに指定していたページは反映されていませんでした。 なお、リレーション以外は問題なく作成されています。 idの指定のやり方が間違っているのかな?とも思うようになってきました。
guest

回答1

0

ベストアンサー

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に設定しています)

・正常に追加された後の状態
イメージ説明

投稿2021/12/21 17:43

編集2021/12/21 22:55
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Yamato_1623

2021/12/22 04:37

ご丁寧に解説してくださり、本当にありがとうございました。結果的にエラーの原因としては、 「"}"の位置関係のずれ」と言うなんともありきたりなものでした。デバック情報を詳しく分析することで判明しました。デバックはとても有効ですね。 結果的にご迷惑をおかけする形になってしまいましたが、今回の後解説の中でリレーションについて、ひいてはNotion全体に対する理解が深まりました。本当にありがとうございます。今後も精進いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問