TL;DR
基本的に新規トゥートと同じ。
唯一の違いはRequest Body
のin_reply_to_id
キーの値に toot の ID 番号を指定してPOST
すること。
マストドンの特定トゥートに返信する curl
1行サンプル
以下の構文で curl
を使って Mastodon API 経由でトゥートできます。${}
内の変数を適宜自身の環境に置き換えてください。
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つの方法があります。
- Mastodon のタイムラインから取得する。
- ストリーミング API を通して取得する。
- ブラウザから手動で取得する。
ブラウザから手動で取得するのは、非合理的ですが、検証のため簡単に確認したい場合に便利です。自分の Mastodon インスタンスを開き、返信したい先のトゥートをクリックしたときの URL の末尾にある数値の ID がトゥート ID になります。
ここで表示される ID は、そのインスタンス内で割り当てられたトゥート ID です。先述したように ID はインスタンス毎に振られる ID であるため API に送信する先のホストと同じホスト(インスタンス)から取得した ID である必要があります。
リクエスト文を作成する PHP サンプル
以下は、文頭の cURL 文を PHP で作成し、外部コマンドで cURL
を実行するサンプルです。
$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 記事
- Mastodon API から「LTL」を取得する 1 行サンプル @ Qiita
- Mastodon API から「未収載」でトゥートする PHP サンプル @ Qiita
- Mastodon API で「You are being redirected」とアクセストークンの取得 @ Qiita
- Mastodon API のリクエスト制限と確認(quota 残量確認) @ Qiita
参考文献
- Toot dicts | Mastodon.py 1.0.8 Documentation @ readthedocs.io
http://mastodonpy.readthedocs.io/en/latest/#toot-dicts