Notion APIを使ってオフィスメンバーの出社表からデータを取得する
やりたいこと
Notion APIを使って今日誰が出社する予定なのか知りたい(↓イメージはこんな感じ)
https://gyazo.com/b6a950e9cb2431ed3e10360e0da45bb9
やったこと(個人アカウントで検証)
Integration を作成
DBアクセスの許可
右上のShareボタンから、追加したintegrationをInviteする
https://gyazo.com/3c743b428eaaad72cc404b6fec871d85
Insomniaでデータ確認
1.「New Request」を作成
Name:databases/:id/query
methodはPOST
https://gyazo.com/fb638ac5fb77fa7b720d2c2f62884055
<database_id>はNotion URLから確認
https://gyazo.com/3b68e257b249d24db688b5ce96b9cb12
3. 環境変数にintegration のsecret_key を設定する(⌘E で開く)
code:Base Environment
{
"secret_key": "secret_XXXXXXX"
}
4.Header に下記の情報を設定
https://gyazo.com/bf1b4298adc2ec7da9410aadc406cc26
5. JSON にfilter ,sorts情報を設定(↓木曜日にチェックしているデータを取得)
https://gyazo.com/635f4406339735a98fb9b5a7beca0fcb
5.「Send」で値を確認する
code:結果はこんな感じ.json
{
"object": "list",
"results": [
{
"object": "page",
"id": "XXXXXXX",
"created_time": "2022-01-27T05:57:00.000Z",
"last_edited_time": "2022-01-27T06:00:00.000Z",
"cover": null,
"icon": null,
"parent": {
"type": "database_id",
"database_id": "XXXXXXX"
},
"archived": false,
"properties": {
"火": {
"id": "F%3Ep%3B",
"type": "checkbox",
"checkbox": true
},
"月": {
"id": "N%5EK%7D",
"type": "checkbox",
"checkbox": true
},
"金": {
"id": "WGVQ",
"type": "checkbox",
"checkbox": true
},
"水": {
"id": "%5CG%40U",
"type": "checkbox",
"checkbox": true
},
"木": {
"id": "_lZ%3A",
"type": "checkbox",
"checkbox": true
},
"Email": {
"id": "zHEA",
"type": "email",
"email": "hayapi1@hayapi.com"
},
"Name": {
"id": "title",
"type": "title",
"title": [
{
"type": "text",
"text": {
"content": "はやぴ1",
"link": null
},
"annotations": {
"bold": false,
"italic": false,
"strikethrough": false,
"underline": false,
"code": false,
"color": "default"
},
"plain_text": "はやぴ1",
"href": null
}
]
}
},
}
],
"next_cursor": null,
"has_more": false
}
Google Apps ScriptからNotion APIを実行して値を取得する
上記で行ったデータ確認をapplication.gs で実装、当日出社にチェックがついている人のメールアドレスを取得する
code:application.js
function getNotionDbData() {
const database_id = "xxxxxxxxxxxxx";
const token = "secret_XXXXXXXXXXXXXXX";
var date = new Date () ;
let dayOfWeek = date.getDay();
// 本日出社にチェックしているデータのみ取得
let filter = {
"filter": {
"property" : dayOfWeekStr,
"checkbox": {
"equals": true
}
},
"sorts": [
{
"property": "Email",
"direction": "ascending"
}
]
}
let headers = {
'content-type' : 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + token,
'Notion-Version': '2021-08-16'
};
let options = {
'method': 'post',
'headers': headers,
'payload' : JSON.stringify(filter)
}
let notion_data = UrlFetchApp.fetch(url, options);
notion_data = JSON.parse(notion_data);
var arr =[];
for (i=0; i<notion_data.results.length;i++){
try{
record = notion_data.resultsi arr.push(
}catch(e){}
}
return arr.toString();
}
次回予告
出社状況をGoogle カレンダーから取得する
Google App Script のソースコードをGithubで管理、Github Actionsを使ってコードの編集を反映させる