こんにちは。中島です。
今年の1月くらいにChatGPTとNotionを連携させて自社の情報をChatGPTに回答させてみました。
そこで、今回はNotion APIにどのようにアクセスしたかを簡単にまとめていこうと思います。
APIキー(トークン)の取得と権限
NotionのAPIキーを取得するために、下記のサイトにアクセスします。
https://www.notion.so/my-integrations「New integration(インテグレーション)」をクリックして、ボタンを押していきます。
進んでいくうちに、機能の設定が可能です。
- コンテンツを読み取る
- コンテンツを更新
- コンテンツを挿入
今回は、読み取るだけなので、コンテンツを読み取るだけにチェックを入れていきます。
進んでいくと、
シークレット トークンをコピーできます。
こちらを後で使っていくので、コピーしておきましょう!
ページに設定する
作成したトークンにアクセスできるページを設定します。
細かくトークンを切り替えることで、すでにあるNotionの情報を壊してしまうことを防ぐことができます!
今回は、読み取り専用にしてあるので問題ありません!
※Notionのトークンは、設定したページから下の情報を全て取得できます。
右上の「・・・」をクリック
↓
コネクトの追加
↓
先ほど作成したインテグレーション名を選択
これでNotion側の設定は完了です。
検索して取得するサンプルコード(Python)
今回は、一つのトークンのみを使用しているので、下記のように定義しておきます。
class Notion:
def __init__(self):
self.headers = {
'Notion-Version': '2022-06-28',
'Authorization': 'Bearer ' + NOTION_API_KEY,
'Content-Type': 'application/json',
}
アクセスを切り替えるために、トークンを切り替えたい場合は、下記のように書いておけば良いと思います。
class Notion:
def __init__(self, token=NOTION_API_KEY):
self.headers = {
'Notion-Version': '2022-06-28',
'Authorization': 'Bearer ' + token,
'Content-Type': 'application/json',
}
Notionの検索
Notion内の検索を利用して情報を取得することができます。
この検索機能とChatGPTのfunction callを組み合わせることで簡単に社内の情報にアクセスできるように設定しています。
def search(self, query: str, start_cursor="", page_size=10) -> list[dict]:
"""
Params
---
query: str
検索クエリ
start_cursor: str
検索開始位置
page_size: int
取得件数
Returns
---
res: list[dict]
検索結果
"""
request_json = {
"query": query,
"page_size": page_size,
}
if start_cursor:
request_json["start_cursor"] = start_cursor
response = requests.post(
"https://api.notion.com/v1/search",
headers=self.headers,
json=request_json
)
response = response.json()
return response.get('results', [])
ページの取得
ここでは、ページ内の情報を取得しています。
先ほどの検索で得られた情報を元に、さらに詳しくページ内の情報を取得することができます。
def get_page_contents(self, page_id: str) -> dict:
"""
Params
---
page_id: str
ページID
Returns
---
res_text: dict
ページの本文
"""
if not page_id:
return NotionSearch(
result=[],
has_more=False,
next_cursor=""
)
response = requests.get(
f"https://api.notion.com/v1/blocks/{page_id}/children",
headers=self.headers,
)
if response.status_code != 200:
return NotionSearch(
result=[],
has_more=False,
next_cursor=""
)
return response.json()
まとめ
今回は、Notionから情報を取得してみました。
簡単にNotionの情報にアクセスできるので、皆さんも遊んでみてはいかがでしょうか!
いろいろなサービスを触って見るのは面白いと思います!