ついにきたNotionAPI(パブリックベータ)を触ってみる

プログラム

私が愛用している、なんでもできるWebサービス「Notion」にAPIがつきました。

以前から非公式APIは存在しましたが、非公式ゆえトークンが時々変わるなど、安定して使える代物ではありませんでした。

この度、ついにパブリックベータ版が開放されたため、早速使ってみようではないかという記事です。

Notion公式Docを見ながら進めます。

Before we begin

  • Notionに管理者ユーザーとしてログインすること
    • ワークスペースメンバーじゃなくてオーナーで入れ、ということ。
  • curlを準備すること
    • と言われたけれど、GUIのほうが私には嬉しいのでPostmanを使う。

Create a new integration

My integrationsという管理ページを開く。

New integration を開いてみる。

名前と、ロゴと、紐付けワークスペースを選択する。

とりあえずIntegration Testとしてみた。

もうできた。
WordPressの初回インストールより早い。

Share a database with your integration

ここに、NotionBlog(でぶ手帳)用のデータベースがあります。
(このNotionBlog、非公式APIを使って構築したので、紐付けが切れて記事無しになってる…)

右上のShareを押すと、インテグレーションも共有先として選べるようになっていました。

入力欄をクリックすると、ポップアウトが出てくる。

言われるがままにインテグレーションを追加。

右側の権限設定を見た感じ、Can edit(編集権限)以外も選べそうに見えるけど、未実装なのか何なのか、特に選択肢は無い。

セキュアの観点ではCan View(閲覧権限のみ)も欲しいところ。

次に進む前に、データベースIDを控えておけ、との指示。

私のページの場合、でぶ手帳テーブルはインラインテーブルなので、

右上の … をクリックして、

Copy linkをクリックしてリンクURLをコピー。

リンクURLの、ワークスペース名と?v=までの間の英数字羅列がデータベースID。
私の場合はbbe~0b5。

(以降チュートリアル逸脱)GETしてみる

チュートリアルはアイテム追加しちゃってるけど、とりあえずGETすれば満足なので、GETしてみる。

GETのドキュメントはここ

っていうか、APIドキュメントちゃんとあるやん!すごいやん!

言われたがままに設定してみました。

  • URL(GETリクエスト)
    • https://api.notion.com/v1/databases/{データベースID}
  • Headers
    • Authorization
      • Bearer {シークレットトークン}
      • インテグレーションを作ったときに表示されたシークレットトークンを使う
      • 内部統合(Internal integration)の場合はこれでいけるらしいけど、パブリックにオープンするインテグレーションは、もっと込み入ったことをするらしい
      • 詳しいドキュメントはここ
    • Notion-Version
      • 2021-05-13
      • APIのバージョニングは、ここでやるらしい。
      • 互換性のない変更が入った場合はバージョンの日付が変わる、とのこと。
      • URLの中にv1が入っているけど、このv1は永久にv1らしい。
      • 詳しいドキュメントはここ

すると、

とれました!わーい!

でもメタデータとプロパティ一覧(列一覧)しか取れてないような…

POSTってそういうことか

どうやらDBのアイテムを取るには、POSTで呼び出せるqueryというAPIを使うらしい。

DynamoDBのQueryAPIみたいなものですね。
というかすっかり忘れてたけど、NotionってAWSでしたよね…。
だからQueryなのか。

URLの末尾に/queryを足して、
メソッドをPOSTに変えただけです。

これで、えーい。

なんかとれました!

どうやらResults[]に入っているのは、1行ごとのデータの模様。

じゃあ記事の本文を見てみよう…Pageの中かな。

あれ、タイトルしか入ってない。中身は!?

ページの中身を取り出す

結論から言うと、ブロックの子要素を取るAPIを使う。

URLのblocks/と/childrenの間のIDは、先のAPIのResults[]各要素に入っていたID。
ブロックIDですね。

するとこんな感じで取れる。

ただNotionの特性上、全部がブロックとして取れるので、これをブログとして表示するのはカンタンじゃなさそう。
Notion Blogすごいな。

ちなみにページをGETするAPIもありますが、これはページの概要だけを取るだけです。
DatabaseのQueryで取れたResults[]の中身と一緒のものが取れます。

むすび

色々遊べそうな気がするけど、Notionそのものに癖があるので、全部1から組むのは難しそう。

Zapier統合も同時リリースされたので、パッと使うならこっちかも。

…IFTTT統合は、まだですか…