C#からMastodonが使えるMasto.NETの紹介
あすかです。
ぱおぱお!ぱおぱおぱおぱおぱおぱお!
ぱおぱおぱおぱお?
ぱおぱおぱおぱおぱおぱお!!!!!!
ぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱお!!!!!!!!!!!!!!
ぱお!
ぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱお!!!
ぱおぱおぱおぱおぱおぱおぱおぱお!
ぱおぱおぱおっ?ぱおぱおぱおぱおぱおぱおぱおぱおぱおぱおぱお!!!!!!
ぱおぱおぱおぱおぱおぱおぱおぱおぱお!!!!!!!!!!
というわけで、今回はぱおぱおを扱うライブラリの紹介です。
概要
Mastodonとは、ご存知、一言で言うなら分散型Twitterです。
住民たちがそれぞれ好きな島にばらばらになっていくけど、連合タイムラインでいつでも繋がれるよっていうあれです。
先行記事のほうが詳しいしわかりやすいので、続きはそちらへどうぞ。
そのMastodonですが、REST APIを公開しています。
むろん、API専用の中央集権的なサーバなんてないので、インスタンス(サーバ)ごとに呼び出すことになりますが、APIの呼び出し方はどこも一緒です。ドメインが違うだけです。
REST APIは、ここで公開されています。
documentation/API.md at master · tootsuite/documentation · GitHub
それで、REST APIがあるってことは、当然.NETのライブラリがもうあるってこと‥‥?
はい、あります。
glacasa氏というイケメン外国人が作成したライブラリです。ありがたくいただきましょう。ぺろぺろ
日本語の紹介記事もちゃんとあります。
しかしこのライブラリ、破壊的変更もたまーにあります。あすかがバカだから。
Masto.NETを導入
追記:nugetきました:https://www.nuget.org/packages/Mastonet
Install-Package Mastonet -Pre
(nugetパッケージからインストールの場合、以下の作業は不要です)
17年4月23日現在、nugetにはまだ出ていないので、dllほしけりゃ自分でビルドしなければいけない感じです。
dllができたら、プロジェクトの「参照を追加」から、
右下の「参照」ボタンから、自分でビルドした「Mastodon.dll」を選択して、リストにチェックが入っていることを確認してOKを押します。
ですが、この方法ですと、Masto.NETが依存しているNewtonsoft.Jsonは、同時にはインストールされません。
なので、そちらはアプリプロジェクトの方で別途インストールする必要があります。
Install-Package Newtonsoft.Json
Masto.NETを使ってみる
今回作成したコードは、この節の最後に全文を掲載します。
アプリを登録
まず、MastodonのAPIをいじるには、Mastodonにアプリを登録してClientId
とClientSecret
を得る必要があります。このあたりはTwitterと一緒ですね。
この2行でアプリができました。
ここで得られたappRegistration
には、ClientId
とClientSecret
が入っています。
次回以降は、アプリを作らず、appRegistration
オブジェクトを自分で作ってアクセスすることになります。
ユーザログイン
Mastodonで作成したユーザでログインします。
Eメールとパスワードを入れるだけのお手軽ログイン!
Masto.NETにはこの他にもOAuthによるログインが提供されていて、そっちが推奨されています。
本記事ではめんどくさいので割愛。
連合タイムラインをストリーミングする
今回は、連合タイムラインだけ見てみます。
ストリーミングとその結果表示に必要なコードは、これだけです。
ね、簡単でしょ?
【注意】mstdn.jpでストリーミングを行う場合
mstdn.jpは、ストリーミングだけ特別に専用のURIが用意されています。
他のサーバと同じ方法では、ストリーミングが利用できません。
Masto.NETでは、このような状況にも対応する方法が用意されています。
client.GetPublicStreaming("streaming.mstdn.jp");
これだけです。
実行
ストリーミングで、いろいろな発言が流れてきます。
わーいやったー!
.NET Framework 4.5.2以前の場合(17.5.4追記)
.NET Framework 4.5.2以前をターゲットにしている場合は、上のプログラムが動かないサーバが存在するようです。(Pawooなど)
そんな場合は、以下のコードをプログラムの最初に入れてみてください。
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
C#でクライアントアプリ作ってる人たち
実行結果見ると分かる通り、発言の内容はHTMLタグで囲まれています。
本格的にC#でクライアント作るなら、HTMLタグを自分で解析して、ネイティブのUIコードに変換しなければいけません。
どちらかといえば、C#よりも、Electronとかの、HTML記述によるアプリ作成フレームワークのほうが向いているかもしれません、Mastodon。
特に、テキストの中にリンクを埋め込むあたり。
WPFやUWPでは、TextBlock
の中にRun
やHyperlink
を入れることで、簡単に実現できますが、スマホだとそれが難しいんですよね。AndroidとかiOSとか。
それでもC#でアプリ作ってる方たちが、何人かいらしてます。
それから、ソースは公開されていないようですが、Twitterとの連携アプリをC#で作ろうとされている方もいらしてます。
すいはん on Twitter: "手抜きだけどTwitter/Mstdnの画像アップロードに対応 https://t.co/xU7feFxWfZ"
この他にも、C#を使ったと思しきアプリがタイムラインにいくつか流れています。
C言語とWin32APIで作ったという、今の時代だと猛者扱いされる方もいらしてます。
実はあすかもC#で作ってます。
UWPとXamarinで頑張ってます。PR歓迎!
Mastodonのコミュニティ、もっと盛り上がればいいですね!