NotionからSpreadsheetへの転記について疾く書き連ねる
Housmartの鈴木です。
今回は、表題の通り、NotionからSpreadsheetへのデータの書き出しについて簡単に書いていきたいと思います。
GASを利用したNotionのdatabaseからSpreadsheetへの転記の情報を見つけることができなかったので、試行錯誤をしながら実現することとなりました。
他に同様の悩みを抱えている方のために、方法について記録に残しておこうと思います。
NotionのAPIの利用方法自体はこちらの記事をはじめとして、さまざまなページで詳しく説明がされているので、そちらを見ていただくのが良いと思います。
ユースケース
そもそも、どんな時にNotionからSpreadsheetに転記する必要があるのという点です。
色々と用途はあると思うのですが、一度Spreadsheetに転記し、情報を取りまとめ、加工した上でSlackなどの他システムと連携させるような場合には、一度Spreadsheetを挟むことで、実現が容易になると思います。
例えば。ToDoのデータベースから、直近2週間以内に発生するTaskをSlackに通知する、未完了のTask件数を通知する等です。
他にも、データベースの制御の権限周りが不便なので、予期せぬデータ喪失に備えたバックアップ目的などにも使えるかもしれません。
ちなみに、現時点(2021/6/27)ではZapierなどとの連携でも、databaseのレコードを全件取得するのは難しそうでした。
NotionのDatabase APIについて
Notionには、databaseとpageの2種類が存在します。
今回はそのうち、databaseの処理をします。API Referenceを参照するとdatabaseには以下の3種類の操作があるようです。
databaseの中身を一律で取得する方法は、Retrieveではなく、Query a databaseを利用することになります。
Retrieveは、データベース自体のスキーマを取得するためのもの(だと思う)だったのですが、ここで少し詰まってました。
Query a databaseについて、サンプルをGASで書くと以下のような形式です。
function notion() {
var url = 'https://api.notion.com/v1/databases/{database_id}/query';
var notion_token = {token};
var headers = {
'Authorization': 'Bearer ' + notion_token,
'Notion-Version': '2021-05-13',
};
var arr =[];
var options = {
"method" : "post",
"headers" : headers,
};
var data = UrlFetchApp.fetch(url, options);
data = JSON.parse(data)
for (i=0; i<data.results.length;i++){
try{
record = data.results[i]
Logger.log(record)
arr.push(
[record.properties.Name.title[0].plain_text,
record.properties.日付.date.start,
record.id])
}catch(e){}
}
Logger.log(arr)
}
Notionは、データ構造が非常に複雑になっており、任意の項目を取得するのに若干苦労しました。こまめにlogを見ながら進めていくのが良いでしょう。
上記の例では、database内にあるページのtitleと、日付、最後にpageのidを取得しています。
以上、本当に簡潔にではありますが、NotionのdatabaseからSpreadsheetへの転記でした。
この記事が気に入ったらサポートをしてみませんか?