nikkie-ftnextの日記

イベントレポートや読書メモを発信

Markdownファイルの内容でNotionにpageを作る(JavaScript & Python)

はじめに

THE・年度末! nikkieです。

先日PythonでNotionにpageを作るHello worldをしました。
今回はMarkdownファイルの内容と同じpageを作ります!

目次

前回:PythonでNotionにpageを作る

  • Notionの設定
    • インテグレーション作成
      • シークレットを控える
    • 親pageをインテグレーションにコネクト
  • Pythonスクリプト
    • notion-clientで実装
      • インテグレーションのシークレットを渡す

Markdownファイルの内容でNotionにpageを作る

前回書き込んだのは、1つのparagraph(段落)です。

Hello World
こんにちは

今回は手元にMarkdownファイルがあり、マークアップも含めてNotionのpageにしたいです。
つまり、ヘッダーはNotionでもヘッダーになりますし、強調や箇条書きもNotion上で強調だったり箇条書きになったりします。

やり方を調べたところ、以下が見つかりました。

どうやらMarkdownファイルの内容をそのままNotionのpageとして作成しても、マークアップは解析されないようです。
見つけた記事ではMartianというJavaScript製ライブラリを使って、Markdownの内容をNotionのAPIに沿ったJSON形式に変換し、それをもとにpageを作っています

これと同様のPython実装はまだ見つけられていないので、今回はJavaScriptPythonのタッグでアプローチします。

MartianでMarkdownをNotion向けのJSONに変換

開発環境情報です

% npm --version
8.19.3
% node --version
v18.13.0
  • @tryfabric/martian 1.2.4

Markdownの内容でNotionにpageを作る

上のMatrianのスクリプトで作ったJSONPythonスクリプトで読み込んで、クライアントからpageを作ります。
children引数にJSONを渡します

MarkdownファイルはmartianのREADMEと同内容です。

hello _world_ 
*** 
## heading2
* [x] todo

私はPythonが一番慣れているので、JavaScriptPythonという形で進めています。
Notionのclientは公式からJavaScriptで提供されている1ので、参考記事にならって2全部JavaScriptで実装するという道も全然あります。

martianやNode.jsを触って

慣れないJavaScriptを使った感想を残します

  • Pythonの対話モードのようにやりたい!
  • 引数の扱いは process.argv
    • commanderなるもの便利そう〜)
  • ファイルの扱い fs
    • (promiseでチェーンするのはNodeっぽい印象。私のJavaScriptには無限の伸びしろがある)
  • Pythonjson.dumpjson.dumpsなんだが、JavaScriptでは?
    • JSON.stringify()!!

終わりに

Markdownファイルの内容でNotionにpageを作る方法が1つ見つかりました!

Martianが変換した結果のJSONについては、以下が積ん読です。

JavaScriptのコード、お気づきの点があったらぜひ教えてください! うまくなりたいのです


  1. 参考記事の最後には、ソースコードへのリンクもあります:GitHub - cizneeh/markdown-to-notion-demo