* New translations ja-JP.yml (Chinese Simplified) * New translations stream.md (Chinese Simplified) * New translations stream.md (Chinese Simplified)
13 KiB
流式API
通过流式API,您可以实时接收各种信息(例如,你的时间线中的新帖文,收到的消息,关注等),并进行各种操作。
连接到流
要使用流式API,您需要使用websocket连接到Misskey服务器。
请使用参数i
连接到以下URL,并在websocket连接中包含认证信息。例如:
%WS_URL%/streaming?i=xxxxxxxxxxxxxxx
认证信息是您的API密钥,从应用程序连接到流时需要引用的用户访问令牌
您可以省略身份验证信息。此时无需登录即可使用,但是可以接收的信息和可以执行的操作将受到限制。例:
%WS_URL%/streaming
ストリームに接続すると、後述するAPI操作や、投稿の購読を行ったりすることができます。 しかしまだこの段階では、例えばタイムラインへの新しい投稿を受信したりすることはできません。 それを行うには、ストリーム上で、後述するチャンネルに接続する必要があります。
ストリームでのやり取りはすべてJSONです。
频道
MisskeyのストリーミングAPIにはチャンネルという概念があります。これは、送受信する情報を分離するための仕組みです。 Misskeyのストリームに接続しただけでは、まだリアルタイムでタイムラインの投稿を受信したりはできません。 ストリーム上でチャンネルに接続することで、様々な情報を受け取ったり情報を送信したりすることができるようになります。
ひとつのストリーム上で、同時に複数のチャンネルに接続することができます。
连接到频道
要连接到频道,请将JSON数据发送到流:
{
type: 'connect',
body: {
channel: 'xxxxxxxx',
id: 'foobar',
params: {
...
}
}
}
其中:
channel
には接続したいチャンネル名を設定します。频道类型将在后面说明。id
にはそのチャンネルとやり取りするための任意のIDを設定します。ストリームでは様々なメッセージが流れるので、そのメッセージがどのチャンネルからのものなのか識別する必要があるからです。このIDは、UUIDや、乱数のようなもので構いません。params
はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
从频道接收消息
例えばタイムラインのチャンネルなら、新しい投稿があった時にメッセージを発します。そのメッセージを受け取ることで、タイムラインに新しい投稿がされたことをリアルタイムで知ることができます。
当频道发送消息时,以下数据将以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を設定します。
通过流发送API请求
ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。
ストリームを経由してAPIリクエストするには、次のようなデータをJSONでストリームに送信します:
{
type: 'api',
body: {
id: 'xxxxxxxxxxxxxxxx',
endpoint: 'notes/create',
data: {
text: 'yee haw!'
}
}
}
其中:
id
には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。endpoint
には、あなたがリクエストしたいAPIのエンドポイントを指定します。data
には、エンドポイントのパラメータを含めます。
レスポンスの受信
APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。
{
type: 'api:xxxxxxxxxxxxxxxx',
body: {
...
}
}
其中:
xxxxxxxxxxxxxxxx
の部分には、リクエストの際に設定されたid
が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。body
には、レスポンスが含まれています。
投稿のキャプチャ
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
に、イベントの詳細が設定されます。
事件类型
reacted
その投稿にリアクションがされた時に発生します。
reaction
に、リアクションの種類が設定されます。userId
に、リアクションを行ったユーザーのIDが設定されます。
例:
{
type: 'noteUpdated',
body: {
id: 'xxxxxxxxxxxxxxxx',
type: 'reacted',
body: {
reaction: 'like',
userId: 'yyyyyyyyyyyyyyyy'
}
}
}
deleted
その投稿が削除された時に発生します。
deletedAt
表示删除的日期和时间。
例:
{
type: 'noteUpdated',
body: {
id: 'xxxxxxxxxxxxxxxx',
type: 'deleted',
body: {
deletedAt: '2018-10-22T02:17:09.703Z'
}
}
}
pollVoted
その投稿に添付されたアンケートに投票された時に発生します。
choice
に、選択肢IDが設定されます。userId
に、投票を行ったユーザーのIDが設定されます。
例:
{
type: 'noteUpdated',
body: {
id: 'xxxxxxxxxxxxxxxx',
type: 'pollVoted',
body: {
choice: 2,
userId: 'yyyyyyyyyyyyyyyy'
}
}
}
投稿のキャプチャを解除する
その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。
次のメッセージを送信します:
{
type: 'unsubNote',
body: {
id: 'xxxxxxxxxxxxxxxx'
}
}
其中:
id
にキャプチャを解除したい投稿のid
を設定します。
このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。
チャンネル一覧
main
アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません。
流れてくるイベント一覧
renote
自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。
mention
誰かからメンションされたときに発生するイベントです。
readAllNotifications
自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
meUpdated
自分の情報が更新されたことを表すイベントです。
follow
自分が誰かをフォローしたときに発生するイベントです。
unfollow
自分が誰かのフォローを解除したときに発生するイベントです。
followed
自分が誰かにフォローされたときに発生するイベントです。
homeTimeline
ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
流れてくるイベント一覧
note
タイムラインに新しい投稿が流れてきたときに発生するイベントです。
localTimeline
ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
流れてくるイベント一覧
note
ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
hybridTimeline
ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
流れてくるイベント一覧
note
ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
globalTimeline
グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません。
流れてくるイベント一覧
note
グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。