今回実験に使うMastodonインスタンスは自分のインスタンスにしました。 多分他のインスタンスでもやり方は同じだと思います。
まずはアプリケーションを登録しないといけないので登録します。
Mastodon APIの叩き方を見て作業します。
OS: macOS 10.13 ターミナル: zsh
以下は一例です。
MASTODON_HOST=mstdn.mimikun.jp
CLIENT_NAME=トゥートテスト
curl -X POST -sS https://${MASTODON_HOST}/api/v1/apps \
-F "client_name=${CLIENT_NAME}" \
-F "redirect_uris=urn:ietf:wg:oauth:2.0:oob" \
-F "scopes=read write follow"
すると、このようなJSONが返ってきます。
{"id":"13","name":"トゥートテスト","website":null,"redirect_uri":"urn:ietf:wg:oauth:2.0:oob","client_id":"CLIENT_ID","client_secret":"CLIENT_SECRET"}%
さきほど取得したclient_id
とclient_secret
を使ってMastodonインスタンスから認証を受け、アクセストークンを取得します。
curl -X POST -d "client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=password&username=EMAIL_ADDRESS&password=PASSWORD&scope=${SCOPES:-read write follow}" -Ss https://mstdn.mimikun.jp/oauth/token
このようにアクセストークンが返ってきました。
{"access_token":"MY_ACCESS_TOKEN","token_type":"bearer","scope":"read write follow","created_at":1513769204}%
早速TLの取得をしてみます。
ACCESS_TOKEN=MY_ACCESS_TOKEN
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" -sS https://mstdn.mimikun.jp/api/v1/timelines/home
公式ドキュメントにはこうありました。
かならず必要なのはstatus
だけで、他は任意でした。
Field | Description | Optional |
---|---|---|
status |
The text of the status | no |
in_reply_to_id |
local ID of the status you want to reply to | yes |
media_ids |
Array of media IDs to attach to the status (maximum 4) | yes |
sensitive |
Set this to mark the media of the status as NSFW | yes |
spoiler_text |
Text to be shown as a warning before the actual content | yes |
visibility |
Either "direct", "private", "unlisted" or "public" | yes |
in_reply_to_id
- リプライ先のID
media_ids
- メディアファイルのID(配列で渡す)
sensitive
- NSFWにするかどうか(
true
orfalse
) - デフォルトは
false
- NSFWにするかどうか(
spoiler_text
- CW(内容注意)の説明文
visibility
- 公開範囲(
direct
,private
,unlisted
orpublic
) - デフォルトは
public
- 公開範囲(
日本語や空白は%エンコードが必要らしいです。
ACCESS_TOKEN=MY_ACCESS_TOKEN
STATUS=Toot%20Test%20for%20cURL
curl -X POST -Ss https://mstdn.mimikun.jp/api/v1/statuses \
--header "Authorization: Bearer ${ACCESS_TOKEN}" \
-d "status=${STATUS}"
レスポンスです。
{"id":"99206380879954851","created_at":"2017-12-20T11:27:19.597Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"https://mstdn.mimikun.jp/users/mimikun/statuses/99206380879954851","content":"\u003cp\u003eToot Test for cURL\u003c/p\u003e","url":"https://mstdn.mimikun.jp/@mimikun/99206380879954851","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"reblog":null,"application":{"name":"トゥートテスト","website":null},"account":{"id":"1","username":"mimikun","acct":"mimikun","display_name":"","locked":false,"created_at":"2017-12-11T14:12:58.689Z","note":"\u003cp\u003e所謂本垢\u003c/p\u003e","url":"https://mstdn.mimikun.jp/@mimikun","avatar":"https://s3-ap-northeast-1.amazonaws.com/mstdn.mimikun.jp/accounts/avatars/000/000/001/original/0bda64b42f18263b.jpeg","avatar_static":"https://s3-ap-northeast-1.amazonaws.com/mstdn.mimikun.jp/accounts/avatars/000/000/001/original/0bda64b42f18263b.jpeg","header":"https://mstdn.mimikun.jp/headers/original/missing.png","header_static":"https://mstdn.mimikun.jp/headers/original/missing.png","followers_count":30,"following_count":53,"statuses_count":84},"media_attachments":[],"mentions":[],"tags":[],"emojis":[]}%
Twitterと同じような感じで
- 画像をアップロード
- その画像のIDを取得
- 投稿APIに画像IDを添えて叩く です。
Media APIを叩いてみます。
ACCESS_TOKEN=MY_ACCESS_TOKEN
curl -X POST -Ss https://mstdn.mimikun.jp/api/v1/media \
--header "Authorization: Bearer ${ACCESS_TOKEN}" \
-F "[email protected]"
レスポンスが返ってきました。
{"id":"3103","type":"image","url":"https://s3-ap-northeast-1.amazonaws.com/mstdn.mimikun.jp/media_attachments/files/000/003/103/original/25d3906d25574413.png","preview_url":"https://s3-ap-northeast-1.amazonaws.com/mstdn.mimikun.jp/media_attachments/files/000/003/103/small/25d3906d25574413.png","remote_url":null,"text_url":"https://mstdn.mimikun.jp/media/csCiyShtqflXQnXu_hc","meta":{"original":{"width":1280,"height":768,"size":"1280x768","aspect":1.6666666666666667},"small":{"width":400,"height":240,"size":"400x240","aspect":1.6666666666666667}},"description":null}%
画像IDはarrayで渡さないといけないので、media_ids[]=3103とします。
ACCESS_TOKEN=MY_ACCESS_TOKEN
STATUS=Image%20Toot%20Test%20for%20cURL
MEDIA_ID=3103
curl -X POST -Ss https://mstdn.mimikun.jp/api/v1/statuses \
--header "Authorization: Bearer ${ACCESS_TOKEN}" \
-d "status=${STATUS}&media_ids[]=3103"
レスポンスが返ってきました。
{"id":"99206533341780974","created_at":"2017-12-20T12:06:05.903Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"https://mstdn.mimikun.jp/users/mimikun/statuses/99206533341780974","content":"\u003cp\u003eImage Toot Test for cURL\u003c/p\u003e","url":"https://mstdn.mimikun.jp/@mimikun/99206533341780974","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"reblog":null,"application":{"name":"トゥートテスト","website":null},"account":{"id":"1","username":"mimikun","acct":"mimikun","display_name":"","locked":false,"created_at":"2017-12-11T14:12:58.689Z","note":"\u003cp\u003e所謂本垢\u003c/p\u003e","url":"https://mstdn.mimikun.jp/@mimikun","avatar":"https://s3-ap-northeast-1.amazonaws.com/mstdn.mimikun.jp/accounts/avatars/000/000/001/original/0bda64b42f18263b.jpeg","avatar_static":"https://s3-ap-northeast-1.amazonaws.com/mstdn.mimikun.jp/accounts/avatars/000/000/001/original/0bda64b42f18263b.jpeg","header":"https://mstdn.mimikun.jp/headers/original/missing.png","header_static":"https://mstdn.mimikun.jp/headers/original/missing.png","followers_count":31,"following_count":53,"statuses_count":87},"media_attachments":[{"id":"3103","type":"image","url":"https://s3-ap-northeast-1.amazonaws.com/mstdn.mimikun.jp/media_attachments/files/000/003/103/original/25d3906d25574413.png","preview_url":"https://s3-ap-northeast-1.amazonaws.com/mstdn.mimikun.jp/media_attachments/files/000/003/103/small/25d3906d25574413.png","remote_url":null,"text_url":"https://mstdn.mimikun.jp/media/csCiyShtqflXQnXu_hc","meta":{"original":{"width":1280,"height":768,"size":"1280x768","aspect":1.6666666666666667},"small":{"width":400,"height":240,"size":"400x240","aspect":1.6666666666666667}},"description":null}],"mentions":[],"tags":[],"emojis":[]}%
基本Twitterと似たような感じでした。