* New translations 1.about-misskey.md (Chinese Simplified) * New translations 1.about-misskey.md (Chinese Traditional) * New translations 1.index.md (Chinese Simplified) * New translations 1.index.md (Chinese Traditional) * New translations 0.index.md (Chinese Simplified) * New translations 0.index.md (Chinese Traditional) * New translations 1.warning.md (Chinese Simplified) * New translations 1.warning.md (Chinese Traditional) * New translations 2.get-started.md (Chinese Simplified) * New translations 2.get-started.md (Chinese Traditional) * New translations 3.join-server.md (Chinese Simplified) * New translations 3.join-server.md (Chinese Traditional) * New translations 4.things-to-know.md (Chinese Simplified) * New translations 4.things-to-know.md (Chinese Traditional) * New translations 1.index.md (Chinese Simplified) * New translations 1.index.md (Chinese Traditional) * New translations ads.md (Chinese Simplified) * New translations ads.md (Chinese Traditional) * New translations antenna.md (Chinese Simplified) * New translations antenna.md (Chinese Traditional) * New translations charts.md (Chinese Simplified) * New translations charts.md (Chinese Traditional) * New translations clip.md (Chinese Simplified) * New translations clip.md (Chinese Traditional) * New translations custom-emoji.md (Chinese Simplified) * New translations custom-emoji.md (Chinese Traditional) * New translations deck.md (French) * New translations deck.md (Italian) * New translations deck.md (Korean) * New translations deck.md (Polish) * New translations deck.md (Chinese Simplified) * New translations deck.md (Chinese Traditional) * New translations deck.md (English) * New translations drive.md (Chinese Simplified) * New translations drive.md (Chinese Traditional) * New translations favorite.md (Chinese Simplified) * New translations favorite.md (Chinese Traditional) * New translations follow.md (Chinese Simplified) * New translations follow.md (Chinese Traditional) * New translations hashtag.md (Chinese Simplified) * New translations hashtag.md (Chinese Traditional) * New translations mention.md (Chinese Simplified) * New translations mention.md (Chinese Traditional) * New translations mfm.md (Chinese Simplified) * New translations mfm.md (Chinese Traditional) * New translations mute-and-block.md (Chinese Simplified) * New translations mute-and-block.md (Chinese Traditional) * New translations pages.md (Chinese Simplified) * New translations pages.md (Chinese Traditional) * New translations plugin.md (Chinese Simplified) * New translations plugin.md (Chinese Traditional) * New translations poll.md (Chinese Simplified) * New translations poll.md (Chinese Traditional) * New translations reaction.md (Chinese Simplified) * New translations reaction.md (Chinese Traditional) * New translations share-form.md (Chinese Simplified) * New translations share-form.md (Chinese Traditional) * New translations silence.md (Chinese Simplified) * New translations silence.md (Chinese Traditional) * New translations theme.md (Chinese Simplified) * New translations theme.md (Chinese Traditional) * New translations thread-mute.md (Chinese Simplified) * New translations thread-mute.md (Chinese Traditional) * New translations timeline.md (Chinese Simplified) * New translations timeline.md (Chinese Traditional) * New translations webhook.md (French) * New translations webhook.md (Italian) * New translations webhook.md (Korean) * New translations webhook.md (Polish) * New translations webhook.md (Chinese Simplified) * New translations webhook.md (Chinese Traditional) * New translations webhook.md (English) * New translations widgets.md (Chinese Simplified) * New translations widgets.md (Chinese Traditional) * New translations word-mute.md (French) * New translations word-mute.md (Italian) * New translations word-mute.md (Korean) * New translations word-mute.md (Polish) * New translations word-mute.md (Chinese Simplified) * New translations word-mute.md (Chinese Traditional) * New translations word-mute.md (English) * New translations 1.troubleshooting.md (Chinese Simplified) * New translations 1.troubleshooting.md (Chinese Traditional) * New translations apps.md (Chinese Simplified) * New translations apps.md (Chinese Traditional) * New translations donate.md (French) * New translations donate.md (Italian) * New translations donate.md (Korean) * New translations donate.md (Polish) * New translations donate.md (Chinese Simplified) * New translations donate.md (Chinese Traditional) * New translations donate.md (English) * New translations faq.md (Chinese Simplified) * New translations faq.md (Chinese Traditional) * New translations glossary.md (Chinese Simplified) * New translations glossary.md (Chinese Traditional) * New translations misskey-hub.md (Chinese Simplified) * New translations misskey-hub.md (Chinese Traditional) * New translations 1.index.md (Chinese Simplified) * New translations 1.index.md (Chinese Traditional) * New translations announcement.md (Chinese Simplified) * New translations announcement.md (Chinese Traditional) * New translations ftt.md (Chinese Simplified) * New translations ftt.md (Chinese Traditional) * New translations role.md (French) * New translations role.md (Italian) * New translations role.md (Korean) * New translations role.md (Polish) * New translations role.md (Chinese Simplified) * New translations role.md (Chinese Traditional) * New translations role.md (English) * New translations 1.index.md (Chinese Simplified) * New translations 1.index.md (Chinese Traditional) * New translations bash.md (French) * New translations bash.md (Italian) * New translations bash.md (Korean) * New translations bash.md (Polish) * New translations bash.md (Chinese Simplified) * New translations bash.md (Chinese Traditional) * New translations bash.md (English) * New translations docker.md (French) * New translations docker.md (Italian) * New translations docker.md (Korean) * New translations docker.md (Polish) * New translations docker.md (Chinese Simplified) * New translations docker.md (Chinese Traditional) * New translations docker.md (English) * New translations kubernetes.md (French) * New translations kubernetes.md (Italian) * New translations kubernetes.md (Korean) * New translations kubernetes.md (Polish) * New translations kubernetes.md (Chinese Simplified) * New translations kubernetes.md (Chinese Traditional) * New translations kubernetes.md (English) * New translations manual.md (Chinese Simplified) * New translations manual.md (Chinese Traditional) * New translations ubuntu-manual.md (Chinese Simplified) * New translations ubuntu-manual.md (Chinese Traditional) * New translations cdn.md (Chinese Simplified) * New translations cdn.md (Chinese Traditional) * New translations nginx.md (Chinese Simplified) * New translations nginx.md (Chinese Traditional) * New translations push-docker-hub.md (French) * New translations push-docker-hub.md (Italian) * New translations push-docker-hub.md (Korean) * New translations push-docker-hub.md (Polish) * New translations push-docker-hub.md (Chinese Simplified) * New translations push-docker-hub.md (Chinese Traditional) * New translations push-docker-hub.md (English) * New translations scale-out.md (Chinese Simplified) * New translations scale-out.md (Chinese Traditional) * New translations troubleshooting.md (Chinese Simplified) * New translations troubleshooting.md (Chinese Traditional) * New translations disable-timelines.md (Chinese Simplified) * New translations disable-timelines.md (Chinese Traditional) * New translations 1.index.md (Chinese Simplified) * New translations 1.index.md (Chinese Traditional) * New translations libraries.md (Chinese Simplified) * New translations libraries.md (Chinese Traditional) * New translations permission.md (Chinese Simplified) * New translations permission.md (Chinese Traditional) * New translations 1.index.md (Chinese Simplified) * New translations 1.index.md (Chinese Traditional) * New translations 1.index.md (Chinese Simplified) * New translations 1.index.md (Chinese Traditional) * New translations global-timeline.md (French) * New translations global-timeline.md (Italian) * New translations global-timeline.md (Korean) * New translations global-timeline.md (Polish) * New translations global-timeline.md (Chinese Simplified) * New translations global-timeline.md (Chinese Traditional) * New translations global-timeline.md (English) * New translations home-timeline.md (French) * New translations home-timeline.md (Italian) * New translations home-timeline.md (Korean) * New translations home-timeline.md (Polish) * New translations home-timeline.md (Chinese Simplified) * New translations home-timeline.md (Chinese Traditional) * New translations home-timeline.md (English) * New translations hybrid-timeline.md (French) * New translations hybrid-timeline.md (Italian) * New translations hybrid-timeline.md (Korean) * New translations hybrid-timeline.md (Polish) * New translations hybrid-timeline.md (Chinese Simplified) * New translations hybrid-timeline.md (Chinese Traditional) * New translations hybrid-timeline.md (English) * New translations index.md (Chinese Simplified) * New translations index.md (Chinese Traditional) * New translations local-timeline.md (French) * New translations local-timeline.md (Italian) * New translations local-timeline.md (Korean) * New translations local-timeline.md (Polish) * New translations local-timeline.md (Chinese Simplified) * New translations local-timeline.md (Chinese Traditional) * New translations local-timeline.md (English) * New translations main.md (French) * New translations main.md (Italian) * New translations main.md (Korean) * New translations main.md (Polish) * New translations main.md (Chinese Simplified) * New translations main.md (Chinese Traditional) * New translations main.md (English) * New translations note-capture-events.md (French) * New translations note-capture-events.md (Italian) * New translations note-capture-events.md (Korean) * New translations note-capture-events.md (Polish) * New translations note-capture-events.md (Chinese Simplified) * New translations note-capture-events.md (Chinese Traditional) * New translations note-capture-events.md (English) * New translations token.md (Chinese Simplified) * New translations token.md (Chinese Traditional) * New translations 1.index.md (Chinese Simplified) * New translations 1.index.md (Chinese Traditional) * New translations create-plugin.md (Chinese Simplified) * New translations create-plugin.md (Chinese Traditional) * New translations plugin-api-reference.md (Chinese Simplified) * New translations plugin-api-reference.md (Chinese Traditional) * New translations publish-on-your-website.md (Chinese Simplified) * New translations publish-on-your-website.md (Chinese Traditional) * New translations 5.releases.md (Chinese Simplified) * New translations 5.releases.md (Chinese Traditional)
9.0 KiB
description |
---|
ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、リアクションされた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。 |
ストリーミングAPI
:::tip 最初にMisskey APIのドキュメントを読むことをお勧めします。 :::
ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、リアクションされた、フォローされた、など)を受け取ったり、様々な操作を行ったりすることができます。
ストリームに接続する
ストリーミングAPIを利用するには、まずMisskeyサーバーにwebsocketで接続する必要があります。
以下の形式のURLにwebsocket接続します:
wss://{host}/streaming?i={token}
ここで、
{host}
の部分は、接続したいサーバーのホストに置き換えます。{token}
の部分は、ユーザーのアクセストークンに置き換えます。
:::tip アクセストークンは省略することもできますが、その場合非ログインでの利用ということになり、受信できる情報や可能な操作は限られます。 :::
ストリームに接続すると、後述投稿の購読を行ったりすることができますが、まだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 そのようなイベントを受信するには、ストリーム上で後述するチャンネルに接続する必要があります。
ストリーム上のやり取りはすべてJSONで行われます。
チャンネル
MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
:::tip ひとつのストリーム接続上で、同時に複数のチャンネルに接続することができます。 :::
以下では、チャンネルの使用方法を説明します。どのようなチャンネルがあるかは、チャンネル一覧を参照してください。
チャンネルに接続する
チャンネルに接続するには、次のようなデータをJSONでストリームに送信します:
{
type: 'connect',
body: {
channel: 'xxxxxxxx',
id: 'foobar',
params: {
...
}
}
}
ここで、
channel
には接続したいチャンネル名を設定します。チャンネル一覧を参照してください。id
にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。params
はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
:::tip IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。 :::
チャンネルからのメッセージを受け取る
例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
チャンネルがメッセージを発すると、次のようなデータがJSONでストリームに流れてきます:
{
type: 'channel',
body: {
id: 'foobar',
type: 'something',
body: {
some: 'thing'
}
}
}
ここで、
id
には前述したそのチャンネルに接続する際に設定したIDが設定されています。これで、このメッセージがどのチャンネルからのものなのか知ることができます。type
にはメッセージの種類が設定されます。チャンネルによって、どのような種類のメッセージが流れてくるかは異なります。body
にはメッセージの内容が設定されます。チャンネルによって、どのような内容のメッセージが流れてくるかは異なります。
チャンネルに向けてメッセージを送信する
チャンネルによっては、メッセージを受け取るだけでなく、こちらから何かメッセージを送信し、何らかの操作を行える場合があります。
チャンネルにメッセージを送信するには、次のようなデータをJSONでストリームに送信します:
{
type: 'channel',
body: {
id: 'foobar',
type: 'something',
body: {
some: 'thing'
}
}
}
ここで、
id
には前述したそのチャンネルに接続する際に設定したIDを設定します。これで、このメッセージがどのチャンネルに向けたものなのか識別させることができます。type
にはメッセージの種類を設定します。チャンネルによって、どのような種類のメッセージを受け付けるかは異なります。body
にはメッセージの内容を設定します。チャンネルによって、どのような内容のメッセージを受け付けるかは異なります。
チャンネルから切断する
チャンネルから切断するには、次のようなデータをJSONでストリームに送信します:
{
type: 'disconnect',
body: {
id: 'foobar'
}
}
ここで、
id
には前述したそのチャンネルに接続する際に設定したIDを設定します。
投稿のキャプチャ
Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。
例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。 しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。
この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。
以下では、投稿のキャプチャ機能の使用方法を説明します。どのようなキャプチャイベントがあるかは、キャプチャイベント一覧を参照してください。
投稿をキャプチャする
投稿をキャプチャするには、ストリームに次のようなメッセージを送信します:
{
type: 'subNote',
body: {
id: 'xxxxxxxxxxxxxxxx'
}
}
ここで、
id
にキャプチャしたい投稿のid
を設定します。
このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。
例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます:
{
type: 'noteUpdated',
body: {
id: 'xxxxxxxxxxxxxxxx',
type: 'reacted',
body: {
reaction: 'like',
userId: 'yyyyyyyyyyyyyyyy'
}
}
}
ここで、
body
内のid
に、イベントを発生させた投稿のIDが設定されます。body
内のtype
に、イベントの種類が設定されます。body
内のbody
に、イベントの詳細が設定されます。
投稿のキャプチャを解除する
その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
次のメッセージを送信します:
{
type: 'unsubNote',
body: {
id: 'xxxxxxxxxxxxxxxx'
}
}
ここで、
id
にキャプチャを解除したい投稿のid
を設定します。
このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。