やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

マストドンAPIドキュメントを読んでAPIを叩いてみた

マストドンAPIドキュメントを読む

 curlを使って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"
}

対象環境

$ uname -a
Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux