マストドンAPIドキュメントを読んでAPIを叩いてみた
マストドンAPIドキュメントを読む
curlを使ってAPIを叩く方法を調べた。
# 情報源
* Getting started with the API | Mastodon
* libraries | Mastodon
* Mastodon API の叩き方
## URLパラメータ
curl -X POST \
-d 'q=test' \
-d 'n=0' \
https://mastodon.example/endpoint
## JSON
curl -X POST \
-H 'Content-Type: application/json' \
-d '{"parameter": "value"}' \
https://mastodon.example/endpoint
## Toot
### 1回目
UrlEncode() { python -c 'import sys, urllib; print urllib.quote(sys.stdin.read()),'; }
MASTODON_HOST='mstdn.jp'
ACCESS_TOKEN='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
STATUS="$(echo -e 'APIでテスト投稿してみた。\\n改行も 半角スペース もURLエンコードされること。\\n#mastodon #api' | UrlEncode)"
TEXT="$(eval echo -e "$1")";
curl -X POST -Ss https://${MASTODON_HOST}/api/v1/statuses \
--header "Authorization: Bearer ${ACCESS_TOKEN}" \
-d "status=${STATUS}"
{"id":"106725037223387519","created_at":"2021-08-09T07:40:30.684Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"ja","uri":"https://mstdn.jp/users/ytyaru/statuses/106725037223387519","url":"https://mstdn.jp/@ytyaru/106725037223387519","replies_count":0,"reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"bookmarked":false,"pinned":false,"content":"\u003cp\u003eAPIでテスト投稿してみた。\\n改行も 半角スペース もURLエンコードされること。\\n#mastodon \u003ca href=\"https://mstdn.jp/tags/api\" class=\"mention hashtag\" rel=\"tag\"\u003e#\u003cspan\u003eapi\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e","reblog":null,"application":{"name":"TootApp","website":""},"account":{"id":"233143","username":"ytyaru","acct":"ytyaru","display_name":"ytyaru","locked":false,"bot":false,"discoverable":true,"group":false,"created_at":"2017-05-23T00:00:00.000Z","note":"\u003cp\u003e趣味プログラマ。ラズパイ好き。C/C++, C#, Rust, Python, Bash, SQL, HTML/CSS/JavaScript等。\u003c/p\u003e\u003cp\u003e\u003ca href=\"http://ytyaru.hatenablog.com/\" rel=\"nofollow noopener noreferrer\" target=\"_blank\"\u003e\u003cspan class=\"invisible\"\u003ehttp://\u003c/span\u003e\u003cspan class=\"\"\u003eytyaru.hatenablog.com/\u003c/span\u003e\u003cspan class=\"invisible\"\u003e\u003c/span\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/ytyaru\" rel=\"nofollow noopener noreferrer\" target=\"_blank\"\u003e\u003cspan class=\"invisible\"\u003ehttps://\u003c/span\u003e\u003cspan class=\"\"\u003egithub.com/ytyaru\u003c/span\u003e\u003cspan class=\"invisible\"\u003e\u003c/span\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://twitter.com/ytyaru1\" rel=\"nofollow noopener noreferrer\" target=\"_blank\"\u003e\u003cspan class=\"invisible\"\u003ehttps://\u003c/span\u003e\u003cspan class=\"\"\u003etwitter.com/ytyaru1\u003c/span\u003e\u003cspan class=\"invisible\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/p\u003e","url":"https://mstdn.jp/@ytyaru","avatar":"https://media.mstdn.jp/accounts/avatars/000/233/143/original/86792d247a5ce9eb.png","avatar_static":"https://media.mstdn.jp/accounts/avatars/000/233/143/original/86792d247a5ce9eb.png","header":"https://media.mstdn.jp/accounts/headers/000/233/143/original/adf1f42e06de92ce.png","header_static":"https://media.mstdn.jp/accounts/headers/000/233/143/original/adf1f42e06de92ce.png","followers_count":13,"following_count":0,"statuses_count":352,"last_status_at":"2021-08-09","emojis":[],"fields":[]},"media_attachments":[],"mentions":[],"tags":[{"name":"api","url":"https://mstdn.jp/tags/api"}],"emojis":[],"card":null,"poll":null}
### 2回目
改行は`\n`にすべきだった。
ついでに応答結果のJSONをファイルに保存し、pythonで整形して出力する。
UrlEncode() { python -c 'import sys, urllib; print urllib.quote(sys.stdin.read()),'; }
MASTODON_HOST='mstdn.jp'
ACCESS_TOKEN='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
STATUS="$(echo -e 'APIでテスト投稿してみた。二回目。\n改行も 半角スペース もURLエンコードされること。\n#mastodon #api' | UrlEncode)"
TEXT="$(eval echo -e "$1")";
curl -X POST -Ss https://${MASTODON_HOST}/api/v1/statuses \
--header "Authorization: Bearer ${ACCESS_TOKEN}" \
-d "status=${STATUS}" >| response.json
python -m json.tool response.json
{
"account": {
"acct": "ytyaru",
"avatar": "https://media.mstdn.jp/accounts/avatars/000/233/143/original/86792d247a5ce9eb.png",
"avatar_static": "https://media.mstdn.jp/accounts/avatars/000/233/143/original/86792d247a5ce9eb.png",
"bot": false,
"created_at": "2017-05-23T00:00:00.000Z",
"discoverable": true,
"display_name": "ytyaru",
"emojis": [],
"fields": [],
"followers_count": 13,
"following_count": 0,
"group": false,
"header": "https://media.mstdn.jp/accounts/headers/000/233/143/original/adf1f42e06de92ce.png",
"header_static": "https://media.mstdn.jp/accounts/headers/000/233/143/original/adf1f42e06de92ce.png",
"id": "233143",
"last_status_at": "2021-08-09",
"locked": false,
"note": "<p>\u8da3\u5473\u30d7\u30ed\u30b0\u30e9\u30de\u3002\u30e9\u30ba\u30d1\u30a4\u597d\u304d\u3002C/C++, C#, Rust, Python, Bash, SQL, HTML/CSS/JavaScript\u7b49\u3002</p><p><a href=\"http://ytyaru.hatenablog.com/\" rel=\"nofollow noopener noreferrer\" target=\"_blank\"><span class=\"invisible\">http://</span><span class=\"\">ytyaru.hatenablog.com/</span><span class=\"invisible\"></span></a><br /><a href=\"https://github.com/ytyaru\" rel=\"nofollow noopener noreferrer\" target=\"_blank\"><span class=\"invisible\">https://</span><span class=\"\">github.com/ytyaru</span><span class=\"invisible\"></span></a><br /><a href=\"https://twitter.com/ytyaru1\" rel=\"nofollow noopener noreferrer\" target=\"_blank\"><span class=\"invisible\">https://</span><span class=\"\">twitter.com/ytyaru1</span><span class=\"invisible\"></span></a></p>",
"statuses_count": 353,
"url": "https://mstdn.jp/@ytyaru",
"username": "ytyaru"
},
"application": {
"name": "TootApp",
"website": ""
},
"bookmarked": false,
"card": null,
"content": "<p>API\u3067\u30c6\u30b9\u30c8\u6295\u7a3f\u3057\u3066\u307f\u305f\u3002\u4e8c\u56de\u76ee\u3002<br />\u6539\u884c\u3082 \u534a\u89d2\u30b9\u30da\u30fc\u30b9 \u3082URL\u30a8\u30f3\u30b3\u30fc\u30c9\u3055\u308c\u308b\u3053\u3068\u3002<br /><a href=\"https://mstdn.jp/tags/mastodon\" class=\"mention hashtag\" rel=\"tag\">#<span>mastodon</span></a> <a href=\"https://mstdn.jp/tags/api\" class=\"mention hashtag\" rel=\"tag\">#<span>api</span></a></p>",
"created_at": "2021-08-09T07:58:16.909Z",
"emojis": [],
"favourited": false,
"favourites_count": 0,
"id": "106725107099376093",
"in_reply_to_account_id": null,
"in_reply_to_id": null,
"language": "ja",
"media_attachments": [],
"mentions": [],
"muted": false,
"pinned": false,
"poll": null,
"reblog": null,
"reblogged": false,
"reblogs_count": 0,
"replies_count": 0,
"sensitive": false,
"spoiler_text": "",
"tags": [
{
"name": "api",
"url": "https://mstdn.jp/tags/api"
},
{
"name": "mastodon",
"url": "https://mstdn.jp/tags/mastodon"
}
],
"uri": "https://mstdn.jp/users/ytyaru/statuses/106725107099376093",
"url": "https://mstdn.jp/@ytyaru/106725107099376093",
"visibility": "public"
}
* card
# 対象環境
* 2021-08-09
* Raspbierry pi 4 Model B
* Raspberry Pi OS buster 10.0 2020-08-20 ※
* bash 5.0.3(1)-release
$ uname -a
Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux