TwitterAPIからMastodonAPIに移行しよう

この記事はMastodon 2 Advent Calendar 2017の記事です。 昨日はきりたんさんのきりぼっとと私でした。

末代にてMastodonをやっているきゅうりうむともうします。 唐突ですが本文に行く前に宣伝をさせてください。

私はTwitterとMastodon2つのプラットフォームに対応したWindows10向けクライアント「Flantter」を作成しています。 また.NET Standard向けに「TootNet」というMastodon向けのライブラリを作成しています。

作者は使いやすくなるように一生懸命作っているのでみなさんたくさん使ってみてください。 (GithubでStarを投げてもらうとすごく喜びます)

この「Flantter」なのですがもともとは名前の通りフランドール・スカーレットちゃんが可愛いことを広めたいと思いTwitterのみを使用することを想定して作られたクライアントなのですが、 Mastodonというプラットフォームが広まったときに「TwitterMastodonって似てるからTwitterクライアントも簡単にMastodonクライアントに作り変えることができるのでは?」と思い あれこれ調べながらMastodonでも使えるように作り変えられた物となっています。

今回はiOS, Android, Windows, Mac, Linux 様々なTwitterクライアントがシームレスにMastodonに移行できるよう、APIの違いなど得られた知見みたいなものを共有したいと思います。

TwitterAPIMastodonAPIの違い

TwitterAPIMastodonAPIは割りと似ています。 ですが一部のAPIがなかったり、微妙に違う挙動だったりします。

なので、今回TwitterAPIとMastodonAPIの対応表を作成しました!

これを使えばあなたのTwitterクライアントもすぐにMastodonクライアントに早変わり! 自分がクライアント作者じゃなくてもオープンソースなクライアントをMastodon用に改変して公開しよう!

その他MastodonAPIで気をつけたほうがいいところ

MastodonAPIは若干クセがあるというか理解をしておいたほうがいい仕様が幾つかありますので書いておきます。

引数を渡した時点でtrue

GET /api/v1/timelines/publicでは引数localにtrueを指定することでlocalタイムラインを取得できます。

実際にMastodonのWebクライアントでは?local=trueを引数として渡しています。

一方でこのエンドポイントは引数に?local=falseを指定してもローカルタイムラインが帰ってきます。

このようにMastodonの一部のエンドポイントでは引数の有無で返す中身を変えてきたりするので注意しましょう。 (そもそもbooleanなんて何処にも書いてないが)

よくわからない引数を渡すとエラー

当然なのかわかりませんが、一部の引数に対応していないものを渡すとエラーが帰ってきます。json以外で。

例えばPOST /api/v1/statusesでは引数にvisibilityを指定できます。 "direct", "private", "unlisted", "public"の4つが使えますがこれ以外を指定した際にはhtmlでエラーが返ってきます。

普通そんなことないと思いますが、大文字小文字の違いでもエラーになるので少し念頭に入れておくといいかもしれないですね。

おわりに

Twitterあんなことで荒れているさなかにこういう記事を出せるのはある意味でベストタイミングだったかもしれません。 みなさんもこの記事を参考にTwitter関連のサービスをMastodonへ移行することを考えてみてはいかがでしょうか?


明日はアドベントカレンダー最終日、hakaba-hitoyoさんです。 よろしくお願いします!

脱中央集権のためのデザイン: セレブのためのインターネットを99 %の手に取り戻すhakabahitoyo.wordpress.com