notionのデータをGASで取得できるって聞いたので叩いてみた
とりあえずGASでAPI叩いてみたよ!!
手順
notionに新しいインテグレーションを追加
notion>設定>コネクト>インテグレーションを作成または管理する、などから以下のURLを開く
【+新しいインテグレーション】からインテグレーションを追加する
トークンを取得する
データを取得したいページやデータベースに対して、1で作ったインテグレーションを追加
右上の…を押す
メニューの下の方にある「コネクトを追加」から1で作ったインテグレーションを追加する
GASを書いて叩いてみる!
手順1、2については公式のガイドの統合を作成するに書いてあったりするんだけど、最初2の作業が必要と思ってなくてAPIリファレンスでエンドポイントをみながらいきなりGASのコードで叩いてみたら404で返ってきてぴえんってしてました。(ちなみにID間違いだと400が返ってきた。)
実際のエラー例:そんなURLはねーよ。
{ object: 'error',
status: 400,
code: 'validation_error',
message: 'path failed validation: path.database_id should be a valid uuid, instead was `"入力したID"`.' }
実際のエラー例:統合(コネクトを追加)してなくね??
{ object: 'error',
status: 404,
code: 'object_not_found',
message: 'Could not find database with ID: 入力したID. Make sure the relevant pages and databases are shared with your integration.' }
コードについて
こんな感じで動きました。
名前的にRetrieve a databaseを使うのかなって思ったらQuery a databaseを使うらしいです。
function notionDataGet() {
const databaseId = 'データベースのID';
const url = 'https://api.notion.com/v1/databases/'+databaseId+'/query';
const token = '1で作成したトークン';
var headers = {
'content-type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + token,
'Notion-Version': '2022-06-28',
};
let options = {
'method': 'post',
'headers': headers,
"muteHttpExceptions": true
};
var notionData = UrlFetchApp.fetch(url, options);
notionData = JSON.parse(notionData);
console.log(notionData)
return
};
ポイント
データベースのIDはnotionのURLのうち、以下の「hogehoge」の部分が該当します。
https://www.notion.so/hogehoge?v=piyopiyo
Notion-VersionはAPIリファレンスのエンドポイントのページのサンプルのコードが2022-06-28だったからこうしたのだけど、先駆者たちのコードだと違う日付だったりして、どれが正解なのか。。。わからぬ。
これをすることでGASでログが出て情報が確認できました!!!
データのサンプルはAPIリファレンスの右下の「200 - Result」をクリックすると見ることができます。
次はこれを活用して何か作ろうと思います。