はじめに
Notion を API で操作して、自動化とかデータ連係できるようになる!をモチベーションに、これから何回かに分けてハンズオンを行いながら、実際の開発を体験していきたいと思います。
ハンズオンでは、以下の前提条件がありますのでご確認ください。
Notion Integration を作成する
Notion API をはじめるたには、Notion インテグレーションの設定を行う必要があります。
すでに Notion アカウントをお持ちの方は、無料で Notion インテグレーションを設定することができます。
Notion API は、Notion 外からプログラムでページ、データベースの表示や編集を行うことが出来る機能です。
Notion API を活用することで作業の自動化が行えたり、他のサービスとの連携を行うことが出来ます。
Notion インテグレーションのページにアクセスし、「+新しいインテグレーション」メニューをクリックします。
基本情報の設定ページに遷移するので、「関連ワークスペース」を選択し(Notion インテグレーションを使用したいワークスペースを選択します。
ワークスペースはご自身の Notion 画面をご確認ください。)、「名前」に「myIntecrarion」を入力(任意の名前で問題ありません。)して、「送信」ボタンをクリックします。
シークレットの画面に遷移します。 この画面はインテグレーション画面からいつでもアクセスできます。
Notion API は、Notion 外からご自身のワークスペースの情報にアクセスするため、このシークレットを使って安全にアクセスすることができます。
シークレット画面で「表示」をクリックした後、「コピー」をクリックすることでクリップボードにコピーされます。
↓↓↓↓↓
Python 実行環境を準備する
Python の実行環境はいろいろとありますが、ここではセットアップ不要ですぐに無料で使える Google Colab を使用したいと思います。
Google Colab を使用するには Google アカウントが必要になります。すでに Python 実行環境がある方はそちらを使用して頂いて問題ありません。
Python 実行環境とGoogle Colab のはじめ方については以下の記事で解説してくれているので参考になります。
Notion API のシークレットを管理する
Notion API のシークレットは、パスワードのようなものであるため、プログラムに直接記述することは避けたいものです。(漏洩すると他の人からもアクセスされてしまう)
そこで、シークレットの管理を Google Secret Manager に任せることにします。
Google Secret Manager は Google アカウントがあれば、無料で利用することができます。
Google Secret Manager の使い方は以下の記事を参考になります。
参考記事を実行した状態の画面が以下のようになると思います。
(1)コマンド実行後に「RESTART RUNTIME」ボタンをクリックして、環境の再起動を行います。
(2)PROJECT_ID 変数に Secret Manager の プロジェクト ID (12桁の数値)を設定します。プロジェクト ID は以下のように、 Secret Manager 画面から確認することができます。
(3)SECRET_NAME 変数に、Secret Manager で作成したシークレット名を入力します。ここでは「NotionIntegration」としています。
(4)(3)の実行により my_secret 変数にシークレットが保存されるため、出力して確認します。
Colab は引き続き使用するので、画面は開いたままにしておきます。
Notion API を使ってプログラムからアクセスしてみる
以下のように Notion 外からプログラムでアクセスするページを作成します。
「Notion インテグレーション」のページを開いた状態で、Notion 画面右上のメニューボタンをクリックします。
「コネクトの追加」から作成したインテグレーション(ここでは「myIntegration」)を検索して選択します。
以下のようなダイアログが表示されるので、「はい」をクリックします。
*コネクトの追加を行ったページの子ページは自動的に Notion インテグレーションが有効になります。
「Notion インテグレーション」のページを開いた状態で、ブラウザの URL を確認し、以下のようにページ ID (英数字の羅列)を控えます。
Google Colab で以下のコードを実行して、ページタイトルを取得してみます。
import requests import json page_id = "<控えたページID>" url = "https://api.notion.com/v1/pages/" + page_id headers = { "Accept": "application/json", "Notion-Version": "2022-06-28", "Content-Type": "application/json", "Authorization": "Bearer " + my_secret } response = requests.get(url, headers=headers) data = json.loads(response.text) print(data["properties"]["title"]["title"][0]["text"]["content"])
実行後、「Notion インテグレーション」の文字列が表示されれば成功です。
まとめ
お疲れ様でした!
今回は、Notion API を利用するための準備としてインテグレーションの設定を行いました。
準備段階でちょっと戸惑うことあるかもしれませんが、いくつかインテグレーションを作成したり、シークレットを登録してみたりして慣れておくとよいかもしません。
次回からは具体的に Notion API を使って、コンテンツを取得したり編集したりといった操作を行って行きたいと思います!