From 2de8e8c35803d77af1d6eae78d619f9b57c86bd7 Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 29 Aug 2018 06:59:43 +0900 Subject: Fix bug --- src/docs/about.en-US.md | 3 + src/docs/about.en.md | 3 - src/docs/about.ja-JP.md | 3 + src/docs/about.ja.md | 3 - src/docs/api.ja-JP.md | 80 ++++++++++++++ src/docs/api.ja.md | 80 -------------- src/docs/api/endpoints/view.pug | 2 +- src/docs/api/entities/drive-file.yaml | 52 ++++----- src/docs/api/entities/drive-folder.yaml | 24 ++--- src/docs/api/entities/note.yaml | 98 ++++++++--------- src/docs/api/entities/user.yaml | 96 ++++++++--------- src/docs/api/entities/view.pug | 2 +- src/docs/api/mixins.pug | 2 +- src/docs/base.pug | 2 +- src/docs/follow.ja-JP.md | 8 ++ src/docs/follow.ja.md | 8 -- src/docs/mute.ja-JP.md | 13 +++ src/docs/mute.ja.md | 13 --- src/docs/reversi-bot.ja-JP.md | 177 ++++++++++++++++++++++++++++++ src/docs/reversi-bot.ja.md | 177 ------------------------------ src/docs/stream.ja-JP.md | 183 ++++++++++++++++++++++++++++++++ src/docs/stream.ja.md | 183 -------------------------------- src/docs/timelines.ja-JP.md | 15 +++ src/docs/timelines.ja.md | 15 --- 24 files changed, 621 insertions(+), 621 deletions(-) create mode 100644 src/docs/about.en-US.md delete mode 100644 src/docs/about.en.md create mode 100644 src/docs/about.ja-JP.md delete mode 100644 src/docs/about.ja.md create mode 100644 src/docs/api.ja-JP.md delete mode 100644 src/docs/api.ja.md create mode 100644 src/docs/follow.ja-JP.md delete mode 100644 src/docs/follow.ja.md create mode 100644 src/docs/mute.ja-JP.md delete mode 100644 src/docs/mute.ja.md create mode 100644 src/docs/reversi-bot.ja-JP.md delete mode 100644 src/docs/reversi-bot.ja.md create mode 100644 src/docs/stream.ja-JP.md delete mode 100644 src/docs/stream.ja.md create mode 100644 src/docs/timelines.ja-JP.md delete mode 100644 src/docs/timelines.ja.md (limited to 'src/docs') diff --git a/src/docs/about.en-US.md b/src/docs/about.en-US.md new file mode 100644 index 0000000000..bb1c51927b --- /dev/null +++ b/src/docs/about.en-US.md @@ -0,0 +1,3 @@ +# About Misskey + +Misskey is a mini blog SNS. diff --git a/src/docs/about.en.md b/src/docs/about.en.md deleted file mode 100644 index bb1c51927b..0000000000 --- a/src/docs/about.en.md +++ /dev/null @@ -1,3 +0,0 @@ -# About Misskey - -Misskey is a mini blog SNS. diff --git a/src/docs/about.ja-JP.md b/src/docs/about.ja-JP.md new file mode 100644 index 0000000000..1b06361f0f --- /dev/null +++ b/src/docs/about.ja-JP.md @@ -0,0 +1,3 @@ +# Misskeyについて + +MisskeyはミニブログSNSです。 diff --git a/src/docs/about.ja.md b/src/docs/about.ja.md deleted file mode 100644 index 1b06361f0f..0000000000 --- a/src/docs/about.ja.md +++ /dev/null @@ -1,3 +0,0 @@ -# Misskeyについて - -MisskeyはミニブログSNSです。 diff --git a/src/docs/api.ja-JP.md b/src/docs/api.ja-JP.md new file mode 100644 index 0000000000..ecc80cc05e --- /dev/null +++ b/src/docs/api.ja-JP.md @@ -0,0 +1,80 @@ +# Misskey API + +MisskeyのWeb APIを使って、プログラムからMisskeyの様々な機能にアクセスすることができます。 +APIを自分のアカウントから利用する場合(自分のアカウントのみ操作したい場合)と、アプリケーションから利用する場合(不特定のアカウントを操作したい場合)とで利用手順が異なりますので、それぞれのケースについて説明します。 + +## 自分の所有するアカウントからAPIにアクセスする場合 +「設定 > API」で、APIにアクセスするのに必要なAPIキーを取得してください。 +APIにアクセスする際には、リクエストにAPIキーを「i」というパラメータ名で含めます。 + +
+

アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。

+
+ +APIの詳しい使用法は「Misskey APIの利用」セクションをご覧ください。 + +## アプリケーションからAPIにアクセスする場合 +直接ユーザーのAPIキーをアプリケーションが扱うのは危険なので、 +アプリケーションからAPIを利用する際には、アプリケーションとアプリケーションを利用するユーザーが結び付けられた専用のトークン(アクセストークン)をMisskeyに発行してもらい、 +そのトークンをリクエストのパラメータに含める必要があります。 + +
+

アクセストークンは、ユーザーが自分のアカウントにあなたのアプリケーションがアクセスすることを許可した場合のみ発行されます

+
+ +### 1.アプリケーションを登録する +まず、あなたのアプリケーションやWebサービス(以後、あなたのアプリと呼びます)をMisskeyに登録します。 +[デベロッパーセンター](/dev)にアクセスし、「アプリ > アプリ作成」からアプリを作成してください。 +フォームの記入欄の説明は以下の通りです: + +| 名前 | 説明 | +|---|---| +| アプリケーション名 | あなたのアプリの名称。 | +| アプリの概要 | あなたのアプリの簡単な説明や紹介。 | +| コールバックURL | ユーザーが後述する認証フォームで認証を終えた際にリダイレクトするURLを設定できます。あなたのアプリがWebサービスである場合に有用です。 | +| 権限 | あなたのアプリが要求する権限。ここで要求した機能だけがAPIからアクセスできます。 | + +登録が済むとあなたのアプリのシークレットキーが入手できます。このシークレットキーは後で使用します。 + +
+

アプリに成りすまされる可能性があるため、極力このシークレットキーは公開しないようにしてください。

