このブログはDecupCMSを使用しているが、Notionで下書き→投稿ページにコピー、という運用になってしまい記事はたまっているのにコピーがめんどくさくなってしまったので、NotionAPIを利用しNotionをCMSとして利用する方式に変更する。
https://zenn.dev/jinku/articles/722e8f93e87111
NotionのAPIは、https://www.notion.so/my-integrationsから作成する。サイトのトークンをコピー。APIについては、Postmanに公式のPublicAPIがあるのでそちらをフォークして使用するのがよい。
データベースの一覧(POST:Sort a Database)を取得→ページの取得(GET:Retrieve block children)という流れでデータを取得することになりそう
データベースの一覧の取得はGetではなくPostである点に注意。Getではプロパティしか取得できない。Postで一覧を取得するので、ソート順などを作成日順に取得するのがよさそう
ページの取得については、取得上限がある(多分100件)。has_moreがtrueの場合は続きがあるので、next_cursorの値をstart_cursorに指定し、has_moreがfalseになるまで取得すればよい。
NotionAPIのページの返却値はマークダウンではないので、マークダウンに変換するライブラリ「notion-to-md」必要がある。
また、NotionAPIで返却される画像URLは、期限付きであるため何も対策していない場合はリンク切れを起こす(1時間)ので下記のような何かしらの対策が必要になる。
https://www.npmjs.com/package/@notionhq/client
notionhqを使用することで、typescript側から簡単にデータ取得可能
上記をnotion-to-markdownに渡すことで、ページIdのみ指定すれば本文もとれる
スクラップのタイトルと更新日を取得するためにnotion.blocks.retrieveでブロック情報を取得するも、型の推論がうまくいかずNextJSのコンパイルエラーとなりハマる。
なんでだ!
デプロイするホスティングサービスについて、firebase hostingでも良いが、app routerに対応していないという情報という情報があり、前と変わらずNetlifyにする。なお、SSRなどを使えるようにするプラグインがあるらしい。(https://wp-kyoto.net/netlifynext-jsssrserverless-mode)
環境変数も忘れずに登録(environment variables)
https://qiita.com/benjuwan/items/4a2f175b648791412203#おまけ-firebase
デプロイをしたところ、画像が表示されていなかった。
フォントの設定の仕方に注意
NEXT14移行であれば、割と簡単に導入可能。
1npm install @next/third-parties@latest next@latest
https://nextjs.org/docs/messages/next-script-for-ga
https://nextjs.org/docs/app/building-your-application/optimizing/third-party-libraries
DecupCMSではなくなったため、PUSHがされないのでデプロイ方法を変更する必要がある
https://qiita.com/nwtgck/items/e9a355c2ccb03d8e8eb0
NOTIONからAPIが実行できるようになったが、有料会員のみなので今回はスルー。
と思ったが、別にNETLIFYの管理ページでポチっとすればいいか、と思ったのでやらないことにする
- Next.js、NOTIONの記事 -