AndroidからMastodonのAPIを叩いてみました

mstdn今話題のSNS、MastodonがAPIを公開していたので叩いてみました。

Mastodonとは?

オープンソースで公開されているSNS(ソーシャル・ネットワーキング・サービス)。

見た目はTwitterに似ていますが主な違いとして、

  • ローカルタイムラインというインスタンスの公開設定の投稿が流れてくるタイムラインがある。

  • オープンソースなので誰でも自由にインスタンスが建てられる。

この2つが挙げられます。

インスタンスとはサーバーのことで、日本で有名なインスタンスは以下の3つだと思います。

  • mstdn.jp
  • pawoo.net
  • friends.nico

APIについてはこちら:documentation/API.md at master · tootsuite/documentation

はじめに

この記事はAndroidアプリ開発初心者による初心者のための解説となります。

私は他言語をいくつか触っていますが今回の開発で初めてJavaを触った程度であり、詳しくは理解していません。

関連書籍を読みつつ1日くらいAndroid Studioを触ってから始めました。

当初はREST APIについてもよくわかってませんでした。

環境

  • Android Studio 2.3.2

  • Android Emulator (Nexus6P API 25)

クライアント登録・アクセストークン取得

まずはじめにクライアントを登録してclient_idとclient_secretを払い出してもらってから、アカウント認証をしてaccess_tokenを取る必要があります。

その手順を一気にやってくれるのがAccess Token Generator for Mastodon API

Formに以下の情報を入力し、

  • Mastodon URL(インスタンスのURL)

  • Client Name(これから作るクライアントの名前)

  • Web site(クライアントのURL)

  • Scopes(権限のことです、[read write follow]がいいでしょう)

[Publish access_token]を押して、アカウント認証ページでログインすると

  • access_token

  • client_id

  • client_secret

上記3つが表示されるのでメモを取っておきましょう。

access_tokenはアカウントとクライアントを結びつけた鍵のようなもので権限が必要なアクセスの際に使います。

※私は最初APIについて全くわからなかったのでこちらを使わせて頂きました。

 便利ではありますが作者様がgithubのREADMEで仰っているようにあくまで実験用のものです。

 本格的にクライアントを作るのであれば自分で実装するべきでしょう。

(POSTメソッドを理解して投稿もできるようになった今なら実装できそうです)

コード(基本部分)

今回使うクラスをインポートしたり、文字列を宣言したりしましょう。

このあたりはAndroid開発の基礎だと思うのでいろいろな書籍やサイトで紹介されていると思います。

XMLファイル編集

ボタンやビューを作ります。

テストなのでシンプルに作りました。

Mastodonは投稿ごとに公開設定を変更できます。

スピナーの値の参照先としてapp/res/values/strings.xmlに以下を追記します。

また、アプリのインターネット接続を許可するためにapp/manifestsを開いて

を追記してください。

mstdo-view こんな感じになります。

ユーザー情報の取得

とりあえず簡単そうなログインユーザー情報の取得からやってみました。

  • Methods

    • Accounts

      Getting the current user:

       GET /api/v1/accounts/verify_credentials

      Returns the authenticated user’s Account.

APIドキュメンテーションのこの部分です。

アクセストークンに紐付けられたユーザーの情報が返ってきます。

  • AsyncTask

  • Uri.Builder

  • HttpURLConnection

上記3つが重要です。詳しくはリファレンスなどを読むことをオススメします。

また、AndroidアプリはHTTP接続を非同期処理で行う必要があります。

AsyncTaskを継承したクラスか無名クラスの中でHTTP接続を行いましょう。

投稿してみる

大まかなアクセス方法もわかったので投稿してみましょう。

先程の情報取得はGETメソッドでしたが、投稿はPOSTメソッドです。

  • Methods

    • Statuses

      Posting a new status:

       POST /api/v1/statuses

      Form data:………

      Returns the new Status.

今回のコードではstatusとvisibilityのみを指定して投稿しました。

Optionalの通り、最低限statusは必要です。

情報取得のときのInputStreamとは逆にOutputStreamを使います。

JSON文字列を作る方法はちゃんとあると思いますが、無理やり文字列で作ってしまいました。

データを送信するときはPOSTの宣言、データ形式の指定、送信情報のバイトエンコードが重要です。

mstdn-post フォームに入力してボタンを押すと投稿できました。

最後に

SNSはAPIを触るのにとても良い教材ですね。

四苦八苦して書いたコードから投稿されたときはとても感動しました。

調べているとmastodon4jというJavaのライブラリがありました。

Androidアプリのサンプルもあるのでそちらを参考にするのも良さそうです。

私もいずれ触ってみたいと思います。

naritaki/NetworkTest: Mastodon

※このページのコードは私が勉強用に継ぎ接ぎで作ったコードですので動作の保証はできません。


お世話になったサイト

成田哲洋
山登りが好きな初心者プログラマ。最近のマイブームは散歩。