見出し画像

NotionからSpreadsheetへの転記について疾く書き連ねる

Housmartの鈴木です。

今回は、表題の通り、NotionからSpreadsheetへのデータの書き出しについて簡単に書いていきたいと思います。

GASを利用したNotionのdatabaseからSpreadsheetへの転記の情報を見つけることができなかったので、試行錯誤をしながら実現することとなりました。

他に同様の悩みを抱えている方のために、方法について記録に残しておこうと思います。

NotionのAPIの利用方法自体はこちらの記事をはじめとして、さまざまなページで詳しく説明がされているので、そちらを見ていただくのが良いと思います。

ユースケース

そもそも、どんな時にNotionからSpreadsheetに転記する必要があるのという点です。

色々と用途はあると思うのですが、一度Spreadsheetに転記し、情報を取りまとめ、加工した上でSlackなどの他システムと連携させるような場合には、一度Spreadsheetを挟むことで、実現が容易になると思います。

例えば。ToDoのデータベースから、直近2週間以内に発生するTaskをSlackに通知する、未完了のTask件数を通知する等です。

画像1

他にも、データベースの制御の権限周りが不便なので、予期せぬデータ喪失に備えたバックアップ目的などにも使えるかもしれません。

ちなみに、現時点(2021/6/27)ではZapierなどとの連携でも、databaseのレコードを全件取得するのは難しそうでした。

NotionのDatabase APIについて

Notionには、databaseとpageの2種類が存在します。

今回はそのうち、databaseの処理をします。API Referenceを参照するとdatabaseには以下の3種類の操作があるようです。

画像2

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への転記でした。

この記事が気に入ったらサポートをしてみませんか?