フォロー

Fedibirdの投稿の絵文字リアクション、クライアントアプリで表示するのは簡単だよ。

static_urlがアニメーションしないカスタム絵文字画像、urlがアニメーションする(こともある)カスタム絵文字画像。

account_idsは誰がリアクションしたかの情報で、無視してもいいし、手元にアカウント情報持ってないやつだけ/api/v1/accounts?id[]=1111&id[]=1112&id[]=1113ってAPIコールして欲しいのだけ拾ってきてもらってもいい。

実装するわけではないのでただの興味本位なのですが、Mastodonにおける"account_id"って、同一人物でもサーバーごとに異なるものが振られて管理されているのでしょうか?

そうです。account_idはサーバ固有です。

たとえば私のaccount_idは1ですが、そんな番号になるのは、もちろんサーバごとだからです。

ActivitiPub全体でのIDは、URI形式で になります(リンクに変換されるので画像もつけておきます)。

APIは、クライアントと直接やりとりするサーバの間のやりとりを規定していて、他のサーバとのやりとりは想定されていません。

たとえば noellabo@fedibird.com という文字列からaccount_idを知りたい時は、/api/v1/accounts/lookup?acct=noellabo@fedibird.com というAPIコールを行って取得します。

グローバルな表現と、ローカルな表現を、必要な時に変換しながら操作します。

なるほど。
/api/v1/accounts/:idが「おたくのサーバーでIDが:idって人がいるらしいんですけど、どこの誰ですか?」で/api/v1/accounts/lookup?acct=:acctが「Fedivirse界に:acctってやつがいるみたいなんですけど、おたくはご存知ですか? 知ってたらIDは何番ですか?」みたいな感じですかね?

うん、そうそう。

クライアントアプリ書くときは特にそうなんだけど、サーバをまたいだマルチアカウント対応して、違うサーバのアカウントでブーストするとか、サーバを跨いだ操作をしたくなることがあるんで、そういうときに違うサーバのaccount_idとかstatus_idを調べないといけないのね。

ユーザー操作に対応する場合は、別に検索用のAPIも使えるんだけど、だいたいそんな感じ!

SubwayTooterで叩いているAPIが見えるんですけど、何回か異なるAPIを叩いているみたいなんですよね。必然的に通信回数は増えるものの、サーバー間の違いやアカウントの違いををあまり意識せずにフォローやブーストができるの、うまくできている仕組みだなあ……。

ということは、基本的にはaccount_idの一番大きい数字が「fedibirdが知っている全てのActivityPubアカウント数」ってことになりますね?

Mastodonの途中のバージョンまでは連番だったんだけど、途中から推定しづらいSnowFlakeと呼ばれるID形式に変わっています。

大小比較はできるので、ID同士でどちらが新しいものかは判定できるんですが、桁はムチャクチャ大きくなっているので、そこから総数はさっぱりわかりません!

Snowflake ID - Wikipedia en.wikipedia.org/wiki/Snowflak
SnowFlake初めて聞きました! なにげにTwitterが開発した方式ってのが皮肉ですね……w(技術とサービスは別とはいえ)

twitter-textっていう、URLやIDを抽出したり文字数数えたりするライブラリも使ってますよ。そんなにアンチじゃないですw

そう考えると、Twitterが築き上げたものって大きかったんだなあ、って感慨深くなりますね。

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。