マストドンインスタンス一覧を自動で作る

概要

マストドン2.1.1より /api/v1/instance/peers が導入された。これを使えば、誰でも簡単にインスタンス一覧を作ることができる。

背景

日本語圏のマストドンではインスタンスの一覧が乱立していることが知られている。このうち、インスタンスの登録が自動化されているものはinstances.socialマストポータルがある。また、自前ではインスタンスの登録を受け付けず、instances.socialのAPIを利用しているインスタンス一覧もある。

一方、インスタンスの登録にウェブサイト管理者の承認が必要であったり、ウェブサイト管理者が自分でインスタンスを収集していたりする場合には、ウェブサイト管理者の負担が大きいという問題がある。さらに、ウェブサイト管理者がインスタンスの登録の申請に応答しなくなり、インスタンス一覧の更新が途絶えている例も少なくない。有力なインスタンス一覧の更新が途絶えた場合には、古参のインスタンスに有利であり、新興のインスタンスには不利な状況になる。

ところで、マストドン2.1.1より /api/v1/instance/peers が提供されるようになった。これは、あるインスタンスに接続されている別のインスタンスのリストを提供するAPIである。Pleromaではstats-daemonブランチでPeers APIの開発が行われており、2018年1月15日にdevelopブランチにマージされた。すでにこのAPIを運用しているPleromaインスタンスには pleroma.distsn.org がある。

このAPIを再帰的に探索することにより、誰でもインスタンス一覧を作ることができる。このインスタンス一覧はインスタンスの登録が不要で、自動的にインスタンスを収集することができる。収録されるインスタンスの数と、新しいインスタンスを捕捉する早さは、既存のインスタンス一覧を簡単に凌駕する。

インスタンス一覧の作成

そこで、この節では、Peers APIを再帰的に探索することにより、自動的にインスタンス一覧を生成する方法を解説する。ソースコードは github.com/distsn/instances にある。重要なことは、深さ優先探索ではなく幅優先探索を用いることである。幅優先探索なので、先入れ先出しのキューを用いる。

準備

原初インスタンスのリストを用意する。私の実装では、以下のインスタンスを原初インスタンスとしている。これらのインスタンスのなかにはPeers APIを提供していないものもあるが、これは、将来のバージョンアップに期待してのことである。

  • mastodon.social
  • mastodon.cloud
  • pawoo.net
  • mstdn.jp
  • friends.nico
  • mstdn.kemono-friends.info
  • mstdn.maud.io
  • mastodon.juggler.jp
  • pleroma.soykaf.com
  • pleroma.knzk.me
  • ketsuben.red
  • plrm.ht164.jp
  • pleroma.vocalodon.net
  • plero.ma
  • pleroma.taketodon.com

反復

インスタンスの収集のため、以下の動作を繰り返す。

  1. 原初インスタンスのうち、キューに登録されていないものがあれば、キューの入口に追加する。
  2. キューの出口からインスタンスを1個取り出す。
  3. 取り出されたインスタンスの /api/v1/instance/peers を取得する。
  4. /api/v1/instance/peers のアクセスに失敗した場合は、手順1に戻る。
  5. /api/v1/instance/peers で得られたインスタンスを、すでにキューに登録されているものを除いて、キューの入口に追加する。
  6. 取り出されたインスタンスを、再びキューの入口から追加する。

追加の情報を得る

Peers APIで得られるのはインスタンスのホスト名のみである。ここでは、インスタンスのさまざまな情報のうち、自動的に取得できるものを紹介する。

/api/v1/instance

/api/v1/instance で得られる情報には、以下のものがある。

  • インスタンスの名称
  • インスタンスの説明文
  • 連絡先メールアドレス
  • バージョン
  • 登録ユーザー数
  • トゥート数
  • 接続インスタンス数
  • サムネイル画像
  • トゥートの最大字数

登録ユーザー数は、あまりに簡単に取得できるがゆえに濫用された指標である。

サムネイル画像を真面目に設定しているインスタンスは少数である。しかし、結月ゆかりインスタンスサムネイル画像は素晴らしい。

トゥートの最大字数を報告するのはPleromaの独自機能である。マストドンでのイシュープルリクエストは不穏になっている。

/api/v1/instance/activity

/api/v1/instance/activity と /api/v1/instance/peers は同時期に開発され、マストドン2.1.1から有効になった。/api/v1/instance/activity で取得できる情報は以下。

  • 週間トゥート数
  • 週間アクティブユーザー数
  • 週間新規ユーザー数

一例として、分散SNSフォーラムの流速順インスタンス一覧は、インスタンスの名称、サムネイル画像、週間トゥート数を用いている。

将来の課題

悪意のあるインスタンスが、無意味なホスト名を大量に羅列した /api/v1/instance/peers を送信することで、DoS攻撃が可能だと思う。

まとめ

インスタンス一覧は /api/v1/instance/peers を使えば30分くらいで作れる。あと、インスタンス管理者はサムネイル画像を設定してくれ。

広告

投稿者: Hakaba Hitoyo

墓場一夜

“マストドンインスタンス一覧を自動で作る” への 1 件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください