動かざることバグの如し

近づきたいよ 君の理想に

マストドン(mastodon)のAPIを叩いて投稿

Mastodonとは

github.com

オープンソースで出来てたTwitterSNS。中身はなんとRailsとポスグレで動いてる。

サーバー構築さえすれば誰でもサービスを始めることができるのが特徴

投稿するには?

最終的に投稿(トッートっていうらしい)をAPI経由で行うには以下の手順を踏む必要がある。

  • OAuth2 クライアントを登録
  • アクセストークンを取得
  • アクセストークンを Authorization ヘッダに指定して投稿APIを実行

用意するもの

  • アカウント1つ
  • curlが叩ける環境(自分はMac

OAuth2 クライアントを登録

まずはマストドン側にクライアントの登録を行う。 Twitterと違ってClient Nameは重複してもOKっぽい。

curl -X POST -sS https://HOST/api/v1/apps \
  -F "client_name=CLIENT_NAME" \
  -F "redirect_uris=urn:ietf:wg:oauth:2.0:oob" \
  -F "scopes=read write follow"
  • HOST : マストドン側のホスト名 mstdn.jpとかpawoo.netとか
  • CLIENT_NAME : 好きなクライアント名 日本語もOKっぽい
  • scopes クライアントに与える権限のこと read write follow の三種類があり、半角スペース区切りで記述する

正常に登録らせれると以下のようなJSONが返却される

{
  "id": 4172,
  "redirect_uri": "urn:ietf:wg:oauth:2.0:oob",
  "client_id": "****************************************************",
  "client_secret": ""****************************************************","
}

client_idとclient_secretを使って次のAPIを叩くので控えておく

アクセストークンを取得

さっき登録したクライアントと投稿に使いたいアカウントの紐付けを行う

 curl -X POST -sS https://HOST/oauth/token \
  -d "scope=write read follow&client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=password&username=USERNAME&password=PASSWORD"
  • HOST : さっきと一緒
  • CLIENT_ID : 最初のAPIで貰ったクライアントID
  • CLIENT_SECRET : 最初のAPIで貰ったクライアントシークレット
  • USERNAME : 投稿に使うアカウントのユーザー名 注意しなきゃいけないのは@hogeとかじゃなくログインに使うメールアドレス
  • PASSWORD : パスワード
  • scope : さっきと一緒

正常に叩ければ以下のように返却される

{
  "access_token": "******************************",
  "token_type": "bearer",
  "scope": "write read follow",
  "created_at": 1492271386
}

今度はaccess_tokenを控えておく

アクセストークンを Authorization ヘッダに指定して投稿APIを実行

ようやく投稿APIが叩ける

curl -F "status=hello world" -sS https://pawoo.net/api/v1/statuses --header "Authorization: Bearer ACCESS_TOKEN"

疲れた、、