目的
Notion上のDBの情報をGASを使って取得する
事前準備
Notionでインテグレーションを新規作成し、シークレットキーを取得
こちらからインテグレーションの作成を行います
https://www.notion.so/profile/integrations
新しいのインテグレーション作成>新しいインテグレーションを作成を選択
所属しているワークスペースの選択や種類、ロゴ等を選択して保存する
※自分がワークスペースのオーナーではない場合はアクセス権の更新が別途必要
すると以下のような画面が表示されるので、インテグレーションのシークレットキーを取得する
次に取得したいDBに作成したインテグレーションの接続を行う。
右上の・・・ボタンから接続先を選択して先ほど作成したインテグレーションを選択する
ここまでで事前準備は完了です。
GASを書いてみる
それではGASでNotionのDBの情報を取得するためにコードを書いていきます。
コードは以下のようになります。
function getNotionDB() {
const NOTION_API_KEY = '' // シークレットキー
const DATABASE_ID = ''; // データベースID
const url = `https://api.notion.com/v1/databases/${DATABASE_ID}/query`;
// リクエストオプションを設定
const options = {
'method': 'POST',
'headers': {
'Authorization': `Bearer ${NOTION_API_KEY}`,
'Notion-Version': '2022-06-28',
'Content-Type': 'application/json'
},
'payload': JSON.stringify({
"page_size": 10 // 取得するページ数を制限
})
};
try {
// APIリクエストを送信
const response = UrlFetchApp.fetch(url, options);
// レスポンスを解析
const result = JSON.parse(response.getContentText());
// 最初のページのプロパティを出力
if (result.results && result.results.length > 0) {
result.results.map((e) => console.log(e.properties));
}
} catch (error) {
console.error("Error:", error);
}
}
一つずつ見ていくと
const NOTION_API_KEY = '' // シークレットキー
const DATABASE_ID = ''; // データベースID
const url = `https://api.notion.com/v1/databases/${DATABASE_ID}/query`;
ここは先ほど取得したシークレットキーやデータベースID、NotionAPIを叩くためのpathを定義しています。
データベースIDは取得したいDBのurlに記載されています。
https://www.notion.so/AAAAAAAA?v=BBBBBBBB
のようなurlになっていると思うのですがAAAAAAAA
に該当するのがデータベースIDになります。
// リクエストオプションを設定
const options = {
'method': 'POST',
'headers': {
'Authorization': `Bearer ${NOTION_API_KEY}`,
'Notion-Version': '2022-06-28',
'Content-Type': 'application/json'
},
'payload': JSON.stringify({
"page_size": 10 // 取得するページ数を制限
})
};
ここではmethodやヘッダー情報などリクエストの設定を行なっています。
method
は今回リクエストを送るのでPOST
になっています。
headers
では認証情報やバージョン、コンテンツ形式などを渡します。ここで先ほど取得したシークレットキー(NOTION_API_KEY
)も渡します。
payload
は送受信を行うデータ本体のことを表していて、
"page_size": 10
をjson文字列に変換して渡しています。
try {
// APIリクエストを送信
const response = UrlFetchApp.fetch(url, options);
// レスポンスを解析
const result = JSON.parse(response.getContentText());
// 最初のページのプロパティを出力
if (result.results && result.results.length > 0) {
result.results.map((e) => console.log(e.properties));
}
}
catch (error) {
console.error("Error:", error);
}
UrlFetchApp.fetch()
で先ほど設定したurlとリクエストの設定を含めてリクエストを送信します。
JSON.parse()
でレスポンスの文字列を扱えるように定数に変換します。
正常にデータを取得できていた場合は、そのデータをconsole.log()
で出力しています。
実行してみる
GASで実行すると
{ 'ステータス':
{ id: 'B%3DXA',
type: 'status',
status:
{ id: '0d0bd16f-8ae5-4103-9f35-f5d59e94c5fe',
name: '未着手',
color: 'default' } },
'メール': { id: 'NnKA', type: 'email', email: 'test1@test.com' },
'作成日時':
{ id: 's%3FmF',
type: 'created_time',
created_time: '2024-10-05T09:04:00.000Z' },
'氏名': { id: 'title', type: 'title', title: [ [Object] ] } }
{ 'ステータス':
{ id: 'B%3DXA',
type: 'status',
status:
{ id: '0d0bd16f-8ae5-4103-9f35-f5d59e94c5fe',
name: '未着手',
color: 'default' } },
'メール': { id: 'NnKA', type: 'email', email: 'test2@test.com' },
'作成日時':
{ id: 's%3FmF',
type: 'created_time',
created_time: '2024-10-05T09:04:00.000Z' },
'氏名': { id: 'title', type: 'title', title: [ [Object] ] } }
{ 'ステータス':
{ id: 'B%3DXA',
type: 'status',
status:
{ id: '0d0bd16f-8ae5-4103-9f35-f5d59e94c5fe',
name: '未着手',
color: 'default' } },
'メール': { id: 'NnKA', type: 'email', email: 'test3@test.com' },
'作成日時':
{ id: 's%3FmF',
type: 'created_time',
created_time: '2024-10-05T09:04:00.000Z' },
'氏名': { id: 'title', type: 'title', title: [ [Object] ] } }
が出力されて正常に取得できていることが確認できました!
まとめ
今回はGASからNotion APIを叩いてDBの情報を取得するまでを行いました。
次回は取得したDBの情報を元に集計を行なってスプレッドシートに出力するまでを記事にしたいと思います。
参考