(Misskey)絵文字系のAPIを触る時はバージョンに気をつけよう
この記事はイウしキー Advent Calendar 2023 及び Misskey(2) Advent Calendarに参加しています。
はじめに
皆さんMisskey使ってますか?私は今年初めにMisskeyと出会ってからFediverseにハマり、色々なサーバーを行ったり来たり、コード書き男性の端くれとしてちょこちょこと関連アプリを開発したりしました。
Misskeyの各種APIを触っていく中で、カスタム絵文字関連のAPIの使い方が、Misskey及びMisskeyフォークのバージョン違いによって大きく異なっているのが結構大変だったので備忘としてまとめようと思います。
比較するバージョン
現行(v13~v2023.11.2)系
多分今一番使用されているMisskeyです。今回はAPIレスポンスの内容自体に変更が無いのでioフォークは詳しく紹介しませんが、独自にレートリミット等を設けていたりかなり改造が施されているので、Misskey.ioをターゲットにアプリ開発する場合気をつける必要があるでしょう。
v12系
2023年初頭、Misskey本家がv12→v13にアップデートしたタイミングで破壊的変更が多く含まれた為、一部のサーバーではv12をForkして保守する動きがあります。(その現場に居合わせていなかったので間違った説明をしていたらごめんなさい)今回はtaiymeさんのForkを使用します。
Firefish(旧Calckey)系
上記v12からForkされたMisskey派生系で最も有名なのがFirefish(旧Calckey)でしょう。精力的なアップデートにより最早別物と言えるほどの変化を遂げており、バックエンドはRustで書き直されているらしいです。
絵文字一覧の取得
現行系
emojis
APIエンドポイントを使用します。
{
emojis: [
{
aliases: [
'えもじ',
'emozi',
...
],
name: 'emoji',
category: 'emoji_category',
url: '*******.png',
},
...
]
}
emojis
配列にサーバーに登録されている全ての絵文字情報が入っています。このエンドポイントだけではライセンスなど一部の情報が取得出来ない事に気を付けて下さい。絵文字に対して全ての情報を取得する場合はemoji
エンドポイントを使用します。
v12系
サーバー情報を取得するmeta
エンドポイントに含まれています。この事実に気付くまでめちゃくちゃ多くの時間を犠牲にしました。
{
maintainerName: '***',
maintainerEmail: '***',
version: '12.119.2-taiyme-v1.2.0',
name: '***',
uri: '***',
...
emojis: [
{
id: '***',
aliases: [
'えもじ',
'emozi',
...
],
name: 'emoji',
category: 'emoji_category',
host: null,
url: '*******.png',
},
...
]
}
現行系と同じくemojis
配列にサーバーに登録されている全ての絵文字情報が入っています。
Firefish系
v12系と同じくmeta
エンドポイントから取得します。
{
maintainerName: '***',
maintainerEmail: '***',
version: '1.0.5-rc',
name: '***',
uri: '***',
...
emojis: [
{
id: '***',
aliases: [
'えもじ',
'emozi',
...
],
name: 'emoji',
category: 'emoji_category',
host: null,
url: '*******.png',,
license: 'ライセンス',
width: 128,
height: 128,
},
...
]
}
v12系に追加してライセンス情報や画像の大きさ等の情報が追加されているのが特徴です。
ノート
notes
やnotes/timeline
等のエンドポイントから取得できるノート・リアクションに含まれる絵文字の情報です。
現行系
{
id: '***',
createdAt: '***',
userId: '***',
user: {
...
emojis: {
remote_emoji: '***.png', // リモートの場合
},
},
text: '***',
...
reactions: {
'🎉': 2,
':emoji@.:': 1,
':remote_emoji@remote.server:': 3,
},
reactionEmojis: {
'remote_emoji@remote.server': '***.png', // リモートの絵文字URL
},
emojis: {},
...
}
ローカルの絵文字は***@.
、リモートの絵文字は***@ドメイン
で表現されます。ローカルの詳細な絵文字情報は配信されない為別途emojis
APIを叩く必要があります。
v12系
{
id: '***',
createdAt: '***',
userId: '***',
user: {
...
emojis: [
{
name: 'emoji',
url: '***.png',
},
],
},
text: '***',
...
reactions: {
':emoji@.:': 1,
':remote_emoji@remote.server:': 1,
},
emojis: [
{
name: 'emoji',
url: '***.png',
},
{
name: 'remote_emoji@remote.server', // リモートの絵文字URL
url: '***.png',
},
...
],
...
},
似ているようでかなり違います。まずreactionEmojis
要素が無くなっていること、絵文字の内容が連想配列で無くなっていること、ローカルの絵文字情報も配信されている事等が挙げられます。
Firefish系
{
id: '***',
createdAt: '***',
userId: '***',
user: {
...
emojis: [
{
name: 'emoji',
url: '***.png',
width: 128,
height: 128,
},
],
},
text: '***',
...
reactions: {
':emoji@.:': 1,
':remote_emoji@remote.server:': 1,
},
reactionEmojis: [
{
name: 'emoji',
url: '***.png',
width: 128,
height: 128,
},
{
name: 'remote_emoji@remote.server', // リモートの絵文字URL
url: '***.png',
width: 128,
height: 128,
},
...
],
emojis: [
{
name: 'emoji',
url: '***.png',
width: 128,
height: 128,
},
{
name: 'remote_emoji@remote.server', // リモートの絵文字URL
url: '***.png',
width: 128,
height: 128,
},
...
],
...
},
v12系のレスポンスをベースに、互換性確保の為かreactionEmojis
要素が復活し、emojis
と同じ内容の配列が入っています。まあデータの型が現行Misskeyと違うのであんまり意味ないんですが
こちらも絵文字のサイズ情報が格納されています。サードパーティクライアント開発者には嬉しいですね。
まとめ
MisskeyのAPIを触る時は対象サーバーのバージョンを確認し、APIコンソールから使用したいエンドポイントのレスポンスを確認するのが吉でしょう。
だいぶあっさりした記事でしたがお役に立てれば幸いです。
Discussion