OpenWikiのOGPを表示できるようにする
ストーリー
GW-6995 OpenWiki を共有した時に OGP を表示できる external_link
概要
- Open な Wiki を Twitter や Slack などに共有したときに OGP を表示できるようにする
- GROWI App 名と Wiki のページ名を 動的に表示させる
- OGP に表示できる文字数を制限して、文字数を超過したら .... みたいにする
- デザインはコスモレナ社と相談 or 自分で作成する
仕様
- OGP 生成方法
- プランA
- 画像生成ライブラリを用いて、なんらかのアクションによって生成する(GROWI 本体に組み込む)
- プランB
- 別途 OGP生成用サーバーを立ち上げる(GROWI ユーザーが自分で立ち上げる)
- vercel/og-image external_link
- fork してデプロイして使う
- クエリパラメータに文字を含めることで、生成される画像の文字を変化させることができる
- growi/packages 配下に置く?
- OGP 生成用サーバーはリクエストすると OGP が返ってくるだけなので、リクエストの有無は GROWI 側で制御する必要がある
- vercel/og-image external_link
- 別途 OGP生成用サーバーを立ち上げる(GROWI ユーザーが自分で立ち上げる)
- プランA
- OGP を生成するページ
- public な GROWI かつ public なページ
- slack bot を使ったページ作成、検索では上記にプラスして private な GROWI かつ public なページ(今回のスプリントではここまではいけないと思う)
- OGP 生成タイミング
- プランAの場合
- ページのアクティビティを監視(作成、更新、非公開など...)
- プランBの場合
- OGPサーバーへのリクエスト時(URLを共有した際に共有したwebサービスがURLに対してリクエストを行った際?)
- プランAの場合
- OGP 埋め込み方法
アーキテクチャー
::: drawio 1VhNc9owFPw1PpKxLMsfR0hS2pl2kmkOaY+KLUAzBlMjAvTX9wlL2JINdagJ6QWsJ+lZ3t23ku3g2/l2XNDl7Fuesszx3HTr4DvH80ISwK8M7MoAQrIpI9OCpypWBZ74b6aCroquecpWxkCR55ngSzOY5IsFS4QRo0WRb8xhkzwz77qkU9YIPCU0a0afeSpmZTTywir+mfHpTN8ZBXHZM6d6sHqS1Yym+aYWwvcOvi3yXJRX8+0tyyR4Gpdy3qcjvYeFFWwhukxQuL/SbK2ebfz94fmLXBl7ZYVapNjpJ4fZADI0RpsZF+xpSRPZswGeITYT8wxaCC6bC1Frg6yCbWshtbAxy+dMFDsYonsDBZKSCdagbSrMkY7NanhHKkYVzdND6goJuFBgtAODG8A8jB/3sBTXxgXHV8TFb+CSZFw+yzUR8UITET96R0QQaUDieEEGdxhNcglMDZXg1zrXHYPV3teGMACFy23VCVfT/f+958TIGSKdDlZSZlT9DcgX6VC6G7SSjK5WPDGRZlsufsC1e+P6nmr/3LexR1T7TkLq6sau1nhkBQdwQPxl7ChvLLXcc5Wvi4TV9HOUSFiJiyJT3Q0mSQuROlawjAr+at6/jV21hMec7yk6IiTiWgIpH0XNqvuqnQhZinQ9M5GgxZSJRiLgj+5qw5ZywOrEgn3rPsTwe7goM1qzdfp8Mlkx4dhqPxDTrQCClgI4W5pBEBrSjKPozdIERRa7Mp3nRjpQ5kMI60CVcN/a1Vud1V4SaZjjyQLw2gvgnfRtb6nxufqOPctx/U76PkdeYQ/yOgjCFAMOLicG3CqGqzEfWcyTM5nH2EpkW2R/zLccwvSeSJoSAJy/0hd40zCYpxmfLqQsgCrJ30ieKjgc5YeqY87TVOYYFQw2ZPqyzydJVtYLycnIIXdq11YvIyhsl4HWqn10ObyLqBs49eN+2044AOsivm9AjXpRQmxO6GcLiPqs0ZuYWKYdnlentQMPiYxdJcRv31U6Vb3XYQvA1zQCHMVm/dpn4K5G4GMrEb6cETRfU7UR4A9qBLog/tkIQLsoxL1QPwiRwRi5hBVof2nhKvg4XHXmpY3WU6btYtITWf4lyGl7Vz3Xp1Hdo9Ff/PmILXZx06s5pXfkq8Kbj0z254kLOmXLRqyqz//vq69U7ymnJJbDDfqpRfOLBLLYO6cyoVl95C2HV5/K8f0f :::
- ページの URL を共有
- Client(web サービス)が リクエスト
- pageId から path を解決、OGP の表示の可否判断、可であれば view に OGP server からのレスポンスを pipe するエンドポイントを挿入
- レンダリングされた HTML をパース、meta tag(og:image) を探す
- ${parmaLink}.ogp にリクエスト
- 画像生成
- レスポンス