+
+ +### 2.ユーザーに認証させる +アプリを使ってもらうには、ユーザーにアカウントへのアクセスの許可をもらう必要があります。 + +認証セッションを開始するには、%API_URL%/auth/session/generate へパラメータに appSecret としてシークレットキーを含めたリクエストを送信します。 +リクエスト形式はJSONで、メソッドはPOSTです。 +レスポンスとして認証セッションのトークンや認証フォームのURLが取得できるので、認証フォームのURLをブラウザで表示し、ユーザーにフォームを提示してください。 + +あなたのアプリがコールバックURLを設定している場合、 +ユーザーがあなたのアプリの連携を許可すると設定しているコールバックURLに token という名前でセッションのトークンが含まれたクエリを付けてリダイレクトします。 + +あなたのアプリがコールバックURLを設定していない場合、ユーザーがあなたのアプリの連携を許可したことを(何らかの方法で(たとえばボタンを押させるなど))確認出来るようにしてください。 + +### 3.ユーザーのアクセストークンを取得する +ユーザーが連携を許可したら、%API_URL%/auth/session/userkey へ次のパラメータを含むリクエストを送信します: + +| 名前 | 型 | 説明 | +|---|---|---| +| appSecret | string | アプリのシークレットキー | +| token | string | セッションのトークン | + +上手くいけば、認証したユーザーのアクセストークンがレスポンスとして取得できます。おめでとうございます! + +アクセストークンが取得できたら、「ユーザーのアクセストークン+あなたのアプリのシークレットキーをsha256したもの」を「i」というパラメータでリクエストに含めると、APIにアクセスすることができます。 + +「i」パラメータの生成方法を擬似コードで表すと次のようになります: +
const i = sha256(accessToken + secretKey);
+ +APIの詳しい使用法は「Misskey APIの利用」セクションをご覧ください。 + +## Misskey APIの利用 +APIはすべてリクエストのパラメータ・レスポンスともにJSON形式です。また、すべてのエンドポイントはPOSTメソッドのみ受け付けます。 + +ストリーミングAPIも提供しています。 + +APIリファレンスもご確認ください。 + +### レートリミット +Misskey APIにはレートリミットがあり、短時間のうちに多数のリクエストを送信すると、一定時間APIを利用することができなくなることがあります。 diff --git a/src/docs/api.ja.md b/src/docs/api.ja.md deleted file mode 100644 index ecc80cc05e..0000000000 --- a/src/docs/api.ja.md +++ /dev/null @@ -1,80 +0,0 @@ -# Misskey API - -MisskeyのWeb APIを使って、プログラムからMisskeyの様々な機能にアクセスすることができます。 -APIを自分のアカウントから利用する場合(自分のアカウントのみ操作したい場合)と、アプリケーションから利用する場合(不特定のアカウントを操作したい場合)とで利用手順が異なりますので、それぞれのケースについて説明します。 - -## 自分の所有するアカウントからAPIにアクセスする場合 -「設定 > API」で、APIにアクセスするのに必要なAPIキーを取得してください。 -APIにアクセスする際には、リクエストにAPIキーを「i」というパラメータ名で含めます。 - -
-

アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。

-
- -APIの詳しい使用法は「Misskey APIの利用」セクションをご覧ください。 - -## アプリケーションからAPIにアクセスする場合 -直接ユーザーのAPIキーをアプリケーションが扱うのは危険なので、 -アプリケーションからAPIを利用する際には、アプリケーションとアプリケーションを利用するユーザーが結び付けられた専用のトークン(アクセストークン)をMisskeyに発行してもらい、 -そのトークンをリクエストのパラメータに含める必要があります。 - -
-

アクセストークンは、ユーザーが自分のアカウントにあなたのアプリケーションがアクセスすることを許可した場合のみ発行されます

-
- -### 1.アプリケーションを登録する -まず、あなたのアプリケーションやWebサービス(以後、あなたのアプリと呼びます)をMisskeyに登録します。 -[デベロッパーセンター](/dev)にアクセスし、「アプリ > アプリ作成」からアプリを作成してください。 -フォームの記入欄の説明は以下の通りです: - -| 名前 | 説明 | -|---|---| -| アプリケーション名 | あなたのアプリの名称。 | -| アプリの概要 | あなたのアプリの簡単な説明や紹介。 | -| コールバックURL | ユーザーが後述する認証フォームで認証を終えた際にリダイレクトするURLを設定できます。あなたのアプリがWebサービスである場合に有用です。 | -| 権限 | あなたのアプリが要求する権限。ここで要求した機能だけがAPIからアクセスできます。 | - -登録が済むとあなたのアプリのシークレットキーが入手できます。このシークレットキーは後で使用します。 - -
-

アプリに成りすまされる可能性があるため、極力このシークレットキーは公開しないようにしてください。

-
- -### 2.ユーザーに認証させる -アプリを使ってもらうには、ユーザーにアカウントへのアクセスの許可をもらう必要があります。 - -認証セッションを開始するには、%API_URL%/auth/session/generate へパラメータに appSecret としてシークレットキーを含めたリクエストを送信します。 -リクエスト形式はJSONで、メソッドはPOSTです。 -レスポンスとして認証セッションのトークンや認証フォームのURLが取得できるので、認証フォームのURLをブラウザで表示し、ユーザーにフォームを提示してください。 - -あなたのアプリがコールバックURLを設定している場合、 -ユーザーがあなたのアプリの連携を許可すると設定しているコールバックURLに token という名前でセッションのトークンが含まれたクエリを付けてリダイレクトします。 - -あなたのアプリがコールバックURLを設定していない場合、ユーザーがあなたのアプリの連携を許可したことを(何らかの方法で(たとえばボタンを押させるなど))確認出来るようにしてください。 - -### 3.ユーザーのアクセストークンを取得する -ユーザーが連携を許可したら、%API_URL%/auth/session/userkey へ次のパラメータを含むリクエストを送信します: - -| 名前 | 型 | 説明 | -|---|---|---| -| appSecret | string | アプリのシークレットキー | -| token | string | セッションのトークン | - -上手くいけば、認証したユーザーのアクセストークンがレスポンスとして取得できます。おめでとうございます! - -アクセストークンが取得できたら、「ユーザーのアクセストークン+あなたのアプリのシークレットキーをsha256したもの」を「i」というパラメータでリクエストに含めると、APIにアクセスすることができます。 - -「i」パラメータの生成方法を擬似コードで表すと次のようになります: -
const i = sha256(accessToken + secretKey);
- -APIの詳しい使用法は「Misskey APIの利用」セクションをご覧ください。 - -## Misskey APIの利用 -APIはすべてリクエストのパラメータ・レスポンスともにJSON形式です。また、すべてのエンドポイントはPOSTメソッドのみ受け付けます。 - -ストリーミングAPIも提供しています。 - -APIリファレンスもご確認ください。 - -### レートリミット -Misskey APIにはレートリミットがあり、短時間のうちに多数のリクエストを送信すると、一定時間APIを利用することができなくなることがあります。 diff --git a/src/docs/api/endpoints/view.pug b/src/docs/api/endpoints/view.pug index 76e1183302..be7e84faa1 100644 --- a/src/docs/api/endpoints/view.pug +++ b/src/docs/api/endpoints/view.pug @@ -15,7 +15,7 @@ block main span.path= endpointUrl.path if endpoint.desc - p#desc= endpoint.desc[lang] || endpoint.desc['ja'] + p#desc= endpoint.desc[lang] || endpoint.desc['ja-JP'] if endpoint.requireCredential div.ui.info: p diff --git a/src/docs/api/entities/drive-file.yaml b/src/docs/api/entities/drive-file.yaml index 62dbec363a..0c2195ac08 100644 --- a/src/docs/api/entities/drive-file.yaml +++ b/src/docs/api/entities/drive-file.yaml @@ -1,90 +1,90 @@ name: "DriveFile" desc: - ja: "ドライブのファイル。" - en: "A file of Drive." + ja-JP: "ドライブのファイル。" + en-US: "A file of Drive." props: id: type: "id" optional: false desc: - ja: "ファイルID" - en: "The ID of this file" + ja-JP: "ファイルID" + en-US: "The ID of this file" createdAt: type: "date" optional: false desc: - ja: "アップロード日時" - en: "The upload date of this file" + ja-JP: "アップロード日時" + en-US: "The upload date of this file" userId: type: "id(User)" optional: false desc: - ja: "所有者ID" - en: "The ID of the owner of this file" + ja-JP: "所有者ID" + en-US: "The ID of the owner of this file" user: type: "entity(User)" optional: true desc: - ja: "所有者" - en: "The owner of this file" + ja-JP: "所有者" + en-US: "The owner of this file" name: type: "string" optional: false desc: - ja: "ファイル名" - en: "The name of this file" + ja-JP: "ファイル名" + en-US: "The name of this file" md5: type: "string" optional: false desc: - ja: "ファイルのMD5ハッシュ値" - en: "The md5 hash value of this file" + ja-JP: "ファイルのMD5ハッシュ値" + en-US: "The md5 hash value of this file" type: type: "string" optional: false desc: - ja: "ファイルの種類" - en: "The type of this file" + ja-JP: "ファイルの種類" + en-US: "The type of this file" datasize: type: "number" optional: false desc: - ja: "ファイルサイズ(bytes)" - en: "The size of this file (bytes)" + ja-JP: "ファイルサイズ(bytes)" + en-US: "The size of this file (bytes)" url: type: "string" optional: false desc: - ja: "ファイルのURL" - en: "The URL of this file" + ja-JP: "ファイルのURL" + en-US: "The URL of this file" folderId: type: "id(DriveFolder)" optional: true desc: - ja: "フォルダID" - en: "The ID of the folder of this file" + ja-JP: "フォルダID" + en-US: "The ID of the folder of this file" folder: type: "entity(DriveFolder)" optional: true desc: - ja: "フォルダ" - en: "The folder of this file" + ja-JP: "フォルダ" + en-US: "The folder of this file" isSensitive: type: "boolean" optional: true desc: - ja: "このメディアが「閲覧注意」(NSFW)かどうか" - en: "Whether this media is NSFW" + ja-JP: "このメディアが「閲覧注意」(NSFW)かどうか" + en-US: "Whether this media is NSFW" diff --git a/src/docs/api/entities/drive-folder.yaml b/src/docs/api/entities/drive-folder.yaml index 0fb8308dd4..e3dfd2ca01 100644 --- a/src/docs/api/entities/drive-folder.yaml +++ b/src/docs/api/entities/drive-folder.yaml @@ -1,41 +1,41 @@ name: "DriveFolder" desc: - ja: "ドライブのフォルダを表します。" - en: "A folder of Drive." + ja-JP: "ドライブのフォルダを表します。" + en-US: "A folder of Drive." props: id: type: "id" optional: false desc: - ja: "フォルダID" - en: "The ID of this folder" + ja-JP: "フォルダID" + en-US: "The ID of this folder" createdAt: type: "date" optional: false desc: - ja: "作成日時" - en: "The created date of this folder" + ja-JP: "作成日時" + en-US: "The created date of this folder" userId: type: "id(User)" optional: false desc: - ja: "所有者ID" - en: "The ID of the owner of this folder" + ja-JP: "所有者ID" + en-US: "The ID of the owner of this folder" parentId: type: "entity(DriveFolder)" optional: false desc: - ja: "親フォルダのID (ルートなら null)" - en: "The ID of parent folder" + ja-JP: "親フォルダのID (ルートなら null)" + en-US: "The ID of parent folder" name: type: "string" optional: false desc: - ja: "フォルダ名" - en: "The name of this folder" + ja-JP: "フォルダ名" + en-US: "The name of this folder" diff --git a/src/docs/api/entities/note.yaml b/src/docs/api/entities/note.yaml index 04cb3c9824..cae9a53f82 100644 --- a/src/docs/api/entities/note.yaml +++ b/src/docs/api/entities/note.yaml @@ -1,190 +1,190 @@ name: "Note" desc: - ja: "投稿。" - en: "A note." + ja-JP: "投稿。" + en-US: "A note." props: id: type: "id" optional: false desc: - ja: "投稿ID" - en: "The ID of this note" + ja-JP: "投稿ID" + en-US: "The ID of this note" createdAt: type: "date" optional: false desc: - ja: "投稿日時" - en: "The posted date of this note" + ja-JP: "投稿日時" + en-US: "The posted date of this note" viaMobile: type: "boolean" optional: true desc: - ja: "モバイル端末から投稿したか否か(自己申告であることに留意)" - en: "Whether this note sent via a mobile device" + ja-JP: "モバイル端末から投稿したか否か(自己申告であることに留意)" + en-US: "Whether this note sent via a mobile device" text: type: "string" optional: true desc: - ja: "投稿の本文" - en: "The text of this note" + ja-JP: "投稿の本文" + en-US: "The text of this note" mediaIds: type: "id(DriveFile)[]" optional: true desc: - ja: "添付されているメディアのID (なければレスポンスでは空配列)" - en: "The IDs of the attached media (empty array for response if no media is attached)" + ja-JP: "添付されているメディアのID (なければレスポンスでは空配列)" + en-US: "The IDs of the attached media (empty array for response if no media is attached)" media: type: "entity(DriveFile)[]" optional: true desc: - ja: "添付されているメディア" - en: "The attached media" + ja-JP: "添付されているメディア" + en-US: "The attached media" userId: type: "id(User)" optional: false desc: - ja: "投稿者ID" - en: "The ID of author of this note" + ja-JP: "投稿者ID" + en-US: "The ID of author of this note" user: type: "entity(User)" optional: true desc: - ja: "投稿者" - en: "The author of this note" + ja-JP: "投稿者" + en-US: "The author of this note" myReaction: type: "string" optional: true desc: - ja: "この投稿に対する自分のリアクション" - en: "The your reaction of this note" + ja-JP: "この投稿に対する自分のリアクション" + en-US: "The your reaction of this note" reactionCounts: type: "object" optional: false desc: - ja: "リアクションをキーとし、この投稿に対するそのリアクションの数を値としたオブジェクト" + ja-JP: "リアクションをキーとし、この投稿に対するそのリアクションの数を値としたオブジェクト" replyId: type: "id(Note)" optional: true desc: - ja: "返信した投稿のID" - en: "The ID of the replyed note" + ja-JP: "返信した投稿のID" + en-US: "The ID of the replyed note" reply: type: "entity(Note)" optional: true desc: - ja: "返信した投稿" - en: "The replyed note" + ja-JP: "返信した投稿" + en-US: "The replyed note" renoteId: type: "id(Note)" optional: true desc: - ja: "引用した投稿のID" - en: "The ID of the quoted note" + ja-JP: "引用した投稿のID" + en-US: "The ID of the quoted note" renote: type: "entity(Note)" optional: true desc: - ja: "引用した投稿" - en: "The quoted note" + ja-JP: "引用した投稿" + en-US: "The quoted note" poll: type: "object" optional: true desc: - ja: "投票" - en: "The poll" + ja-JP: "投票" + en-US: "The poll" props: choices: type: "object[]" optional: false desc: - ja: "投票の選択肢" - en: "The choices of this poll" + ja-JP: "投票の選択肢" + en-US: "The choices of this poll" props: id: type: "number" optional: false desc: - ja: "選択肢ID" - en: "The ID of this choice" + ja-JP: "選択肢ID" + en-US: "The ID of this choice" isVoted: type: "boolean" optional: true desc: - ja: "自分がこの選択肢に投票したかどうか" - en: "Whether you voted to this choice" + ja-JP: "自分がこの選択肢に投票したかどうか" + en-US: "Whether you voted to this choice" text: type: "string" optional: false desc: - ja: "選択肢本文" - en: "The text of this choice" + ja-JP: "選択肢本文" + en-US: "The text of this choice" votes: type: "number" optional: false desc: - ja: "この選択肢に投票された数" - en: "The number voted for this choice" + ja-JP: "この選択肢に投票された数" + en-US: "The number voted for this choice" geo: type: "object" optional: true desc: - ja: "位置情報" - en: "Geo location" + ja-JP: "位置情報" + en-US: "Geo location" props: coordinates: type: "number[]" optional: false desc: - ja: "座標。最初に経度:-180〜180で表す。最後に緯度:-90〜90で表す。" + ja-JP: "座標。最初に経度:-180〜180で表す。最後に緯度:-90〜90で表す。" altitude: type: "number" optional: false desc: - ja: "高度。メートル単位で表す。" + ja-JP: "高度。メートル単位で表す。" accuracy: type: "number" optional: false desc: - ja: "緯度、経度の精度。メートル単位で表す。" + ja-JP: "緯度、経度の精度。メートル単位で表す。" altitudeAccuracy: type: "number" optional: false desc: - ja: "高度の精度。メートル単位で表す。" + ja-JP: "高度の精度。メートル単位で表す。" heading: type: "number" optional: false desc: - ja: "方角。0〜360の角度で表す。0が北、90が東、180が南、270が西。" + ja-JP: "方角。0〜360の角度で表す。0が北、90が東、180が南、270が西。" speed: type: "number" optional: false desc: - ja: "速度。メートル / 秒数で表す。" + ja-JP: "速度。メートル / 秒数で表す。" diff --git a/src/docs/api/entities/user.yaml b/src/docs/api/entities/user.yaml index c245974568..c90b55ee88 100644 --- a/src/docs/api/entities/user.yaml +++ b/src/docs/api/entities/user.yaml @@ -1,174 +1,174 @@ name: "User" desc: - ja: "ユーザー。" - en: "A user." + ja-JP: "ユーザー。" + en-US: "A user." props: id: type: "id" optional: false desc: - ja: "ユーザーID" - en: "The ID of this user" + ja-JP: "ユーザーID" + en-US: "The ID of this user" createdAt: type: "date" optional: false desc: - ja: "アカウント作成日時" - en: "The registered date of this user" + ja-JP: "アカウント作成日時" + en-US: "The registered date of this user" username: type: "string" optional: false desc: - ja: "ユーザー名" - en: "The username of this user" + ja-JP: "ユーザー名" + en-US: "The username of this user" description: type: "string" optional: false desc: - ja: "アカウントの説明(自己紹介)" - en: "The description of this user" + ja-JP: "アカウントの説明(自己紹介)" + en-US: "The description of this user" avatarId: type: "id(DriveFile)" optional: true desc: - ja: "アバターのID" - en: "The ID of the avatar of this user" + ja-JP: "アバターのID" + en-US: "The ID of the avatar of this user" avatarUrl: type: "string" optional: false desc: - ja: "アバターのURL" - en: "The URL of the avatar of this user" + ja-JP: "アバターのURL" + en-US: "The URL of the avatar of this user" bannerId: type: "id(DriveFile)" optional: true desc: - ja: "バナーのID" - en: "The ID of the banner of this user" + ja-JP: "バナーのID" + en-US: "The ID of the banner of this user" bannerUrl: type: "string" optional: false desc: - ja: "バナーのURL" - en: "The URL of the banner of this user" + ja-JP: "バナーのURL" + en-US: "The URL of the banner of this user" followersCount: type: "number" optional: false desc: - ja: "フォロワーの数" - en: "The number of the followers for this user" + ja-JP: "フォロワーの数" + en-US: "The number of the followers for this user" followingCount: type: "number" optional: false desc: - ja: "フォローしているユーザーの数" - en: "The number of the following users for this user" + ja-JP: "フォローしているユーザーの数" + en-US: "The number of the following users for this user" isFollowing: type: "boolean" optional: true desc: - ja: "自分がこのユーザーをフォローしているか" + ja-JP: "自分がこのユーザーをフォローしているか" isFollowed: type: "boolean" optional: true desc: - ja: "自分がこのユーザーにフォローされているか" + ja-JP: "自分がこのユーザーにフォローされているか" isMuted: type: "boolean" optional: true desc: - ja: "自分がこのユーザーをミュートしているか" - en: "Whether you muted this user" + ja-JP: "自分がこのユーザーをミュートしているか" + en-US: "Whether you muted this user" notesCount: type: "number" optional: false desc: - ja: "投稿の数" - en: "The number of the notes of this user" + ja-JP: "投稿の数" + en-US: "The number of the notes of this user" pinnedNote: type: "entity(Note)" optional: true desc: - ja: "ピン留めされた投稿" - en: "The pinned note of this user" + ja-JP: "ピン留めされた投稿" + en-US: "The pinned note of this user" pinnedNoteId: type: "id(Note)" optional: true desc: - ja: "ピン留めされた投稿のID" - en: "The ID of the pinned note of this user" + ja-JP: "ピン留めされた投稿のID" + en-US: "The ID of the pinned note of this user" host: type: "string | null" optional: false desc: - ja: "ホスト (例: example.com:3000)" - en: "Host (e.g. example.com:3000)" + ja-JP: "ホスト (例: example.com:3000)" + en-US: "Host (e.g. example.com:3000)" twitter: type: "object" optional: true desc: - ja: "連携されているTwitterアカウント情報" - en: "The info of the connected twitter account of this user" + ja-JP: "連携されているTwitterアカウント情報" + en-US: "The info of the connected twitter account of this user" props: userId: type: "string" optional: false desc: - ja: "ユーザーID" - en: "The user ID" + ja-JP: "ユーザーID" + en-US: "The user ID" screenName: type: "string" optional: false desc: - ja: "ユーザー名" - en: "The screen name of this user" + ja-JP: "ユーザー名" + en-US: "The screen name of this user" isBot: type: "boolean" optional: true desc: - ja: "botか否か(自己申告であることに留意)" - en: "Whether is bot or not" + ja-JP: "botか否か(自己申告であることに留意)" + en-US: "Whether is bot or not" profile: type: "object" optional: false desc: - ja: "プロフィール" - en: "The profile of this user" + ja-JP: "プロフィール" + en-US: "The profile of this user" props: location: type: "string" optional: true desc: - ja: "場所" - en: "The location of this user" + ja-JP: "場所" + en-US: "The location of this user" birthday: type: "string" optional: true desc: - ja: "誕生日 (YYYY-MM-DD)" - en: "The birthday of this user (YYYY-MM-DD)" + ja-JP: "誕生日 (YYYY-MM-DD)" + en-US: "The birthday of this user (YYYY-MM-DD)" diff --git a/src/docs/api/entities/view.pug b/src/docs/api/entities/view.pug index d5c192f438..1f166d053c 100644 --- a/src/docs/api/entities/view.pug +++ b/src/docs/api/entities/view.pug @@ -7,7 +7,7 @@ block meta block main h1= name - p#desc= desc[lang] || desc['ja'] + p#desc= desc[lang] || desc['ja-JP'] section h2= i18n('docs.api.entities.properties') diff --git a/src/docs/api/mixins.pug b/src/docs/api/mixins.pug index 925aab2934..563739d52b 100644 --- a/src/docs/api/mixins.pug +++ b/src/docs/api/mixins.pug @@ -31,4 +31,4 @@ mixin propTable(props) td.name= prop.name td.type +type(prop) - td.desc!= prop.desc ? prop.desc[lang] || prop.desc['ja'] : null + td.desc!= prop.desc ? prop.desc[lang] || prop.desc['ja-JP'] : null diff --git a/src/docs/base.pug b/src/docs/base.pug index aeafaeffff..26f19ddf09 100644 --- a/src/docs/base.pug +++ b/src/docs/base.pug @@ -16,7 +16,7 @@ html(lang= lang) nav ul each doc in docs - li: a(href=`/docs/${lang}/${doc.name}`)= doc.title[lang] || doc.title['ja'] + li: a(href=`/docs/${lang}/${doc.name}`)= doc.title[lang] || doc.title['ja-JP'] section h2 API ul diff --git a/src/docs/follow.ja-JP.md b/src/docs/follow.ja-JP.md new file mode 100644 index 0000000000..a883435ab4 --- /dev/null +++ b/src/docs/follow.ja-JP.md @@ -0,0 +1,8 @@ +# フォロー +ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 +ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。 + +## ストーキング +ユーザーをフォローしている状態では、さらに「ストーキング」モードをオンにすることができます。ストーキングを行うと、タイムラインにそのユーザーの全ての投稿が表示されるようになります。つまり、他のユーザーに対する返信も含まれることになります。 +ストーキングするには、ユーザーページの「ストークする」をクリックします。ストーキングをやめるには、もう一度クリックします。 +ストーキングしていることは相手に通知されません。 diff --git a/src/docs/follow.ja.md b/src/docs/follow.ja.md deleted file mode 100644 index a883435ab4..0000000000 --- a/src/docs/follow.ja.md +++ /dev/null @@ -1,8 +0,0 @@ -# フォロー -ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 -ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。 - -## ストーキング -ユーザーをフォローしている状態では、さらに「ストーキング」モードをオンにすることができます。ストーキングを行うと、タイムラインにそのユーザーの全ての投稿が表示されるようになります。つまり、他のユーザーに対する返信も含まれることになります。 -ストーキングするには、ユーザーページの「ストークする」をクリックします。ストーキングをやめるには、もう一度クリックします。 -ストーキングしていることは相手に通知されません。 diff --git a/src/docs/mute.ja-JP.md b/src/docs/mute.ja-JP.md new file mode 100644 index 0000000000..6a9608662a --- /dev/null +++ b/src/docs/mute.ja-JP.md @@ -0,0 +1,13 @@ +# ミュート + +ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります: + +* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote) +* そのユーザーからの通知 +* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴 + +ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。 + +ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。 + +設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。 diff --git a/src/docs/mute.ja.md b/src/docs/mute.ja.md deleted file mode 100644 index 6a9608662a..0000000000 --- a/src/docs/mute.ja.md +++ /dev/null @@ -1,13 +0,0 @@ -# ミュート - -ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります: - -* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote) -* そのユーザーからの通知 -* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴 - -ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。 - -ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。 - -設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。 diff --git a/src/docs/reversi-bot.ja-JP.md b/src/docs/reversi-bot.ja-JP.md new file mode 100644 index 0000000000..98b543ca6c --- /dev/null +++ b/src/docs/reversi-bot.ja-JP.md @@ -0,0 +1,177 @@ +# MisskeyリバーシBotの開発 +Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。 + +1. `games/reversi`ストリームに以下のパラメータを付けて接続する: + * `i`: botアカウントのAPIキー + +2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる + * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている + +3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する + +4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する: + * `i`: botアカウントのAPIキー + * `game`: `game`の`id` + +5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う + +6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する + +7. ゲームが開始すると、`started`イベントが流れてくる + * イベントの中身にはゲーム情報が含まれている + +8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述) + +9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる + * `color`として石の色が含まれている + * `pos`として位置情報が含まれている + +## 位置の計算法 +8x8のマップを考える場合、各マスの位置(Posと呼びます)は次のようになっています: +``` ++--+--+--+--+--+--+--+--+ +| 0| 1| 2| 3| 4| 5| 6| 7| ++--+--+--+--+--+--+--+--+ +| 8| 9|10|11|12|13|14|15| ++--+--+--+--+--+--+--+--+ +|16|17|18|19|20|21|22|23| +... +``` + +### X,Y座標 から Pos に変換する +``` +pos = x + (y * mapWidth) +``` +`mapWidth`は、ゲーム情報の`settings.map`から、次のようにして計算できます: +``` +mapWidth = settings.map[0].length +``` + +### Pos から X,Y座標 に変換する +``` +x = pos % mapWidth +y = Math.floor(pos / mapWidth) +``` + +## マップ情報 +マップ情報は、ゲーム情報の`settings.map`に入っています。 +文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 +それをもとにマップのデザインを知る事が出来ます: +* `(スペース)` ... マス無し +* `-` ... マス +* `b` ... 初期配置される黒石 +* `w` ... 初期配置される白石 + +例えば、4*4の次のような単純なマップがあるとします: +```text ++---+---+---+---+ +| | | | | ++---+---+---+---+ +| | ○ | ● | | ++---+---+---+---+ +| | ● | ○ | | ++---+---+---+---+ +| | | | | ++---+---+---+---+ +``` + +この場合、マップデータはこのようになります: +```javascript +['----', '-wb-', '-bw-', '----'] +``` + +## ユーザーにフォームを提示して対話可能Botを作成する +ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 +例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。 + +フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します: +```javascript +{ + type: 'init-form', + body: [フォームコントロールの配列] +} +``` + +フォームコントロールの配列については今から説明します。 +フォームコントロールは、次のようなオブジェクトです: +```javascript +{ + id: 'switch1', + type: 'switch', + label: 'Enable hoge', + value: false +} +``` +`id` ... コントロールのID。 +`type` ... コントロールの種類。後述します。 +`label` ... コントロールと一緒に表記するテキスト。 +`value` ... コントロールのデフォルト値。 + +### フォームの操作を受け取る +ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 +イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 +例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます: +```javascript +{ + id: 'switch1', + value: true +} +``` + +### フォームコントロールの種類 +#### スイッチ +type: `switch` +スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。 + +##### プロパティ +`desc` ... スイッチの詳細な説明。 + +#### ラジオボタン +type: `radio` +ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。 + +##### プロパティ +`items` ... ラジオボタンの選択肢。例: +```javascript +items: [{ + label: '弱', + value: 1 +}, { + label: '中', + value: 2 +}, { + label: '強', + value: 3 +}] +``` + +#### スライダー +type: `slider` +スライダーを表示します。 + +##### プロパティ +`min` ... スライダーの下限。 +`max` ... スライダーの上限。 +`step` ... 入力欄で刻むステップ値。 + +#### テキストボックス +type: `textbox` +テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。 + +## ユーザーにメッセージを表示する +設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 +例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 +メッセージを表示するには、次のメッセージをストリームに送信します: +```javascript +{ + type: 'message', + body: { + text: 'メッセージ内容', + type: 'メッセージの種類' + } +} +``` +メッセージの種類: `success`, `info`, `warning`, `error`。 + +## 投了する +投了をするには、このエンドポイントにリクエストします。 diff --git a/src/docs/reversi-bot.ja.md b/src/docs/reversi-bot.ja.md deleted file mode 100644 index 98b543ca6c..0000000000 --- a/src/docs/reversi-bot.ja.md +++ /dev/null @@ -1,177 +0,0 @@ -# MisskeyリバーシBotの開発 -Misskeyのリバーシ機能に対応したBotの開発方法をここに記します。 - -1. `games/reversi`ストリームに以下のパラメータを付けて接続する: - * `i`: botアカウントのAPIキー - -2. 対局への招待が来たら、ストリームから`invited`イベントが流れてくる - * イベントの中身に、`parent`という名前で対局へ誘ってきたユーザーの情報が含まれている - -3. `games/reversi/match`へ、`user_id`として`parent`の`id`が含まれたリクエストを送信する - -4. 上手くいくとゲーム情報が返ってくるので、`games/reversi-game`ストリームへ、以下のパラメータを付けて接続する: - * `i`: botアカウントのAPIキー - * `game`: `game`の`id` - -5. この間、相手がゲームの設定を変更するとその都度`update-settings`イベントが流れてくるので、必要であれば何かしらの処理を行う - -6. 設定に満足したら、`{ type: 'accept' }`メッセージをストリームに送信する - -7. ゲームが開始すると、`started`イベントが流れてくる - * イベントの中身にはゲーム情報が含まれている - -8. 石を打つには、ストリームに`{ type: 'set', pos: <位置> }`を送信する(位置の計算方法は後述) - -9. 相手または自分が石を打つと、ストリームから`set`イベントが流れてくる - * `color`として石の色が含まれている - * `pos`として位置情報が含まれている - -## 位置の計算法 -8x8のマップを考える場合、各マスの位置(Posと呼びます)は次のようになっています: -``` -+--+--+--+--+--+--+--+--+ -| 0| 1| 2| 3| 4| 5| 6| 7| -+--+--+--+--+--+--+--+--+ -| 8| 9|10|11|12|13|14|15| -+--+--+--+--+--+--+--+--+ -|16|17|18|19|20|21|22|23| -... -``` - -### X,Y座標 から Pos に変換する -``` -pos = x + (y * mapWidth) -``` -`mapWidth`は、ゲーム情報の`settings.map`から、次のようにして計算できます: -``` -mapWidth = settings.map[0].length -``` - -### Pos から X,Y座標 に変換する -``` -x = pos % mapWidth -y = Math.floor(pos / mapWidth) -``` - -## マップ情報 -マップ情報は、ゲーム情報の`settings.map`に入っています。 -文字列の配列になっており、ひとつひとつの文字がマス情報を表しています。 -それをもとにマップのデザインを知る事が出来ます: -* `(スペース)` ... マス無し -* `-` ... マス -* `b` ... 初期配置される黒石 -* `w` ... 初期配置される白石 - -例えば、4*4の次のような単純なマップがあるとします: -```text -+---+---+---+---+ -| | | | | -+---+---+---+---+ -| | ○ | ● | | -+---+---+---+---+ -| | ● | ○ | | -+---+---+---+---+ -| | | | | -+---+---+---+---+ -``` - -この場合、マップデータはこのようになります: -```javascript -['----', '-wb-', '-bw-', '----'] -``` - -## ユーザーにフォームを提示して対話可能Botを作成する -ユーザーとのコミュニケーションを行うため、ゲームの設定画面でユーザーにフォームを提示することができます。 -例えば、Botの強さをユーザーが設定できるようにする、といったシナリオが考えられます。 - -フォームを提示するには、`reversi-game`ストリームに次のメッセージを送信します: -```javascript -{ - type: 'init-form', - body: [フォームコントロールの配列] -} -``` - -フォームコントロールの配列については今から説明します。 -フォームコントロールは、次のようなオブジェクトです: -```javascript -{ - id: 'switch1', - type: 'switch', - label: 'Enable hoge', - value: false -} -``` -`id` ... コントロールのID。 -`type` ... コントロールの種類。後述します。 -`label` ... コントロールと一緒に表記するテキスト。 -`value` ... コントロールのデフォルト値。 - -### フォームの操作を受け取る -ユーザーがフォームを操作すると、ストリームから`update-form`イベントが流れてきます。 -イベントの中身には、コントロールのIDと、ユーザーが設定した値が含まれています。 -例えば、上で示したスイッチをユーザーがオンにしたとすると、次のイベントが流れてきます: -```javascript -{ - id: 'switch1', - value: true -} -``` - -### フォームコントロールの種類 -#### スイッチ -type: `switch` -スイッチを表示します。何かの機能をオン/オフさせたい場合に有用です。 - -##### プロパティ -`desc` ... スイッチの詳細な説明。 - -#### ラジオボタン -type: `radio` -ラジオボタンを表示します。選択肢を提示するのに有用です。例えば、Botの強さを設定させるなどです。 - -##### プロパティ -`items` ... ラジオボタンの選択肢。例: -```javascript -items: [{ - label: '弱', - value: 1 -}, { - label: '中', - value: 2 -}, { - label: '強', - value: 3 -}] -``` - -#### スライダー -type: `slider` -スライダーを表示します。 - -##### プロパティ -`min` ... スライダーの下限。 -`max` ... スライダーの上限。 -`step` ... 入力欄で刻むステップ値。 - -#### テキストボックス -type: `textbox` -テキストボックスを表示します。ユーザーになにか入力させる一般的な用途に利用できます。 - -## ユーザーにメッセージを表示する -設定画面でユーザーと対話する、フォーム以外のもうひとつの方法がこれです。ユーザーになにかメッセージを表示することができます。 -例えば、ユーザーがBotの対応していないモードやマップを選択したとき、警告を表示するなどです。 -メッセージを表示するには、次のメッセージをストリームに送信します: -```javascript -{ - type: 'message', - body: { - text: 'メッセージ内容', - type: 'メッセージの種類' - } -} -``` -メッセージの種類: `success`, `info`, `warning`, `error`。 - -## 投了する -投了をするには、このエンドポイントにリクエストします。 diff --git a/src/docs/stream.ja-JP.md b/src/docs/stream.ja-JP.md new file mode 100644 index 0000000000..c720299932 --- /dev/null +++ b/src/docs/stream.ja-JP.md @@ -0,0 +1,183 @@ +# ストリーミングAPI + +ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、HTTPリクエストを発生させることなくAPIにアクセスしたりすることができます。 + +ストリーミングAPIは複数の種類がありますが、ここではメインとなる「ホームストリーム」について説明します。 + +## ストリームに接続する + +以下のURLに**websocket**接続します。 +``` +%URL% +``` + +接続する際は、`i`というパラメータ名で認証情報を含めます。例: +``` +%URL%/?i=xxxxxxxxxxxxxxx +``` + +認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。 + +
+

