C#からMastodonが使えるMasto.NETの紹介

あすかです。

ぱおぱお!ぱおぱおぱおぱおぱおぱお!
ぱおぱおぱおぱお?
ぱおぱおぱおぱおぱおぱお!!!!!!
ぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱお!!!!!!!!!!!!!!

ぱお!
ぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱお!!!
ぱおぱおぱおぱおぱおぱおぱおぱお!

ぱおぱおぱおっ?ぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱお!!!!!!
ぱおぱおぱおぱおぱおぱおぱおぱおぱお!!!!!!!!!!


というわけで、今回はぱおぱおを扱うライブラリの紹介です。

概要

Mastodonとは、ご存知、一言で言うなら分散型Twitterです。
住民たちがそれぞれ好きな島にばらばらになっていくけど、連合タイムラインでいつでも繋がれるよっていうあれです。
先行記事のほうが詳しいしわかりやすいので、続きはそちらへどうぞ。

そのMastodonですが、REST APIを公開しています。
むろん、API専用の中央集権的なサーバなんてないので、インスタンス(サーバ)ごとに呼び出すことになりますが、APIの呼び出し方はどこも一緒です。ドメインが違うだけです。

REST APIは、ここで公開されています。
documentation/API.md at master · tootsuite/documentation · GitHub

それで、REST APIがあるってことは、当然.NETのライブラリがもうあるってこと‥‥?
はい、あります。

github.com

glacasa氏というイケメン外国人が作成したライブラリです。ありがたくいただきましょう。ぺろぺろ
日本語の紹介記事もちゃんとあります。

qiita.com

しかしこのライブラリ、破壊的変更もたまーにあります。あすかがバカだから。

Masto.NETを導入

追記:nugetきました:https://www.nuget.org/packages/Mastonet

Install-Package Mastonet -Pre

(nugetパッケージからインストールの場合、以下の作業は不要です)

17年4月23日現在、nugetにはまだ出ていないので、dllほしけりゃ自分でビルドしなければいけない感じです。

dllができたら、プロジェクトの「参照を追加」から、

f:id:kmynews:20170423104324p:plain

右下の「参照」ボタンから、自分でビルドした「Mastodon.dll」を選択して、リストにチェックが入っていることを確認してOKを押します。

f:id:kmynews:20170423104358p:plain

ですが、この方法ですと、Masto.NETが依存しているNewtonsoft.Jsonは、同時にはインストールされません。
なので、そちらはアプリプロジェクトの方で別途インストールする必要があります。

Install-Package Newtonsoft.Json


Masto.NETを使ってみる

今回作成したコードは、この節の最後に全文を掲載します。

アプリを登録

まず、MastodonAPIをいじるには、Mastodonにアプリを登録してClientIdClientSecretを得る必要があります。このあたりはTwitterと一緒ですね。

この2行でアプリができました。
ここで得られたappRegistrationには、ClientIdClientSecretが入っています。
次回以降は、アプリを作らず、appRegistrationオブジェクトを自分で作ってアクセスすることになります。

ユーザログイン

Mastodonで作成したユーザでログインします。

Eメールとパスワードを入れるだけのお手軽ログイン!
Masto.NETにはこの他にもOAuthによるログインが提供されていて、そっちが推奨されています。
本記事ではめんどくさいので割愛。

クライアントを作る

MastodonAPIを使うためのクライアントを、ここで作ります。
このクライアントを通して、MastodonAPIを呼ぶ感じになります。


連合タイムラインをストリーミングする

今回は、連合タイムラインだけ見てみます。
ストリーミングとその結果表示に必要なコードは、これだけです。

ね、簡単でしょ?

【注意】mstdn.jpでストリーミングを行う場合

mstdn.jpは、ストリーミングだけ特別に専用のURIが用意されています。
他のサーバと同じ方法では、ストリーミングが利用できません。

Masto.NETでは、このような状況にも対応する方法が用意されています。

client.GetPublicStreaming("streaming.mstdn.jp");

これだけです。

ソースコード

これが全文です。短いのでGitHubにはあげてません。
コンソールアプリとして作成しています。


実行

ストリーミングで、いろいろな発言が流れてきます。
わーいやったー!

f:id:kmynews:20170423110922p:plain

.NET Framework 4.5.2以前の場合(17.5.4追記)

.NET Framework 4.5.2以前をターゲットにしている場合は、上のプログラムが動かないサーバが存在するようです。(Pawooなど)
そんな場合は、以下のコードをプログラムの最初に入れてみてください。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

詳細:https://github.com/glacasa/Mastonet

C#でクライアントアプリ作ってる人たち

実行結果見ると分かる通り、発言の内容はHTMLタグで囲まれています。

本格的にC#でクライアント作るなら、HTMLタグを自分で解析して、ネイティブのUIコードに変換しなければいけません。
どちらかといえば、C#よりも、Electronとかの、HTML記述によるアプリ作成フレームワークのほうが向いているかもしれません、Mastodon

特に、テキストの中にリンクを埋め込むあたり。
WPFやUWPでは、TextBlockの中にRunHyperlinkを入れることで、簡単に実現できますが、スマホだとそれが難しいんですよね。AndroidとかiOSとか。

それでもC#でアプリ作ってる方たちが、何人かいらしてます。

github.com

github.com

github.com

それから、ソースは公開されていないようですが、Twitterとの連携アプリをC#で作ろうとされている方もいらしてます。
すいはん on Twitter: "手抜きだけどTwitter/Mstdnの画像アップロードに対応 https://t.co/xU7feFxWfZ"

この他にも、C#を使ったと思しきアプリがタイムラインにいくつか流れています。
C言語とWin32APIで作ったという、今の時代だと猛者扱いされる方もいらしてます。

実はあすかもC#で作ってます。
UWPとXamarinで頑張ってます。PR歓迎!

github.com

Mastodonのコミュニティ、もっと盛り上がればいいですね!