CUEBiC TEC BLOG

キュービックTECチームの技術ネタを投稿しております。

Notion API 入門 第1回 インテグレーションを作成する

はじめに

Notion を API で操作して、自動化とかデータ連係できるようになる!をモチベーションに、これから何回かに分けてハンズオンを行いながら、実際の開発を体験していきたいと思います。

ハンズオンでは、以下の前提条件がありますのでご確認ください。

  • Notion アカウントが作成済みであること
  • Google アカウントが作成済みであること
  • ハンズオンでは Python を使用します

Notion Integration を作成する

Notion API をはじめるたには、Notion インテグレーションの設定を行う必要があります。

すでに Notion アカウントをお持ちの方は、無料で Notion インテグレーションを設定することができます。

Notion API は、Notion 外からプログラムでページ、データベースの表示や編集を行うことが出来る機能です。

Notion API を活用することで作業の自動化が行えたり、他のサービスとの連携を行うことが出来ます。

Notion インテグレーションのページにアクセスし、「+新しいインテグレーション」メニューをクリックします。

myIntegration

基本情報の設定ページに遷移するので、「関連ワークスペース」を選択し(Notion インテグレーションを使用したいワークスペースを選択します。

ワークスペースはご自身の Notion 画面をご確認ください。)、「名前」に「myIntecrarion」を入力(任意の名前で問題ありません。)して、「送信」ボタンをクリックします。

基本設定

シークレットの画面に遷移します。 この画面はインテグレーション画面からいつでもアクセスできます。

Notion API は、Notion 外からご自身のワークスペースの情報にアクセスするため、このシークレットを使って安全にアクセスすることができます。

シークレット画面で「表示」をクリックした後、「コピー」をクリックすることでクリップボードにコピーされます。

シークレットの確認
シークレットの確認
↓↓↓↓↓
シークレットのコピー
シークレットのコピー

Python 実行環境を準備する

Python の実行環境はいろいろとありますが、ここではセットアップ不要ですぐに無料で使える Google Colab を使用したいと思います。

Google Colab を使用するには Google アカウントが必要になります。すでに Python 実行環境がある方はそちらを使用して頂いて問題ありません。

Python 実行環境とGoogle Colab のはじめ方については以下の記事で解説してくれているので参考になります。

zenn.dev

Notion API のシークレットを管理する

Notion API のシークレットは、パスワードのようなものであるため、プログラムに直接記述することは避けたいものです。(漏洩すると他の人からもアクセスされてしまう)

そこで、シークレットの管理を Google Secret Manager に任せることにします。

Google Secret Manager は Google アカウントがあれば、無料で利用することができます。

Google Secret Manager の使い方は以下の記事を参考になります。

zenn.dev

参考記事を実行した状態の画面が以下のようになると思います。

Colab でのシークレット読み込み
Colab でのシークレット読み込み

(1)コマンド実行後に「RESTART RUNTIME」ボタンをクリックして、環境の再起動を行います。

(2)PROJECT_ID 変数に Secret Manager の プロジェクト ID (12桁の数値)を設定します。プロジェクト ID は以下のように、 Secret Manager 画面から確認することができます。

Secret Manager のプロジェクトID
Secret Manager のプロジェクトID

(3)SECRET_NAME 変数に、Secret Manager で作成したシークレット名を入力します。ここでは「NotionIntegration」としています。

(4)(3)の実行により my_secret 変数にシークレットが保存されるため、出力して確認します。

Colab は引き続き使用するので、画面は開いたままにしておきます。

Notion API を使ってプログラムからアクセスしてみる

以下のように Notion 外からプログラムでアクセスするページを作成します。

はじめての Notion インテグレーション
はじめての Notion インテグレーション

「Notion インテグレーション」のページを開いた状態で、Notion 画面右上のメニューボタンをクリックします。

「コネクトの追加」から作成したインテグレーション(ここでは「myIntegration」)を検索して選択します。

コネクトの追加
コネクトの追加

以下のようなダイアログが表示されるので、「はい」をクリックします。

*コネクトの追加を行ったページの子ページは自動的に Notion インテグレーションが有効になります。

コネクトの追加の確認ダイアログ
コネクトの追加の確認ダイアログ

「Notion インテグレーション」のページを開いた状態で、ブラウザの URL を確認し、以下のようにページ ID (英数字の羅列)を控えます。

Notion ページ ID
Notion ページ 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 を使って、コンテンツを取得したり編集したりといった操作を行って行きたいと思います!