認証情報の取得については、こちらのドキュメントをご確認ください。

+
+ + +## ストリームを経由してAPIリクエストする + +ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。 + +ストリームを経由してAPIリクエストするには、次のようなメッセージをストリームに送信します: +```json +{ + type: 'api', + id: 'xxxxxxxxxxxxxxxx', + endpoint: 'notes/create', + data: { + text: 'yee haw!' + } +} +``` + +`id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。 + +`endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。 + +`data`には、エンドポイントのパラメータを含めます。 + +
+

APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。

+
+ +### レスポンスの受信 + +APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。 + +```json +{ + type: 'api-res:xxxxxxxxxxxxxxxx', + body: { + ... + } +} +``` + +`xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。 + +`body`には、レスポンスが含まれています。 + +## 投稿のキャプチャ + +Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。 + +例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。 + +しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。 + +この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。 + +### 投稿をキャプチャする + +投稿をキャプチャするには、ストリームに次のようなメッセージを送信します: + +```json +{ + type: 'capture', + id: 'xxxxxxxxxxxxxxxx' +} +``` + +`id`には、キャプチャしたい投稿の`id`を設定します。 + +このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。 + +例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます: + +```json +{ + type: 'note-updated', + body: { + note: { + ... + } + } +} +``` + +`body`内の`note`には、その投稿の最新の情報が含まれています。 + +--- + +このように、投稿の情報が更新されると、`note-updated`イベントが流れてくるようになります。`note-updated`イベントが発生するのは、以下の場合です: + +- 投稿にリアクションが付いた +- 投稿に添付されたアンケートに投票がされた +- 投稿が削除された + +### 投稿のキャプチャを解除する + +その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。 + +次のメッセージを送信します: + +```json +{ + type: 'decapture', + id: 'xxxxxxxxxxxxxxxx' +} +``` + +`id`には、キャプチャを解除したい投稿の`id`を設定します。 + +このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。 + +## 流れてくるイベント一覧 + +流れてくるすべてのメッセージはJSON形式で、必ず`type`というプロパティが含まれています。これにより、メッセージの種類(イベント)を判別することができます。 + +### `note` + +タイムラインに新しい投稿が流れてきたときに発生するイベントです。 + +`body`プロパティの中に、投稿情報が含まれています。 + +### `renote` + +自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。 + +`body`プロパティの中に、Renoteされた投稿情報が含まれています。 + +### `mention` + +誰かからメンションされたときに発生するイベントです。 + +`body`プロパティの中に、投稿情報が含まれています。 + +### `read_all_notifications` + +自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。 + +### `meUpdated` + +自分の情報が更新されたことを表すイベントです。 + +`body`プロパティの中に、最新の自分のアカウントの情報が含まれています。 + +### `follow` + +自分が誰かをフォローしたときに発生するイベントです。 + +`body`プロパティの中に、フォローしたユーザーの情報が含まれています。 + +### `unfollow` + +自分が誰かのフォローを解除したときに発生するイベントです。 + +`body`プロパティの中に、フォロー解除したユーザーの情報が含まれています。 + +### `followed` + +自分が誰かにフォローされたときに発生するイベントです。 + +`body`プロパティの中に、フォローしてきたユーザーの情報が含まれています。 + diff --git a/src/docs/stream.ja.md b/src/docs/stream.ja.md deleted file mode 100644 index c720299932..0000000000 --- a/src/docs/stream.ja.md +++ /dev/null @@ -1,183 +0,0 @@ -# ストリーミングAPI - -ストリーミングAPIを使うと、リアルタイムで様々な情報(例えばタイムラインに新しい投稿が流れてきた、メッセージが届いた、フォローされた、など)を受け取ったり、HTTPリクエストを発生させることなくAPIにアクセスしたりすることができます。 - -ストリーミングAPIは複数の種類がありますが、ここではメインとなる「ホームストリーム」について説明します。 - -## ストリームに接続する - -以下のURLに**websocket**接続します。 -``` -%URL% -``` - -接続する際は、`i`というパラメータ名で認証情報を含めます。例: -``` -%URL%/?i=xxxxxxxxxxxxxxx -``` - -認証情報は、自分のAPIキーや、アプリケーションからストリームに接続する際はユーザーのアクセストークンのことを指します。 - -
-

