Draftsのアクションを使えばiPhoneから気軽にNotionへメモできる

はじめに

私は日々のメモをNotionに保存しています。

Notionはメモアプリとしてはとても高機能で便利なのですが、その分手軽さがないことが弱点です。メモを取りたい時にNotionを開いて新しいページを作ってメモを取る…といったことをしているのはおっくうです。そこで、もっと手軽にテキスト情報を編集できる「Drafts」というアプリを使って、テキストをNotionに投稿しています

Draftsで整理したメモをNotionへ投稿するScriptを作ったのでご紹介します。メモはNotionのデータベースに追加していくように作っています。(私はメモ用のデータベースを「PermanentNote」という名前にしているので、スクリプトの中にPermanentNoteという名前が出てきています。)

なお、Actionの作成は Drafts PRO 限定の機能です。Drafts無料版をご利用の方は、記事の一番最後にあるリンクから今回ご紹介したActionをDLしてご利用ください。

Drafts ActionとNotion

Service Action か Script か

Drafts ActionでNotionを扱うには、2つの方法があります。

  1. Service Action Steps / Notion を使う
  2. Script を使ってNotionにアクセスする

お手軽にNotionを扱うなら 1. で充分ですが、できることが限られており自由に投稿することができません。
例えば今回のように「データベースにページを作成する」ということができません。そのため、今回は2. のScriptを記述する必要があります。

DraftsのスクリプトにはNotionクラスが用意されています。
これはNotion APIのラッパーで、これを使えば簡単にNotionと接続することが可能です。
実際のデータ作成時にはNotion APIの知識も必要ですが、今回のように簡単なスクリプトであればそこまで難しいものではありません。

それでは、さっそくスクリプトを書いてゆきましょう。
まずはPermanentNoteを投稿するための関数です。

function addPermanentNote(title) {
  let database_id;
  let credential = Credential.create("PermanentNoteDBID", "Enter DatabaseId for LiteratureNote.");
  credential.addTextField("database_id", "Database ID");
  if (credential.authorize()) {
    database_id = credential.getValue("database_id");
  } else {
    console.log("クレデンシャルの取得に失敗しました。");
  }

  let endpoint = "https://api.notion.com/v1/pages"
  let data = {};
  data["parent"] = {"database_id": database_id}
  data["properties"] = {
    "Name": {
      "title": [
        { "text": { "content": title } }
      ]
    }
  }

  let response = notion.request({  
      "url": endpoint,
      "method": "POST",
      data: data
  });
  if (response.statusCode == 200) {
    console.log("SUCCESS!");
    console.log(response.responseText);
    let content = JSON.parse(response.responseText);

    return content["id"];
  } else {
    console.log(`Notion Error: ${response.statusCode} ${notion.lastError}`);  
    context.fail();  
  }
}

中身を細かく見てゆきます。

データベースIDの登録

PermanentNoteデータベースのIDを指定する必要があります。
DraftsにはCredentialsという機能があります。

これは、スクリプト内で必要となるパスワードのようなものを、安全な形で保存しておく場所です。
今回は database_id を保存しています。
初回実行時にdatabase_idを聞かれるので、保存しておくと次からは自動的に呼び出して使ってくれます。

  let database_id;
  let credential = Credential.create("PermanentNoteDBID", "Enter DatabaseId for LiteratureNote.");
  credential.addTextField("database_id", "Database ID");
  if (credential.authorize()) {
    database_id = credential.getValue("database_id");
  } else {
    console.log("クレデンシャルの取得に失敗しました。");
  }

投稿するデータを指定する

  let endpoint = "https://api.notion.com/v1/pages"
  let data = {};
  data["parent"] = {"database_id": database_id}
  data["properties"] = {
    "Name": {
      "title": [
        { "text": { "content": title } }
      ]
    }
  }

ここではNotion APIの知識が必要になります。細かいことはNotionクラスがやってくれますが、投稿するデータの中身はNotion APIの仕様に従って準備する必要があります。

詳細は別に記事を書きますが、ここではdatabase_idで指定するデータベースに、titleという名前のページを作るようなデータを指定しています。

Notionへの投稿

  let response = notion.request({  
      "url": endpoint,
      "method": "POST",
      data: data
  });
  if (response.statusCode == 200) {
    console.log("SUCCESS!");
    console.log(response.responseText);
    let content = JSON.parse(response.responseText);

    return content["id"];
  } else {
    console.log(`Notion Error: ${response.statusCode} ${notion.lastError}`);  
    context.fail();  
  }
}

ここでNotionに投稿します。
ここはほぼおまじないなので、このように書く、以上のものはないです。

この関数を呼び出す

ここまでで、addPermanentNote(title)を呼び出せばタイトルをnotionに投稿することができるようになります。

これを呼び出す部分はこちらです

var notion = Notion.create();  
let title = draft.title;
let page_id = addPrermanentNote(title);

draft.titleは、draftの一行目を取得する文章です。
このスクリプトは開いているdraft上で実行するので、開いているdraftの一行目を取得します。
これで、開いているdraftの一行目をNotionに投稿することができます。

初回実行時

このスクリプトを実行すると、最初はdatabase_idとNotionのページを聞かれます。

database_id

ページを作りたいデータベースのデータベースIDを入力してください。
入力したデータベースIDは保存され、2度目以降は聞かれません。

アクセスのリクエスト

ブラウザが開き、確認画面を挟んでデータベースの選択画面が表示されます。ページを作りたいデータベースを選択してください。

なぜ2回もデータベースを指定するの?と思われるかもしれませんが、データベースIDの登録は実際にデータベースを操作するためのもの、アクセスのリクエストはNotionがアクセスされることを許可するためのものなので、それぞれ別物です。

これらをすませるとスクリプトは成功です。Notionにページが登録されていることを確認してください。


登録したいdraftを開いて、アクションを実行する
Notionにページが登録されている

ダウンロード

今回作成したActionはこちらでダウンロードできます。

Drafts Directory: memo to Notion
Example actions and other extensions for Drafts, the quick-capture notes app.

最後に

今回はDraftsからNotionにページを登録するアクションを作成しました。
Draftsで整理してこのスクリプトを実行するだけで、Notionにページが投稿されるようになります。ぜひ試してみてください!

コメント

タイトルとURLをコピーしました