「Notionのワークスペース内におけるページ更新履歴一覧」情報をNotion APIを使って取得・表示するプログラムを実装してみた

2021.08.10

先日、Notionに関して「ワークスペース全体のページ更新履歴を見たい」という思いから下記ブログエントリを投稿しました。

「続きはまたどこかで書きたいなー」という形でエントリを結んでいたのですが、ひとまず「そんな形」のものをこしらえてみたので当エントリではその内容を紹介したいと思います。

目次

 

前提条件(環境準備)

紹介するスクリプトは下記環境で動作するようにしています。

% sw_vers          
ProductName:	Mac OS X
ProductVersion:	10.15.3
BuildVersion:	19D76
% python --version
Python 3.8.6
% jq --version
jq-1.6

 

実装したプログラム

ここからは「やりたいこと」を実現するプログラムをサンプルコードとして共有します。「とりあえず出来れば良いや」というくらいの軽い気持ちで取り組んだのであまり大したことはしてません。

 

必要なデータを取得するところまで(Shellスクリプト)

1つ目は先日投稿した下記エントリで調べた内容を実践する形で、「必要なデータを取得する」ところまでをShellスクリプトで実装したものとなります。NOTION_API_TOKENの部分に、予め取得したNotion APIトークンの情報を設定すれば使えるようになっています。

ポイントは60行目と78行目から始まるデータ取得箇所。上記エントリでは言及してませんでしたが、ここの2つの処理は「Notionで生成したテーブルにおける新しい行・ページ」の情報を取得する内容になっています。「テーブルヘッダー部分で任意の名称列を持っていれば、その値を持ってくる」という感じで無理くり(?)データを引っ張ってきている感じです。下記実行文では「会議名」というヘッダー項目を持つものを取得しています。

#######################################################
## ワークスペース配下にあるテーブル関連ページ(議事録).
#######################################################
curl  -X POST 'https://api.notion.com/v1/search' \
  -H "Notion-Version: 2021-05-13" \
  -H 'Authorization: Bearer '$NOTION_API_TOKEN'' \
  -H 'Content-Type: application/json' \
  --data '{
    "sort":{
      "direction":"descending",
      "timestamp":"last_edited_time"
    }
  }' |\
jq -c '. | select (.object == "list")' | \
jq '.results[] | select (.object == "page" and .properties["会議名"] !=null)' | \
jq -c '{ object: .object, last_edited_time: .last_edited_time, id: .id, page_title: .properties["会議名"].title[].plain_text } ' >> update-histories-notion.json

実際に取得対象としたテーブルデータ。ヘッダ部に「会議名」とあれば、そのページ項目の「会議名」を引っ張ってくるよ、という流れですね。ここはワークスペース全体で「ヘッダ項目名をこういう風にしておいてもらえればそのデータ持ってくるよ」というルールを決めておく対応で良いんじゃないかなと個人的には考えてます。

 

JSONファイルを整形しHTMLファイルとして出力(Python)

2つ目は上記スクリプトの実行で生成されたJSONファイルを使い、HTMLファイルとして閲覧・利用出来る形のものを生成するという内容になっています。「タイムゾーンの変換」と「ページIDをURLとしてアクセス出来るようにする」加工等はPythonでやった方が手っ取り早いなーという判断でPythonスクリプトとして実装しました。

 

スクリプト実行

実行に際しては、上記2ファイルを同じパスに配置した上でShellスクリプトを実行してください。HTMLファイルが生成されるので、それを開きます。

% chmod +x get-notion-update-histories.sh
% ./get-notion-update-histories.sh 
:
:
% ls notion_update_histories.html 
notion_update_histories.html

以下がHTMLファイルの内容です。まぁ必要最低限の情報だけ出した感じですね。ただこれだけでも十分(個人的には)助かります。

 

まとめ

という訳で、Notion APIを利用して「ワークスペース全体のページ更新履歴情報を取得する」内容について都合2本のエントリで紹介しました。

内容的にはNotionワークスペース管理者にしか刺さらない内容かな?と思いますが、ワークスペース単位での利用状況を把握する上でもこういった情報を得られるのは便利なのではないかとも思います。気になった方は是非お試し頂けますと幸いです。