もし、前の記事を見ていない場合はこちらを確認した方がわかりやすいかもしれません。
主張
今回の主張は「外部の情報を参照するPlayやAiScript Appを作るのならば、ページ機能を活用すると良い」といった内容のものです。
今回のポイントは外部の情報を参照するという点です。
これは外部との情報をページを通して取得するという試みです。
用語整理
AiScript App
ウェジェットの一種です。
ページ
Misskeyの機能の一つです。
前提確認
一般的には一度公開したAiScript App用のソースコードは、他人の手に渡ると書き換えができません。また、データの更新のたびにユーザーにソースコードの更新をお願いするのもあまり親切ではありません。そうすると、データの更新をソースコードの変更で達成するべきではないことがわかります。そこで、データをソースコードに書き込まずに、ソースコードの外に置くことを考えます。
また、外部のサービスのデータを取り込む場合にもデータをページに置くことで、ソースコードを書き換えずに変更を反映することができます。
その上にあげた二つの目標
- ソースコードを変更せずにデータの更新を反映する
- 外部のデータを利用する
を達成する構成を考えていきます。
構成
botの役割
botは主になんらかのデータを受け取り、その結果をMisskeyのページに反映させる機能を持つものとします。その上でbotはこのような流れで動作するでしょう。
- ソースとなるサーバーにリクエストを飛ばす
- レスポンスを受け取る
- レスポンスで得たデータを整形する
- 整形したデータをページのコンテントに埋め込み、
"pages/update"
を使ってページに反映させる
例
具体的な例として、今回はMYCOEに追加された音声直近15件を表示するようなAiScript Appのウェジェットを作成することを考えます。
botはMYCOEのページにアクセスして、配布リストから最近取得された音声を取得します。そして、そのデータを扱いやすい形式(JSONなど)にしてMisskeyのページのコンテントとして埋め込み、ページを更新します。これで情報の更新は完了です。
AiScript Appはページにアクセスして、コンテンツに含まれたJSON形式などのデータを取得します。そしてそれを使って、それぞれ振る舞いを変えます。