基本的には、POSTで叩くことが多く、bodyにjsonを埋め込んでリクエストを送信します。
ここでアプリを作成し、appSecretを取得して良い感じにやる方法も存在しますが、今回は簡単のため"i"を使います。
"i"は、設定 -> API -> Token のところにあるトークンのことです。APIを叩く際に、"i": "XXXXXXXXXXXXX..."
の形式でbodyに含める必要があります。
では、例として https://misskey.xyz/api/notes/create を叩いてみましょう。これは投稿を作成するエンドポイントで、Renoteもここを叩いて実行します。
$ curl -X POST -H "Content-Type: application/json" -d '{"i": "!から始まるtokenで埋めてください", "text": "test"}' https://misskey.xyz/api/notes/create
このようにして、APIを叩いてみると、下のようなレスポンスが帰ってきます。
{
"createdNote": {
"createdAt": "2018-08-19T07:51:17.466Z",
"mediaIds": [],
"replyId": null,
"renoteId": null,
"text": "test",
"cw": null,
"tags": [],
"tagsLower": [],
"userId": "57d60c8478c9c715e6ae818a",
"viaMobile": false,
"geo": null,
"appId": null,
"visibility": "public",
"visibleUserIds": [],
"_renote": null,
"id": "5b79217517ac863798f6d3c6",
"user": {
"name": "Reiju",
"username": "reiju",
"description": " σ < こんにちは\nππ\nν\n∧\n日本語 / English\nCene mi'd ekce lineparine'i firlex.\n世界一D言語を書ける男(嘘)",
"two_factor_temp_secret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"host": null,
"createdAt": "2016-09-12T02:01:40.002Z",
"driveCapacity": 1073741824,
"followersCount": 258,
"followingCount": 609,
"hostLower": null,
"notesCount": 1753,
"isBot": false,
"isPro": null,
"lastUsedAt": "2018-08-19T07:51:16.798Z",
"links": null,
"twitter": {},
"avatarColor": [
226,
214,
178
],
"bannerColor": [
144,
94,
235
],
"isCat": true,
"bannerUrl": "https://s3.arkjp.net/misskey/drive/7f283e99-bdf2-4f26-8c94-b6db1ea30205/IMG_2568.JPG.cropped.png",
"pinnedNoteId": "5b79195828a1bf37a8506a27",
"id": "57d60c8478c9c715e6ae818a",
"avatarUrl": "https://misskey.xyz/files/58cfc0f12a1f8914f3284da3"
},
"media": [],
"prev": null,
"next": null,
"myReaction": null
}
}
このレスポンスには、たった今投稿したNoteの詳細や、その投稿者の詳細が記述されています。もしリクエストに何か変なところがあると、{"error": "xxxxxx"}
の形式でレスポンスが返ってきます。例えば、tokenが正しくない場合、{"error": "AUTHENTICATION_FAILED"}
と返ってきます。
リアルタイムで投稿を拾ってみましょう!
wss://misskey.xyz/?i=XXXXXX
に接続すればよいです。wss://misskey.xyz?i=XXXXXX
ではないことに気を付けてくださいね。このサイトで簡単に試すことができますので、ぜひやってみてください。
つなげると、投稿がTLで見えるたびにメッセージが受信されると思います。それらのメッセージはすべてjson形式で、typeの部分を参照することでどのような意図で送信されているのかがわかるようになっています。
また、WebSocketを接続している間は、WebSocketを経由してAPIを叩くことができます。
{
"type": "api",
"id": "tekitouna_ransuu_wo_butikomu_nado_suru",
"endpoint": "notes/create",
"data": {
"text": "test"
}
}
data の部分にAPIを叩くときに必要な情報を与えます。そうしてWebSocket経由でこれを送信すると、先ほどのnotes/create
を叩いた時と同様の効果を、これで得ることができます。
なお、 id は各メッセージごとに別々の値を与えてあげるとよいです。各リクエスト毎に
{
"type": "api-res:tekitouna_ransuu_wo_butikomu_nado_suru",
"body": {
"res": {
"createdNote": {
"createdAt": "2018-08-19T08:13:52.498Z",
"mediaIds": [],
"replyId": null,
"renoteId": null,
"text": "test",
"cw": null,
"tags": [],
"tagsLower": [],
"userId": "57d60c8478c9c715e6ae818a",
"viaMobile": false,
"geo": null,
"appId": null,
"visibility": "public",
"visibleUserIds": [],
"_renote": null,
"id": "5b7926c02fec6c741c414806",
"user": {
"name": "Reiju",
"username": "reiju",
"description": " σ < こんにちは\nππ\nν\n∧\n日本語 / English\nCene mi'd ekce lineparine'i firlex.\n世界一D言語を書ける男(嘘)",
"two_factor_temp_secret": "PI4HK5BIIIYEK53GIQXTSL3BMMSECUCFLM4XQIKHHZ2VU5KGOBCQ",
"host": null,
"createdAt": "2016-09-12T02:01:40.002Z",
"driveCapacity": 1073741824,
"followersCount": 259,
"followingCount": 611,
"hostLower": null,
"notesCount": 1760,
"isBot": false,
"isPro": null,
"lastUsedAt": "2018-08-19T08:13:19.877Z",
"links": null,
"twitter": {},
"avatarColor": [
226,
214,
178
],
"bannerColor": [
144,
94,
235
],
"isCat": true,
"bannerUrl": "https://s3.arkjp.net/misskey/drive/7f283e99-bdf2-4f26-8c94-b6db1ea30205/IMG_2568.JPG.cropped.png",
"pinnedNoteId": "5b79195828a1bf37a8506a27",
"id": "57d60c8478c9c715e6ae818a",
"avatarUrl": "https://misskey.xyz/files/58cfc0f12a1f8914f3284da3"
},
"media": [],
"prev": null,
"next": null,
"myReaction": null
}
}
}
}
…のようなレスポンスが返ってきますが、このとき type を見るとapi-res:xxxxxxxxxxxxxxxxxxx
となるため、これでどのリクエストに対する返答なのかがわかるようになっています。
詳しくはここを参照してください。