Open31

「Notion のタスクを GAS で API 使って Google Calendar へ (逆反映のおまけ付き)」の読者サポート

nobuhitonobuhito

やりたいこととしては、Notionのdateの終了日時をGoogle Calenderのイベント終了日時と同期するというものです!

nobuhitonobuhito
  if ((hoursProp in props)) {
    let extent = getExtentOfHours(props[dateProp].date.start, props[hoursProp].number);

上記を下記のように修正すると期待した動作になりそうです。

  if (("endDate" in props)) {
    let extent = getExtentOfHours(props[dateProp].date.start, props["endDate"].date.start);

endDate は Notion での終了日時プロパティー名に変更してみてください。

OrkaOrka

nobuhito様。はじめまして。
非エンジニアでコードはよくわからないですがNotionとGoogleCalendarの連携がしたく、
コードを手動実行のところまでいったのですが、以下の画像ようなエラーが出てしまいました。

コードは公開していただいているものをコピペしたのですが、
原因おわかりになられますでしょうか?
よろしくお願い致します。

nobuhitonobuhito

このエラーからは、NotionデータベースのIDが間違ってるように見えます。「変数関係の準備 - 1」の notionDbId の値を見直してみると良いかと思います。

OrkaOrka

ご対応ありがとうございます!
ご指摘の部分をやり直してみたところ実行できました!
助かりました。

すけさんすけさん

質問失礼します。

イベントにかかる時間を自動算出するため、Number型(#)ではなくFormula型(Σ)でイベントの終了時刻から開始時刻を引き算する演算を組みました(プロパティ名はHoursにしています)。それで実行したところ、以下のようなエラー文が出てしまいました。

Number型ではなくFormula型のプロパティに変更した場合は、コードのどこを変更すればよいでしょうか?
ご教授いただけましたら幸いです。

nobuhitonobuhito

返事遅くなりました。NotionのAPIではFomula型の場合は式としてAPIからデータが帰って来ると思います。具体的にはどのような式になっているでしょうか?
式が分かれば具体的なやり方が分かると思うのですが、とりあえずは getExtentOfHours 関数を調整することになると思います。

ken14423ken14423

初めまして。nobuhitoさんのnotionとgoogle calender連携に関する本を購入させていただいたものです。
私はGoogleカレンダーのイベントをnotionのデータベースに登録したいと考えており、有料版で紹介されていたコードを試してみました。
一旦無料版でも公開されていたコードをコピペして、その下に有料版で公開されていたコードを入力し、Googleカレンダーに予定を新規作成して実行してみたところ、以下のようなエラーが出ました。
コードに関しては、トークンなどの入力事項以外は全く触っておりません。
こちらの対処法などわかりましたら教えていただけると幸いです。

nobuhitonobuhito

返事遅くなりました。公開している内容ですが、GoogleカレンダーからNotionへデータ連携されるのはNotionからGoogleカレンダーに登録したイベントだけという想定です。
NotionからGoogleカレンダーへイベントを登録すると、Notion側にもGoogleカレンダーのイベントIDが登録されます。Googleカレンダー側でイベントを変更すると、そのイベントIDをキーとしてNotion側でもデータを変更するという動きです。

torkralletorkralle

はじめまして、星子と申します。
大変参考になりました、ありがとうございます!

いきなりで恐縮なのですが、一点伺いたいことがございます。
この度Notion初心者向けのオンラインイベントを主催するのですが、
その際にこちらの記事を紹介させていただいてもよろしいでしょうか?

もしよろしければ、お手すきの際にお返事いただけると幸いです。
よろしくお願いいたします。

nobuhitonobuhito

返事遅くなりました。こちらこそ是非是非でお願いします。
ただ、本業のほうが忙しく、もし問い合わせがあってもすぐには返事できない可能性もあります。
そこだけご了承いただけたらと思います。

torkralletorkralle

ご返信ありがとうございます!
それではご紹介させていただきます。
お問い合わせの件承知しました!

namiki_inamiki_i

夜分に失礼いたします.
以下のエラーの原因についてアドバイスをいただけないでしょうか?

記事内のオリジナルコード74行目のremoveEvent(event, pageId)で使用される、postNotion(endpoint, payload, method)内のUrlFetchApp.fetchで以下のエラーが発生してしまいます.

(一部コードを追記しているため、オリジナルコードと画像の行数は一致しておりません.)

createEvent(props, pageId)など、他の関数内でpostNotion(endpoint, payload, method)を使用するときは問題なく動いているのですが、removeEvent(event, pageId)の場合のみ notion API 400エラーが発生します.

エラーは

  • "code" = "validation_error"
  • "message" = "body failed validation: body.properties.eventId[0].text.content should be popul... "
    です.

参考
https://developers.notion.com/reference/errors#request-limits

nobuhitonobuhito

このエラーだけだと確かなところが言えないのですが、↓のページに有る eventId 列はテキスト型になってますでしょうか?あとはプロパティ名が eventId になっているか?とか。
(すいません、ここだけ先頭の e が小文字になってますね。今気づきました。)

namiki_inamiki_i

何度も申し訳ありません.
上記について解決いたしました.

トリガーの設定について質問なのですが、
Google カレンダーの更新を検知するトリガーを動かすためには、事前にGCPでのプロジェクト設定等はされていますでしょうか?
(09:おまけ1のトリガー設定を試しているのですが、トリガーがうまく動いていない状況です.)

nobuhitonobuhito

始めの問題は解決したようで良かったです!

で、トリガの設定ですが特にGCP周りは関係ないはずです。差し支えなかったらトリガの設定画面を見せてもらえるとなにかわかるかも知れません。

namiki_inamiki_i

早速のご返信ありがとうございます.
トリガ設定画面は以下の通りです.


オーナーメールアドレスはカレンダーIDにしてあります.

よろしくお願いいたします.

(ちなみに、nobuhitoさんのコードを参考に、Notion ↔ Google tasksの相互同期を実装してみました.関数が正常に動くことは確認済みで、トリガー設定で躓いてしまっています.)

nobuhitonobuhito

設定は大丈夫そうに見えますね。あとは、Googleカレンダーには複数のカレンダーを追加できますがそのカレンダー指定が間違っていないか?と実行する関数の選択が間違ってないか?という感じですかね。

namiki_inamiki_i

アドバイスをいただきありがとうございました.
ご指摘の通り、別のカレンダーIDを指定しておりました...(解決いたしました)

(また、今回実装したGoogle ToDoリストはカレンダー上の更新イベントとして検知されないため、カレンダー更新トリガを適用できないことがわかりました.)

nobuhitoさんの記事と読者サポートの手厚いフォローにより、目標にしていた機能を実装することができました.
この度はありがとうございました.

namiki_inamiki_i

何度も申し訳ありません.
nobuhitoさんの記事・コードを参考に作成したNotion←→Google Todo連携の実装内容を、
Zenn記事として公開したいのですがよろしいでしょうか?
不都合がありましたらお申し付けください.
よろしくお願いいたします.

nobuhitonobuhito

全然問題ないですよ!紹介入れていただけるなら逆にありがたいです!

meganemegane

初めまして。本を購入させていただき、コードを試して、タスク管理が非常に楽になりました。
2022’6/29にnotionに新プロパティstatusが加わったかと思いますが、
https://www.notion.so/ja-jp/releases/2022-06-29)
これを、コードに組み込むために、
単純に
const statusProp =
の後を置き換えるだけだとエラーになるのですが、
対処方法、もしよろしければお教えいただけますと幸いです。

nobuhitonobuhito

返事遅くなってしまいすいません。
少し調べてみたところ、APIではまだstatusプロパティがサポートされてないようです。
で、多分ですが、サポートされても変数の定義だけではなくコードの調整も必要そうです。
サポートされて時間が取れたら試してみます!

ゆんゆん

初めまして!
Googleカレンダー→Notionも購入し、拝読致しました✨
2点伺いたいのですが、
①例えば10時から10時半のタスクといった1.5時間のタスクの場合、小数点以下は切り捨てられて1時間のタスクとして入ってしまうようなのですが、これを15分単位くらいで読み取る方法はありますか?
②必要時間ではなく開始日時と終了日時で管理しているデータベースについても、こちらのコードを参考に、試してみました。
Googleカレンダー→Notionは成功したのですが、Notion→Googleカレンダーでは以下のようなコードでエラーが出てしまいます。
Notion上では、きちんと開始日時より終了日時の方があとに設定されているはずなのですが💦
他にコードを打ち変えなければいけない場所があるのでしょうか?
以上2点お手隙の際にご教示いただけますと幸いです!

たろたろ

ご質問失礼します。
有料部分も購入させて頂いて、活用させて頂いております。

さて、今回無料部分のNotion→Google Calendarへの予定入力の部分なんですが、勉強のため一部プロパティの変更等をして、弊ブログに引用付きで記事を公開したいと考えております。

問題ありませんでしょうか?
※もちろん公開した場合は、URLを公開いたします。

nobuhitonobuhito

全然問題ないですよー
現在は「Notion→Google Calendar」の処理させていないので、まだ動いてるってことを確認できるだけでもありがたいです!

たろたろ

ありがとうございます。

ちなみに問題ない範囲でいいのですが、現在はどういったタスク管理されているのでしょうか?
教えてもらえたら幸いです。

Yuhei.KYuhei.K

こんにちは。こちらの有料版を購入させていただきました!
カレンダーのタイトルの後ろに別プロパティ(関数)を追加したいのですが、具体的にはどの部分を変更すればよろしいでしょうか?

例えばNameプロパティが テストイベント
Fomulaプロパティが "[003]" といった場合、
カレンダーのタイトルには テストイベント"[003]" というように出力したいです。

お手すきの際にご教示いただけますと大変助かります!!