5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Mastodon API で「返信」をトゥートする 1 行サンプル(bash, PHP)

Last updated at Posted at 2017-09-05

TL;DR

基本的に新規トゥートと同じ。
唯一の違いは Request Bodyin_reply_to_id キーの値に toot の ID 番号を指定して POST すること。

マストドンの特定トゥートに返信する curl 1行サンプル

以下の構文で curl を使って Mastodon API 経由でトゥートできます。${} 内の変数を適宜自身の環境に置き換えてください。

bash
curl -X POST \
     -d "status=${toot_msg}" \
     -d "visibility=${visibility}" \
     -d "in_reply_to_id=${toot_id}" \
     --header "Authorization: Bearer ${access_token}" \
     -sS https://${host}/api/v1/statuses

TS;DR

Mastodon で特定トゥートに返信するには、基本的に通常のトゥートを POST するのと同じですが、in_reply_to_id キーが含まれると返信トゥート扱いになります。その際の in_reply_to_id キーの値は返信先のトゥート ID です。

Mastodon API 返信プロトコル

以下は返信トゥートを行う(RESTful リクエストする)ための必須項目です。

項目 内容
エンドポイント https://${host}/api/v1/statuses
(例:https://qiitadon.com/api/v1/statues
メソッド POST
ヘッダー Authorization: Bearer ${access_token}
(アクセストークンは必須です)
POST するデータ 下記 POST データをご覧ください

POST データ

キー
status 返信内容。curl で送信する場合は UTF-8 文字列を URL エンコードした文字列。
visibility 公開レベル。以下の4つがあります。
direct, public, unlisted, private
in_reply_to_id 返信先のトゥートID

戻り値

項目 内容
戻り値 JSON形式の status データ

トゥート ID の確認

トゥートは、Mastodon の内部では「status」もしくは「statuses」と呼ばれており、各トゥートは「ID」を持っています。

新規トゥートの場合は、API 経由でトゥートした時の戻り値である JSON 形式の status データを解析することで、そのトゥートに割り当てられた ID が得られます。

返信トゥートの場合も、基本的にはトゥートと同じく API にリクエストした際の戻り値から確認でき、いずれも id キーがそのトゥートの ID となります。

この ID は各々のマストドン・サーバー(インスタンス)ごとで異なり、マストドン・サーバー間でのユニークな ID(連合間の一意の ID)は JSON の uri キーになります。

トゥート ID を戻り値以外から得るには、以下の3つの方法があります。

  1. Mastodon のタイムラインから取得する。
  2. ストリーミング API を通して取得する。
  3. ブラウザから手動で取得する。

ブラウザから手動で取得するのは、非合理的ですが、検証のため簡単に確認したい場合に便利です。自分の Mastodon インスタンスを開き、返信したい先のトゥートをクリックしたときの URL の末尾にある数値の ID がトゥート ID になります。

ここで表示される ID は、そのインスタンス内で割り当てられたトゥート ID です。先述したように ID はインスタンス毎に振られる ID であるため API に送信する先のホストと同じホスト(インスタンス)から取得した ID である必要があります

リクエスト文を作成する PHP サンプル

以下は、文頭の cURL 文を PHP で作成し、外部コマンドで cURL を実行するサンプルです。

sample.php
$schema       = 'https';
$host         = 'qiitadon.com';
$method       = 'POST';
$endpoint     = '/api/v1/statuses';
$access_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$toot_msg     = 'Hello Qiitadon too!';
$toot_msg     = rawurlencode($toot_msg); //メッセージをcURL用にURLエスケープ
$visibility   = 'unlisted'; // ※1
$toot_id      = xxxxxx;     // ※2 

// ※1 投稿のプライバシー設定
//    「未収載」    -> 'unlisted'
//    「公開」      -> 'public'
//    「非公開」    -> 'private'
//    「ダイレクト」 -> 'direct'
// ※2 toot の URL に記載されている statuses の番号、もしくはオリジナルの toot の送信結果
//    から得られる `id` 番号

/* cURL クエリ文作成 */
$query  = "curl -X ${method}";
$query .= " -d 'status=${toot_msg}'";
$query .= " -d 'visibility=${visibility}'";
$query .= " -d 'in_reply_to_id=${toot_id}'";
$query .= " --header 'Authorization: Bearer ${access_token}'";
$query .= " -sS ${schema}://${host}${endpoint};";

/* cURL リクエストの送信 */
$result_json= `$query`; //バッククォートで実行。JSONで結果が返ってくる
print_r($result_json);

合わせて読みたい Qiita 記事

参考文献

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?