情報源
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" }
対象環境
- 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