ポンコツエンジニアのごじゃっぺ開発日記。

いろいろポンコツだけど、気にするな。エンジニアの日々の開発などの記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

とうとうNotion APIが公開されたのでGASを使って試してみる。

NotionのパブリックAPIが公開されました。

f:id:ponkotsu0605:20210516003545p:plain

まだベータ版ですが、早速Notion APIを試してみたいと思います。

Getting started

まずはドキュメントを見ながらGetting startedの項目をやっていきたいと思います。

developers.notion.com

Log into a Notion workspace as an Admin user. If you're not an Admin in your current workspace, create a new personal workspace for free.

今回は個人で使用している無料の個人ワークスペースを使っていきたいと思います。

On macOS, the Terminal app and the curl command are preinstalled.

環境はmacを使用しているので、標準で付いているcurlを使えば動作確認ができそうです。

Create a new integration

まずはインテグレーションを作成するみたいです。

www.notion.so

ここのページのNew integrationから作成します。

f:id:ponkotsu0605:20210516004215p:plain

今回はテストなので、NameにはTestを入れてみました。

f:id:ponkotsu0605:20210516004430p:plain

かんたんに作成できました。

SecretsInternal Integration Tokenのところのshowを押すことで、トークンを確認することができます。そのトークンをメモしておきます。

Share a database with your integration

とりあえずテキトーにDBを作成しておきます。

f:id:ponkotsu0605:20210516005410p:plain

右上のShareからAdd people, emails, groups, or integrationsをクリックして、先程作成したインテグレーションに共有します。

f:id:ponkotsu0605:20210516005358p:plain

このページのURLにDatabase IDが含まれるので、以下を参考にDatabase IDをメモします。

https://www.notion.so/myworkspace/a8aec43384f447ed84390e8e42c2e089?v=...
                                  |--------- Database ID --------|

(上記の例はドキュメントのを引用しました)

Add an item to a database

実際にcurlしてみてデータベースにアイテムを追加してみます。

curl -X POST https://api.notion.com/v1/pages \
  -H "Authorization: Bearer {MY_NOTION_TOKEN}" \
  -H "Content-Type: application/json" \
  -H "Notion-Version: 2021-05-13" \
  --data '{
    "parent": { "database_id": "{DATABASE_ID}" },
    "properties": {
      "Name": {
        "title": [
          {
            "text": {
              "content": "Yurts in Big Sur, California"
            }
          }
        ]
      }
    }
  }'

ここの{MY_NOTION_TOKEN}にインテグレーションのトークンを、{DATABASE_ID}にDatabase IDを入れてcurlを実行します。

{"object":"page","id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","created_time":"2021-05-15T15:56:22.610Z","last_edited_time":"2021-05-15T15:56:22.610Z","parent":{"type":"database_id","database_id":"{DATABASE_ID}"},"archived":false,"properties":{"Name":{"id":"title","type":"title","title":[{"type":"text","text":{"content":"Yurts in Big Sur, California","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":"Yurts in Big Sur, California","href":null}]}}}

すると、上記のようなJSONがレスポンスで返ってきます。

notionのページを確認してみると・・・

f:id:ponkotsu0605:20210516010019p:plain

無事、Yurts in Big Sur, Californiaという項目が増えてました。

curlでできれば、GASでもできそうですね!

GAS(Google Apps Script)からNotion APIを叩いてみる

スプレッドシート等からも簡単に呼べるGoogle Apps Script(以降、GAS)を使ってNotion APIを叩いてみます。そうすることで、スプレッドシートを操作したり、GoogleのサービスとNotionの連携が簡単にできるはずです。

スクリプトを書く

では、早速書いてみました。

function notion(text) {
  var url = 'https://api.notion.com/v1/pages';
  var notion_token = '{MY_NOTION_TOKEN}';
  var database_id = '{DATABASE_ID}';
  var headers = {
    'Content-Type' : 'application/json; charset=UTF-8',
    'Authorization': 'Bearer ' + notion_token,
    'Notion-Version': '2021-05-13',
  };

  var post_data = {
    'parent': {'database_id': database_id},
    'properties': {
      'Name': {
        'title': [
          {
            'text': {
              'content': text,
            }
          }
        ]
      }
    }
  };

  var options = {
    "method" : "post",
    "headers" : headers,
    "payload" : JSON.stringify(post_data)
  };

  return UrlFetchApp.fetch(url, options);  
}

function notionTest() {
  var result = notion('ポンコツエンジニアはごじゃっぺ');
  console.log(result)
}

curlの時と同様に、{MY_NOTION_TOKEN}にインテグレーションのトークンを、{DATABASE_ID}にDatabase IDを置き換えて実行してみてください。

実行するメソッドはnotionTest()になります。

実行すると、console.log()でcurlの時と同じようにレスポンスが出力されます。

f:id:ponkotsu0605:20210516011422p:plain

そして、Notionのページを見ると、無事追加されているかと思います。

LINEからNotionに投稿しよう

おまけです。完全に趣味の範囲で遊んでます。

LINEボットを利用して、GASからNotion APIを叩くこともできます。

LINEボットの作り方については、以前記事をまとめたので参考にしてみてください。

www.pnkts.net

「LINEのMessaging API」→「GAS」→「NotionのNotion API」

とすることで、実現できます。

実行結果は以下のようになりました。

f:id:ponkotsu0605:20210516014052p:plain

このようにLINEに投稿すると、以下のようにNotionに反映されました。

f:id:ponkotsu0605:20210516014133p:plain

このように、LINEの投稿をトリガーとするだけでなく、GASを使うことでいろんなサービスのWebhookを処理することができるので、とっても便利ですね。

さいごに

今回はNotion APIのチュートリアルとしてcurlコマンドでのページ作成(databaseのレコード作成)とGASからのページ作成を行いました。

意外と簡単にできたので驚いています。

developers.notion.com

ドキュメントのQuery a databaseを見ると、Databaseの操作で実際にQueryを投げるようなこともできたりするので、MySQLのようなデータベースとしても使えそうですね!

お問い合わせプライバシーポリシー制作物