認証情報の取得については、こちらのドキュメントをご確認ください。

-
- - -## ストリームを経由してAPIリクエストする - -ストリームを経由してAPIリクエストすると、HTTPリクエストを発生させずにAPIを利用できます。そのため、コードを簡潔にできたり、パフォーマンスの向上を見込めるかもしれません。 - -ストリームを経由してAPIリクエストするには、次のようなメッセージをストリームに送信します: -```json -{ - type: 'api', - id: 'xxxxxxxxxxxxxxxx', - endpoint: 'notes/create', - data: { - text: 'yee haw!' - } -} -``` - -`id`には、APIのレスポンスを識別するための、APIリクエストごとの一意なIDを設定する必要があります。UUIDや、簡単な乱数のようなもので構いません。 - -`endpoint`には、あなたがリクエストしたいAPIのエンドポイントを指定します。 - -`data`には、エンドポイントのパラメータを含めます。 - -
-

APIのエンドポイントやパラメータについてはAPIリファレンスをご確認ください。

-
- -### レスポンスの受信 - -APIへリクエストすると、レスポンスがストリームから次のような形式で流れてきます。 - -```json -{ - type: 'api-res:xxxxxxxxxxxxxxxx', - body: { - ... - } -} -``` - -`xxxxxxxxxxxxxxxx`の部分には、リクエストの際に設定された`id`が含まれています。これにより、どのリクエストに対するレスポンスなのか判別することができます。 - -`body`には、レスポンスが含まれています。 - -## 投稿のキャプチャ - -Misskeyは投稿のキャプチャと呼ばれる仕組みを提供しています。これは、指定した投稿のイベントをストリームで受け取る機能です。 - -例えばタイムラインを取得してユーザーに表示したとします。ここで誰かがそのタイムラインに含まれるどれかの投稿に対してリアクションしたとします。 - -しかし、クライアントからするとある投稿にリアクションが付いたことなどは知る由がないため、リアルタイムでリアクションをタイムライン上の投稿に反映して表示するといったことができません。 - -この問題を解決するために、Misskeyは投稿のキャプチャ機構を用意しています。投稿をキャプチャすると、その投稿に関するイベントを受け取ることができるため、リアルタイムでリアクションを反映させたりすることが可能になります。 - -### 投稿をキャプチャする - -投稿をキャプチャするには、ストリームに次のようなメッセージを送信します: - -```json -{ - type: 'capture', - id: 'xxxxxxxxxxxxxxxx' -} -``` - -`id`には、キャプチャしたい投稿の`id`を設定します。 - -このメッセージを送信すると、Misskeyにキャプチャを要請したことになり、以後、その投稿に関するイベントが流れてくるようになります。 - -例えば投稿にリアクションが付いたとすると、次のようなメッセージが流れてきます: - -```json -{ - type: 'note-updated', - body: { - note: { - ... - } - } -} -``` - -`body`内の`note`には、その投稿の最新の情報が含まれています。 - ---- - -このように、投稿の情報が更新されると、`note-updated`イベントが流れてくるようになります。`note-updated`イベントが発生するのは、以下の場合です: - -- 投稿にリアクションが付いた -- 投稿に添付されたアンケートに投票がされた -- 投稿が削除された - -### 投稿のキャプチャを解除する - -その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください。 - -次のメッセージを送信します: - -```json -{ - type: 'decapture', - id: 'xxxxxxxxxxxxxxxx' -} -``` - -`id`には、キャプチャを解除したい投稿の`id`を設定します。 - -このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります。 - -## 流れてくるイベント一覧 - -流れてくるすべてのメッセージはJSON形式で、必ず`type`というプロパティが含まれています。これにより、メッセージの種類(イベント)を判別することができます。 - -### `note` - -タイムラインに新しい投稿が流れてきたときに発生するイベントです。 - -`body`プロパティの中に、投稿情報が含まれています。 - -### `renote` - -自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません。 - -`body`プロパティの中に、Renoteされた投稿情報が含まれています。 - -### `mention` - -誰かからメンションされたときに発生するイベントです。 - -`body`プロパティの中に、投稿情報が含まれています。 - -### `read_all_notifications` - -自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。 - -### `meUpdated` - -自分の情報が更新されたことを表すイベントです。 - -`body`プロパティの中に、最新の自分のアカウントの情報が含まれています。 - -### `follow` - -自分が誰かをフォローしたときに発生するイベントです。 - -`body`プロパティの中に、フォローしたユーザーの情報が含まれています。 - -### `unfollow` - -自分が誰かのフォローを解除したときに発生するイベントです。 - -`body`プロパティの中に、フォロー解除したユーザーの情報が含まれています。 - -### `followed` - -自分が誰かにフォローされたときに発生するイベントです。 - -`body`プロパティの中に、フォローしてきたユーザーの情報が含まれています。 - diff --git a/src/docs/timelines.ja-JP.md b/src/docs/timelines.ja-JP.md new file mode 100644 index 0000000000..36ba61bd2d --- /dev/null +++ b/src/docs/timelines.ja-JP.md @@ -0,0 +1,15 @@ +# タイムラインの比較 + +https://docs.google.com/spreadsheets/d/1lxQ2ugKrhz58Bg96HTDK_2F98BUritkMyIiBkOByjHA/edit?usp=sharing + +## ホーム +自分のフォローしているユーザーの投稿 + +## ローカル +全てのローカルユーザーの「ホーム」指定されていない投稿 + +## ソーシャル +自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿 + +## グローバル +全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿 diff --git a/src/docs/timelines.ja.md b/src/docs/timelines.ja.md deleted file mode 100644 index 36ba61bd2d..0000000000 --- a/src/docs/timelines.ja.md +++ /dev/null @@ -1,15 +0,0 @@ -# タイムラインの比較 - -https://docs.google.com/spreadsheets/d/1lxQ2ugKrhz58Bg96HTDK_2F98BUritkMyIiBkOByjHA/edit?usp=sharing - -## ホーム -自分のフォローしているユーザーの投稿 - -## ローカル -全てのローカルユーザーの「ホーム」指定されていない投稿 - -## ソーシャル -自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿 - -## グローバル -全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿 -- cgit v1.2.3-freya