From 4f514763a3fafd68a8e49575d4e6d0697ae448de Mon Sep 17 00:00:00 2001 From: Last2014 Date: Tue, 16 Sep 2025 02:18:14 +0900 Subject: [PATCH] =?UTF-8?q?HTTP413=E3=81=AB=E5=AF=BE=E5=BF=9C=E3=83=BBAPI?= =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api-docs/index.php | 102 ++ api-docs/loading.css | 30 + api-docs/openapi.php | 3280 ++++++++++++++++++++++++++++++++++++++++++ api-docs/uwuzu.png | Bin 0 -> 9076 bytes api/.htaccess | 1 + 5 files changed, 3413 insertions(+) create mode 100644 api-docs/index.php create mode 100644 api-docs/loading.css create mode 100644 api-docs/openapi.php create mode 100644 api-docs/uwuzu.png diff --git a/api-docs/index.php b/api-docs/index.php new file mode 100644 index 0000000..ed9f03a --- /dev/null +++ b/api-docs/index.php @@ -0,0 +1,102 @@ + 0, + 'path' => '/', + 'domain' => '', + 'secure' => true, + 'httponly' => true, + 'samesite' => 'Lax' +]); +session_start(); +session_regenerate_id(true); + +// データベースに接続 +try { + + $option = array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + +} catch(PDOException $e) { + + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} + +//ログイン認証--------------------------------------------------- +blockedIP($_SERVER['REMOTE_ADDR']); +$is_login = uwuzuUserLogin($_SESSION, $_COOKIE, $_SERVER['REMOTE_ADDR'], "user"); +if($is_login === false){ + header("Location: ../index.php"); + exit; +}else{ + $userid = safetext($is_login['userid']); + $username = safetext($is_login['username']); + $loginid = safetext($is_login["loginid"]); + $role = safetext($is_login["role"]); + $sacinfo = safetext($is_login["sacinfo"]); + $myblocklist = safetext($is_login["blocklist"]); + $myfollowlist = safetext($is_login["follow"]); + $is_Admin = safetext($is_login["admin"]); +} + +require('../logout/logout.php'); +?> + + + + uwuzu API Docs - <?php echo safetext($serversettings["serverinfo"]["server_name"]);?> + + + + + + + + + +
+ + + + + + +
+ + + +
+ + + diff --git a/api-docs/loading.css b/api-docs/loading.css new file mode 100644 index 0000000..9c4ae1b --- /dev/null +++ b/api-docs/loading.css @@ -0,0 +1,30 @@ +html, +body, +#loading { + width: 100%; + height: 100%; + position: absolute; +} + +#loading { + display: flex; + align-items: center; +} + +iconify-icon { + margin: 0 auto; +} + +@media (prefers-color-scheme: light) { + #loading { + color: var(--text-color); + background-color: var(--background-color); + } +} + +@media (prefers-color-scheme: dark) { + #loading { + color: var(--background-color); + background-color: var(--dark-background-color); + } +} diff --git a/api-docs/openapi.php b/api-docs/openapi.php new file mode 100644 index 0000000..41fe111 --- /dev/null +++ b/api-docs/openapi.php @@ -0,0 +1,3280 @@ + 0, + 'path' => '/', + 'domain' => '', + 'secure' => true, + 'httponly' => true, + 'samesite' => 'Lax' +]); +session_start(); +session_regenerate_id(true); + +// データベースに接続 +try { + + $option = array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + +} catch(PDOException $e) { + + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} + +//ログイン認証--------------------------------------------------- +blockedIP($_SERVER['REMOTE_ADDR']); +$is_login = uwuzuUserLogin($_SESSION, $_COOKIE, $_SERVER['REMOTE_ADDR'], "user"); +if($is_login === false){ + header("Location: ../index.php"); + exit; +}else{ + $userid = safetext($is_login['userid']); + $username = safetext($is_login['username']); + $loginid = safetext($is_login["loginid"]); + $role = safetext($is_login["role"]); + $sacinfo = safetext($is_login["sacinfo"]); + $myblocklist = safetext($is_login["blocklist"]); + $myfollowlist = safetext($is_login["follow"]); + $is_Admin = safetext($is_login["admin"]); +} + +$protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https://' : 'http://'; +$domain = $_SERVER['HTTP_HOST']; +$port = ":" . $_SERVER['REMOTE_PORT']; +if ($protocol === "https://" && $port === 443) { + $port = ""; +} elseif ($protocol === "http://" && $port === 80) { + $port = ""; +} +$origin = $protocol . $domain . $port; + +$mojisizefile = "../server/textsize.txt"; +$max_ueuse_length = (int)safetext(file_get_contents($mojisizefile)); + +require('../logout/logout.php'); +?> + +openapi: 3.1.1 +info: + title: uwuzu API Docs + version: 自称v1.6.5 Hapuego + license: + name: UPUL + url: https://docs.uwuzu.com/docs/aboutuwuzu/upul + contact: + name: uwuzu開発部 + url: https://docs.uwuzu.com/docs/others/contact + email: daichimarukana@gmail.com + description: | + # 概要 + ## 注意事項など + > [!CAUTION] + > v1.3.4からの仕様変更されたAPI(bot-api)はv1.4.0にて廃止されました。 + + > [!WARNING] + > 必ずサンプルコード及びタイトルにあるURLに従って使用してください! + > 少しでも異なるURLにするとエラーなど正常に使用できないおそれがございます。 + + ## APIトークン + ### 概要 + uwuzu APIではほぼ全てのエンドポイントでAPIトークンが必要です。 + ### 取得方法 + #### 公式クライアント + https:///others の最下部にある`APIトークンの発行`を選択してください。 + クライアント名と権限を入力し`次へ`を選択します。 + 仕様上はユーザー認可のページを発行する仕組みです。 + そのためユーザー認可と同じ確認ページが表示されます。 + `許可`を選択することでAPIトークンを取得できます。 + > [!WARNING] + > このAPIトークンが表示されるのは1度きりです。 + > 紛失した場合は不正利用防止のためトークンを無効化し再生成してください。 + #### ユーザー認可 + ユーザー認可によるAPIトークンの取得が可能です。 + [`/api/auth`](./#tag/auth/get/auth)にユーザーをリダイレクトさせることで確認ページを表示できます。 + 許可がされた後、[`/api/token/get`](./#tag/token/get/token/get)に + [`/api/auth`](./#tag/token/get/token/get)で使用したセッションIDと + 同じセッションIDを使用しリクエストすることでAPIトークンが取得できます。 + また、[`/api/token/inquiry`](./#tag/token/get/token/inquiry)で + APIトークンを使用することで付与された権限を確認できます。 + > [!WARNING] + > APIトークンが取得できるのは1度きりです。 + > 紛失した場合は不正利用防止のためトークンを無効化し再生成してください。 + ### 認証方法 + Bearer認証が使用されていますが従来の方法でも可能です。 + #### Bearer認証(推奨) + ヘッダーに`Authorization`を含めてください。 + GET・POSTどちらでも使用できます。 + 内容は`Bearer [APIトークン]`です。 + JavaScriptの例: + ```javascript + fetch('https:///api/me/', { + method: 'POST', + headers: { + Authorization: 'Bearer abcdefg' + }, + credentials: 'omit' + }); + ``` + #### 従来の方法(body・URLパラメータ) + POSTの場合はbody、GETの場合はURLパラメータにAPIトークンを含めてください。 + JavaScriptの例: + ```javascript + // GET + fetch('/api/me/?token=abcdefg'); + + // POST + fetch('/api/me/', { + method: 'POST', + body: JSON.stringify({ + token: 'abcdefg' + }) + }); + ``` + + ## メディアの添付 + ### 概要 + 一部のエンドポイントではメディアを添付することができます。 + ### 注意 + これはGETのURLパラメータには非対応であり、 + POSTのbodyにのみ使用できます。 + また、Base64 EncodeはBase64 URLではないためMIMEタイプ等の記述は不要で、 + Base64 URLを使用することはできません。 + 動画、画像どちらにおいてもEXIFが削除されます。 + そして、画像においてはアップロードされた全ての画像が`.webp`に変換されます。 + ### 対応MIMEタイプ + 対応するMIMEタイプは以下の通りです。 + #### 画像 + - `image/gif` + - `image/jpeg` + - `image/png` + - `image/webp` + - `image/bmp` + #### 動画 + - `video/mpeg` + - `video/mp4` + - `video/webm` + - `video/x-msvideo` + +servers: + - url: https:///api + +security: + - bearerAuth: [] + +paths: + /serverinfo-api: + summary: /serverinfo-api + get: + $ref: "#/components/pathItems/ServerInfoAPI" + post: + $ref: "#/components/pathItems/ServerInfoAPI" + /me/: + summary: /me/ + get: + $ref: "#/components/pathItems/MeAPI" + post: + $ref: "#/components/pathItems/MeAPI" + /me/notification/: + summary: /me/notification/ + get: + tags: + - me + - notification + description: | + 自分宛の通知を取得できます。 + トークンのみ指定の場合直近25件の通知を取得します。 + operationId: me/notification + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/me/notification/index.php + security: + - bearerAuth: [] + parameters: + - page: + $ref: "#/components/parameters/page" + - limit: + $ref: "#/components/parameters/limit" + responses: + 200: + $ref: "#/components/responses/NotificationAPI" + 400: + $ref: "#/components/responses/APIAuthFailed" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 500: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - notification_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + post: + tags: + - me + - notification + description: | + 自分宛の通知を取得できます。 + トークンのみ指定の場合直近25件の通知を取得します。 + operationId: me/notification + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/me/notification/index.php + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + type: object + properties: + page: + $ref: "#/components/schemas/Page" + limit: + $ref: "#/components/schemas/Limit" + responses: + 200: + $ref: "#/components/responses/NotificationAPI" + 400: + $ref: "#/components/responses/APIAuthFailed" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 500: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - notification_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + /me/notification/read: + summary: /me/notification/read + get: + $ref: "#/components/pathItems/NotificationRead" + post: + $ref: "#/components/pathItems/NotificationRead" + /me/settings/: + summary: /me/settings/ + get: + tags: + - me + - settings + description: | + 重要な情報以外の自分のアカウント設定を変更できます。 + オプションパラメータをどれか一つ以上含めてください。 + operationId: me/settings + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/me/settings/index.php + security: + - bearerAuth: [] + parameters: + - name: username + in: query + schema: + title: ユーザー名 + type: string + maximum: 50 + example: あどみん + - name: profile + in: query + schema: + title: プロフィール + type: string + maximum: 1024 + example: あどみんです! + responses: + 200: + $ref: "#/components/responses/SuccessOnly" + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - 表示名を入力してください。(USERNAME_INPUT_PLEASE) + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 413: + $ref: "#/components/responses/SettingsCountOver" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 500: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + error_code: + $ref: "#/components/schemas/UpdateFailed" + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + post: + tags: + - me + - settings + description: | + 重要な情報以外の自分のアカウント設定を変更できます。 + オプションパラメータをどれか一つ以上含めてください。 + operationId: me/settings + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/me/settings/index.php + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + type: object + properties: + username: + title: ユーザー名 + type: string + maximum: 50 + example: あどみん + profile: + title: プロフィール + type: string + maximum: 1024 + example: あどみんです! + icon: + title: アイコン画像 + type: string + format: Base64 Encode Image + example: Base64 Data + header: + title: ヘッダー画像 + type: string + format: Base64 Encode Image + example: Base64 Data + responses: + 200: + $ref: "#/components/responses/SuccessOnly" + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - 使用できない画像形式です。(FILE_UPLOAD_DEKINAKATTA) + - 表示名を入力してください。(USERNAME_INPUT_PLEASE) + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 413: + $ref: "#/components/responses/SettingsCountOver" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 500: + description: Internal Server Error + content: + application/json: + schema: + oneOf: + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - ERROR + - アップロード失敗!(1)エラーコード:FILE_DEKASUGUI_PHP_INI_KAKUNIN + - アップロード失敗!(1)エラーコード:FILE_DEKASUGUI_HTML_KAKUNIN + - アップロード失敗!(1)エラーコード:FILE_SUKOSHIDAKE_UPLOAD + - アップロード失敗!(1)エラーコード:FILE_UPLOAD_DEKINAKATTA + - アップロード失敗!(1)エラーコード:TMP_FOLDER_NAI + - アップロード失敗!(1)エラーコード:FILE_KAKIKOMI_SIPPAI + - アップロード失敗!(1)エラーコード:PHPINFO()_KAKUNIN + - アップロード失敗!(1)エラーコード:TMP_FILE_NAI + - アップロード失敗!(1)エラーコード:SAVE_FOLDER_KAKIKOMI_KENNAI + - アップロード失敗!(1)エラーコード:MOVE_UPLOAD_FILE_SIPPAI + - アップロード失敗!(1)エラーコード: S3ERROR + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - ERROR + - アップロード失敗!(2)エラーコード:FILE_DEKASUGUI_PHP_INI_KAKUNIN + - アップロード失敗!(2)エラーコード:FILE_DEKASUGUI_HTML_KAKUNIN + - アップロード失敗!(2)エラーコード:FILE_SUKOSHIDAKE_UPLOAD + - アップロード失敗!(2)エラーコード:FILE_UPLOAD_DEKINAKATTA + - アップロード失敗!(2)エラーコード:TMP_FOLDER_NAI + - アップロード失敗!(2)エラーコード:FILE_KAKIKOMI_SIPPAI + - アップロード失敗!(2)エラーコード:PHPINFO()_KAKUNIN + - アップロード失敗!(2)エラーコード:TMP_FILE_NAI + - アップロード失敗!(2)エラーコード:SAVE_FOLDER_KAKIKOMI_KENNAI + - アップロード失敗!(2)エラーコード:MOVE_UPLOAD_FILE_SIPPAI + - アップロード失敗!(2)エラーコード: S3ERROR + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + - type: object + properties: + error_code: + $ref: "#/components/schemas/UpdateFailed" + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + /users/: + summary: /users/ + get: + tags: + - users + description: 自分以外のユーザー情報を取得できます。 + operationId: users + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/users/index.php + security: + - bearerAuth: [] + parameters: + - userid: + $ref: "#/components/parameters/useridRequired" + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + post: + tags: + - users + description: 自分以外のユーザー情報を取得できます。 + operationId: users + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/users/index.php + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + type: object + properties: + userid: + $ref: "#/components/schemas/UserID" + required: + - userid + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + /users/follow: + summary: /users/follow + get: + tags: + - users + - follow + description: 自分以外のユーザーをフォローできます。 + operationId: users/follow + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/users/follow.php + security: + - bearerAuth: [] + parameters: + - name: userid + $ref: "#/components/parameters/useridRequired" + responses: + 200: + $ref: "#/components/responses/FollowSuccess" + 400: + $ref: "#/components/responses/FollowBadReq" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 500: + $ref: "#/components/responses/FollowInternalServerError" + post: + tags: + - users + - follow + description: 自分以外のユーザーをフォローできます。 + operationId: users/follow + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/users/follow.php + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + type: object + properties: + userid: + $ref: "#/components/schemas/UserID" + required: + - userid + responses: + 200: + $ref: "#/components/responses/FollowSuccess" + 400: + $ref: "#/components/responses/FollowBadReq" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 500: + $ref: "#/components/responses/FollowInternalServerError" + /users/unfollow: + summary: /users/unfollow + get: + tags: + - users + - follow + description: 自分以外のユーザーのフォローを解除できます。 + operationId: users/unfollow + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/users/unfollow.php + security: + - bearerAuth: [] + parameters: + - name: userid + $ref: "#/components/parameters/useridRequired" + responses: + 200: + $ref: "#/components/responses/FollowSuccess" + 400: + $ref: "#/components/responses/FollowBadReq" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 500: + $ref: "#/components/responses/FollowInternalServerError" + post: + tags: + - users + - follow + description: 自分以外のユーザーのフォローを解除できます。 + operationId: users/unfollow + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/users/unfollow.php + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + type: object + properties: + userid: + $ref: "#/components/schemas/UserID" + required: + - userid + responses: + 200: + $ref: "#/components/responses/FollowSuccess" + 400: + $ref: "#/components/responses/FollowBadReq" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 500: + $ref: "#/components/responses/FollowInternalServerError" + /ueuse/: + summary: /ueuse/ + get: + tags: + - ueuse + description: | + トークンのみ指定の場合直近25件のユーズを取得します。 + operationId: ueuse + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/ueuse/index.php + security: + - bearerAuth: [] + parameters: + - page: + $ref: "#/components/parameters/page" + - limit: + $ref: "#/components/parameters/limit" + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + "0": + $ref: "#/components/schemas/ueuse" + "1": + $ref: "#/components/schemas/ueuse" + success: + $ref: "#/components/schemas/Success" + required: + - "0" + - "1" + - success + 400: + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/APIAuthFailed" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 500: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - ueuse_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + post: + tags: + - ueuse + description: | + トークンのみ指定の場合直近25件のユーズを取得します。 + operationId: ueuse + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/ueuse/index.php + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + type: object + properties: + page: + $ref: "#/components/schemas/Page" + limit: + $ref: "#/components/schemas/Limit" + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + "0": + $ref: "#/components/schemas/ueuse" + "1": + $ref: "#/components/schemas/ueuse" + success: + $ref: "#/components/schemas/Success" + required: + - "0" + - "1" + - success + 400: + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/APIAuthFailed" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 500: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - ueuse_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + /ueuse/get: + summary: /ueuse/get + get: + tags: + - ueuse + description: 特定の投稿を一つだけ取得します。(単一の投稿を取得します。) + operationId: ueuse/get + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/ueuse/get.php + security: + - bearerAuth: [] + parameters: + - uniqid: + $ref: "#/components/parameters/uniqidRequired" + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + "0": + $ref: "#/components/schemas/ueuse" + success: + $ref: "#/components/schemas/Success" + required: + - "0" + - success + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - ueuse_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + post: + tags: + - ueuse + description: 特定の投稿を一つだけ取得します。(単一の投稿を取得します。) + operationId: ueuse/get + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/ueuse/get.php + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + type: object + properties: + uniqid: + $ref: "#/components/schemas/UniqID" + required: + - uniqid + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + "0": + $ref: "#/components/schemas/ueuse" + success: + $ref: "#/components/schemas/Success" + required: + - "0" + - success + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - ueuse_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + /ueuse/replies: + summary: /ueuse/replies + get: + tags: + - ueuse + description: | + 特定の投稿とそれにされた返信を取得します。 + 帰ってきたjsonの一番上の投稿がuniqidにて指定したものになります。 + operationId: ueuse/replies + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/ueuse/replies.php + security: + - bearerAuth: [] + parameters: + - uniqid: + $ref: "#/components/parameters/uniqidRequired" + - limit: + $ref: "#/components/parameters/limit" + - page: + $ref: "#/components/parameters/page" + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + "0": + $ref: "#/components/schemas/ueuse" + "1": + $ref: "#/components/schemas/ueuse" + success: + $ref: "#/components/schemas/Success" + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - ueuse_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + post: + tags: + - ueuse + description: | + 特定の投稿とそれにされた返信を取得します。 + 帰ってきたjsonの一番上の投稿がuniqidにて指定したものになります。 + operationId: ueuse/replies + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/ueuse/replies.php + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + type: object + properties: + uniqid: + $ref: "#/components/schemas/UniqID" + limit: + $ref: "#/components/schemas/Limit" + page: + $ref: "#/components/schemas/Page" + required: + - uniqid + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + "0": + $ref: "#/components/schemas/ueuse" + "1": + $ref: "#/components/schemas/ueuse" + success: + $ref: "#/components/schemas/Success" + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - ueuse_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + /ueuse/mentions: + summary: /ueuse/mentions + get: + tags: + - ueuse + description: | + > [!Note] + > v1.6.0以前と以後で仕様が異なっており、v1.6.0以前に行われたメンションは取得できません。 + > 使用方法は同じです。 + + 自分のメンションされた投稿を取得します。 + operationId: ueuse/mentions + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/ueuse/mentions.php + security: + - bearerAuth: [] + parameters: + - limit: + $ref: "#/components/parameters/limit" + - page: + $ref: "#/components/parameters/page" + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + "0": + $ref: "#/components/schemas/ueuse" + "1": + $ref: "#/components/schemas/ueuse" + success: + $ref: "#/components/schemas/Success" + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - ueuse_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + post: + tags: + - ueuse + description: | + > [!Note] + > v1.6.0以前と以後で仕様が異なっており、v1.6.0以前に行われたメンションは取得できません。 + > 使用方法は同じです。 + + 自分のメンションされた投稿を取得します。 + operationId: ueuse/mentions + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/ueuse/mentions.php + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + type: object + properties: + limit: + $ref: "#/components/schemas/Limit" + page: + $ref: "#/components/schemas/Page" + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + "0": + $ref: "#/components/schemas/ueuse" + "1": + $ref: "#/components/schemas/ueuse" + success: + $ref: "#/components/schemas/Success" + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - ueuse_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + /ueuse/search: + summary: /ueuse/search + get: + tags: + - ueuse + description: keywordに入れた言葉をすべての投稿の中から検索してマッチしたものを返します。 + operationId: ueuse/search + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/ueuse/search.php + security: + - bearerAuth: [] + parameters: + - keyword: + name: keyword + in: query + schema: + title: キーワード + type: string + example: Test + required: true + - limit: + $ref: "#/components/parameters/limit" + - page: + $ref: "#/components/parameters/page" + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + "0": + $ref: "#/components/schemas/ueuse" + "1": + $ref: "#/components/schemas/ueuse" + success: + $ref: "#/components/schemas/Success" + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - ueuse_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + post: + tags: + - ueuse + description: keywordに入れた言葉をすべての投稿の中から検索してマッチしたものを返します。 + operationId: ueuse/search + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/ueuse/search.php + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + type: object + properties: + keyword: + title: キーワード + type: string + example: Test + limit: + $ref: "#/components/schemas/Limit" + page: + $ref: "#/components/schemas/Page" + required: + - keyword + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + "0": + $ref: "#/components/schemas/ueuse" + "1": + $ref: "#/components/schemas/ueuse" + success: + $ref: "#/components/schemas/Success" + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - ueuse_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + /ueuse/create: + summary: /ueuse/create + get: + tags: + - ueuse + description: | + このAPIを使用すると新たに投稿をすることができます。 + 引用/リユーズと返信は同時に使用できません。 + operationId: ueuse/create + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/ueuse/create.php + security: + - bearerAuth: [] + parameters: + - text: + name: text + in: query + schema: + title: 本文 + type: string + example: "Text\nText" + required: true + - nsfw: + name: nsfw + in: query + schema: + title: NSFWにするかどうか + type: boolean + enum: + - true + - false + default: false + example: true + - replyid: + name: replyid + in: query + schema: + title: 返信先ユーズ + type: string + example: 1vgsg0v3tzv + - reuseid: + name: reuseid + in: query + schema: + title: 引用/リユーズ先ユーズ + type: string + example: 1vgsg0v3tzv + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + uniqid: + $ref: "#/components/schemas/UniqID" + userid: + $ref: "#/components/schemas/UserID" + required: + - uniqid + - userid + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - this_account_has_been_frozen + - contains_prohibited_url + - could_not_complete + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 413: + description: Content Too Large + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - content_to__characters + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 429: + description: Too Many Requests + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - over_rate_limit + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 500: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - could_not_complete + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + post: + tags: + - ueuse + description: | + このAPIを使用すると新たに投稿をすることができます。 + 引用/リユーズと返信は同時に使用できません。 + operationId: ueuse/create + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/ueuse/create.php + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + type: object + properties: + text: + title: 本文 + type: string + maximum: + example: "Text\nText" + nsfw: + title: NSFWにするかどうか + type: boolean + enum: + - true + - false + default: false + example: true + image1: + title: 画像1 + type: string + format: Base64 Encode Image + example: Base64 Data + image2: + title: 画像2 + type: string + format: Base64 Encode Image + example: Base64 Data + image3: + title: 画像3 + type: string + format: Base64 Encode Image + example: Base64 Data + image4: + title: 画像4 + type: string + format: Base64 Encode Image + example: Base64 Data + replyid: + title: 返信先ユーズ + type: string + example: 1vgsg0v3tzv + reuseid: + title: 引用/リユーズ先ユーズ + type: string + example: 1vgsg0v3tzv + required: + - text + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + uniqid: + $ref: "#/components/schemas/UniqID" + userid: + $ref: "#/components/schemas/UserID" + required: + - uniqid + - userid + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - this_account_has_been_frozen + - contains_prohibited_url + - upload_error + - could_not_complete + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 413: + description: Content Too Large + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - content_to__characters + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 429: + description: Too Many Requests + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - over_rate_limit + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 500: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - upload_error + - could_not_complete + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + /ueuse/delete: + summary: /ueuse/delete + get: + tags: + - ueuse + description: 投稿の削除が可能です。 + operationId: ueuse/delete + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/ueuse/delete.php + security: + - bearerAuth: [] + parameters: + - uniqid: + $ref: "#/components/parameters/uniqidRequest" + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + uniqid: + $ref: "#/components/schemas/UniqID" + userid: + $ref: "#/components/schemas/UserID" + success: + $ref: "#/components/schemas/Success" + required: + - uniqid + - userid + - success + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 500: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + uniqid: + $ref: "#/components/schemas/UniqID" + userid: + $ref: "#/components/schemas/UserID" + success: + $ref: "#/components/schemas/Failed" + required: + - uniqid + - userid + - success + post: + tags: + - ueuse + description: 投稿の削除が可能です。 + operationId: ueuse/delete + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/ueuse/delete.php + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + type: object + properties: + uniqid: + $ref: "#/components/schemas/UniqID" + required: + - uniqid + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + uniqid: + $ref: "#/components/schemas/UniqID" + userid: + $ref: "#/components/schemas/UserID" + success: + $ref: "#/components/schemas/Success" + required: + - uniqid + - userid + - success + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 500: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + uniqid: + $ref: "#/components/schemas/UniqID" + userid: + $ref: "#/components/schemas/UserID" + success: + $ref: "#/components/schemas/Failed" + required: + - uniqid + - userid + - success + /ueuse/bookmark/: + summary: /ueuse/bookmark/ + get: + tags: + - ueuse + description: ログインしているユーザーのブックマークを取得できます。 + operationId: ueuse/bookmark + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/ueuse/bookmark/index.php + security: + - bearerAuth: [] + parameters: + - limit: + $ref: "#/components/parameters/limit" + - page: + $ref: "#/components/parameters/page" + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + "0": + $ref: "#/components/schemas/ueuse" + "1": + $ref: "#/components/schemas/ueuse" + success: + $ref: "#/components/schemas/Success" + required: + - success + 400: + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/APIAuthFailed" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 500: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - ueuse_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + post: + tags: + - ueuse + description: ログインしているユーザーのブックマークを取得できます。 + operationId: ueuse/bookmark + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/ueuse/bookmark/index.php + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + type: object + properties: + limit: + $ref: "#/components/schemas/Limit" + page: + $ref: "#/components/schemas/Page" + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + "0": + $ref: "#/components/schemas/ueuse" + "1": + $ref: "#/components/schemas/ueuse" + success: + $ref: "#/components/schemas/Success" + required: + - success + 400: + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/APIAuthFailed" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 500: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - ueuse_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + /favorite/change: + summary: /favorite/change + get: + tags: + - favorite + description: いいねを追加・削除できます。 + operationId: favorite/change + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/favorite/change.php + security: + - bearerAuth: [] + parameters: + - uniqid: + $ref: "#/components/parameters/uniqidRequired" + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + favorite_list: + title: いいねしたユーザー + type: string + description: 更新後が表示され、`,`区切りの`string`型です。 + example: ",admin" + success: + $ref: "#/components/schemas/Success" + required: + - favorite_list + - success + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + post: + tags: + - favorite + description: いいねを追加・削除できます。 + operationId: favorite/change + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/favorite/change.php + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + type: object + properties: + uniqid: + $ref: "#/components/schemas/UniqID" + required: + - uniqid + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + favorite_list: + title: いいねしたユーザー + type: string + description: 更新後が表示され、`,`区切りの`string`型です。 + example: ",admin" + success: + $ref: "#/components/schemas/Success" + required: + - favorite_list + - success + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + /favorite/get: + summary: /favorite/get + get: + tags: + - favorite + description: いいねの情報を取得できます。 + operationId: favorite/get + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/favorite/get.php + security: + - bearerAuth: [] + parameters: + - uniqid: + $ref: "#/components/parameters/uniqidRequired" + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + favorite_list: + title: いいねしたユーザー + type: string + description: "`,`区切りの`string`型です。" + example: ",admin" + success: + $ref: "#/components/schemas/Success" + required: + - favorite_list + - success + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + post: + tags: + - favorite + description: いいねの情報を取得できます。 + operationId: favorite/get + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/favorite/get.php + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + type: object + properties: + uniqid: + $ref: "#/components/schemas/UniqID" + required: + - uniqid + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + favorite_list: + title: いいねしたユーザー + type: string + description: "`,`区切りの`string`型です。" + example: ",admin" + success: + $ref: "#/components/schemas/Success" + required: + - favorite_list + - success + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/APIAuthFailed" + - $ref: "#/components/schemas/InputNotFound" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + /token/get: + summary: /token/get + get: + tags: + - token + description: APIアクセストークンを1回だけ取得できます。 + operationId: token/get + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/token/get.php + security: + - {} + parameters: + - session: + name: session + in: query + schema: + title: セッションID + type: string + example: eb774fe1-f826-9d2c-3296-de1db548b290 + format: uuid + required: true + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + success: + $ref: "#/components/schemas/Success" + username: + title: ユーザー名 + type: string + example: あどみん + userid: + $ref: "#/components/schemas/UserID" + token: + title: APIトークン + type: string + example: LLOC2lHPVoPqCqKWmvbdcdo9DmAHyySpBwqxseohtYilob85A8g9Ebd9m9UbERw9 + required: + - success + - username + - userid + - token + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/InputNotFound" + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - critical_error_userdata_not_found + - session_invalid + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + post: + tags: + - token + description: APIアクセストークンを1回だけ取得できます。 + operationId: token/get + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/token/get.php + security: + - {} + requestBody: + content: + application/json: + schema: + type: object + properties: + session: + title: セッションID + type: string + example: eb774fe1-f826-9d2c-3296-de1db548b290 + required: + - session + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + success: + $ref: "#/components/schemas/Success" + username: + title: ユーザー名 + type: string + example: あどみん + userid: + $ref: "#/components/schemas/UserID" + token: + title: APIトークン + type: string + example: LLOC2lHPVoPqCqKWmvbdcdo9DmAHyySpBwqxseohtYilob85A8g9Ebd9m9UbERw9 + required: + - success + - username + - userid + - token + 400: + description: Bad Request + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/InputNotFound" + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - critical_error_userdata_not_found + - session_invalid + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + /token/inquiry: + summary: /token/inquiry + get: + tags: + - token + description: APIアクセストークンの情報を照会できます。 + operationId: token/inquiry + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/token/inquiry.php + security: + - bearerAuth: [] + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + allow_scopes: + title: 付与された権限 + type: array + items: + title: 権限 + type: string + enum: + - read:me + - write:me + - read:users + - read:ueuse + - write:ueuse + - write:follow + - write:favorite + - read:notifications + - write:notifications + - write:bookmark + - read:bookmark + username: + title: ユーザー名 + type: string + example: あどみん + userid: + $ref: "#/components/schemas/UserID" + success: + $ref: "#/components/schemas/Success" + required: + - allow_scopes + - username + - userid + - success + 400: + description: Bad Request + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - this_account_has_been_frozen + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 500: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - could_not_complete + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + post: + tags: + - token + description: APIアクセストークンの情報を照会できます。 + operationId: token/inquiry + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/token/inquiry.php + security: + - bearerAuth: [] + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + allow_scopes: + title: 付与されている権限 + type: array + items: + title: 権限 + type: string + enum: + - read:me + - write:me + - read:users + - read:ueuse + - write:ueuse + - write:follow + - write:favorite + - read:notifications + - write:notifications + - write:bookmark + - read:bookmark + username: + title: ユーザー名 + type: string + example: あどみん + userid: + $ref: "#/components/schemas/UserID" + success: + $ref: "#/components/schemas/Success" + required: + - allow_scopes + - username + - userid + - success + 400: + description: Bad Request + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - this_account_has_been_frozen + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + 500: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - could_not_complete + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + /auth: + summary: /auth + get: + tags: + - token + - auth + description: | + ユーザー認可によるAPIトークン取得方法の確認ページです。 + operationId: auth + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/auth.php + parameters: + - session: + name: session + description: | + UUIDなど、一意さの担保される方法でセッションIDを発行してください! + > [!CAUTION] + > 発行したセッションIDは絶対に使い回さないでください! + > また、絶対に第三者に公開しないでください! + in: query + schema: + title: セッションID + type: string + example: eb774fe1-f826-9d2c-3296-de1db548b290 + required: true + - client: + name: client + in: query + schema: + title: アプリケーション名 + type: string + example: uwuzuクライアント + required: true + - scope: + title: 要求する権限 + name: scope + description: | + `,`区切りで以下の表の権限を参考にしてください。 + > [!CAUTION] + > 権限を0にすることはできません。 + > 1つ以上の権限を含めてください。 + + | 権限名 | 権限の内容 | + | - | - | + | read:me | 重要な情報以外の自分のアカウントの情報を見る | + | write:me | 重要な情報以外の自分のアカウントの情報を変更する | + | read:ueuse | ユーズを見る | + | read:users | 自分以外のユーザーを見る | + | write:ueuse | ユーズの作成・削除をする | + | write:follow | フォロー・フォロー解除をする | + | write:favorite | いいねをする・解除をする | + | read:notifications | 通知を見る | + | write:notifications | 通知を既読にする | + | write:bookmark | ブックマークにユーズを追加・削除する | + | read:bookmark | ブックマークを見る | + in: query + schema: + type: string + example: read:account,read:ueuse + required: true + - icon: + name: icon + in: query + schema: + title: アプリケーションアイコン画像 + type: string + format: URL + example: https://example.com/application/icon.png + - about: + name: about + in: query + schema: + title: アプリケーションの説明 + type: string + example: uwuzuのクライアントです + - callback: + name: callback + in: query + schema: + title: コールバック先URL + type: string + example: https://example.com/application/callback + +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + pathItems: + ServerInfoAPI: + tags: + - serverinfo-api + description: サーバー情報を取得できます。 + operationId: serverinfo-api + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/serverinfo-api.php + security: + - {} + responses: + 200: + description: OK + content: + application/json: + schema: + type: object + properties: + server_info: + $ref: "#/components/schemas/ServerInfo" + software: + title: サーバーソフトウェア + type: object + properties: + name: + title: 名称 + type: string + example: uwuzu + version: + title: バージョン + type: string + example: 1.6.5 + pattern: \d+\.\d+\.\d+ + repository: + title: リポジトリ + type: string + example: https://github.com/Daichimarukana/uwuzu + required: + - name + - version + - repository + server_notice: + $ref: "#/components/schemas/ServerNotice" + required: + - server_info + - software + - server_notice + MeAPI: + tags: + - me + description: | + 自分のユーザー情報を取得できます。 + メールアドレスなど一部の情報は取得できません。 + operationId: me + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/me/index.php + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + 400: + $ref: "#/components/responses/APIAuthFailed" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 500: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - critical_error_userdata_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + NotificationRead: + tags: + - me + - notification + description: 自分宛の通知を一括既読できます。 + operationId: me/notification/read + externalDocs: + description: ソースコード + url: https://github.com/Daichimarukana/uwuzu/blob/main/api/me/notification/read.php + responses: + 200: + $ref: "#/components/responses/SuccessOnly" + 400: + $ref: "#/components/responses/APIAuthFailed" + 401: + $ref: "#/components/responses/Unauthorized" + 403: + $ref: "#/components/responses/Forbidden" + 500: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + error_code: + $ref: "#/components/schemas/UpdateFailed" + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + responses: + SuccessOnly: + description: OK + content: + application/json: + schema: + type: object + properties: + success: + $ref: "#/components/schemas/Success" + required: + - success + InputNotFound: + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/InputNotFound" + Unauthorized: + description: Unauthorized + content: + application/json: + schema: + type: object + properties: + error_code: + $ref: "#/components/schemas/InputNotFound" + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + Forbidden: + description: Forbidden + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - token_invalid + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + APIAuthFailed: + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/APIAuthFailed" + UserDataNotFound: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - critical_error_userdata_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + NotificationAPI: + description: OK + content: + application/json: + schema: + type: object + properties: + "0": + $ref: "#/components/schemas/Notification" + success: + $ref: "#/components/schemas/Success" + required: + - "0" + - success + SettingsCountOver: + description: Content Too Large + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - ユーザーネームは50文字以内で入力してください。(USERNAME_OVER_MAX_COUNT) + - プロフィールは1024文字以内で入力してください。(INPUT_OVER_MAX_COUNT) + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + FollowSuccess: + description: OK + content: + application/json: + schema: + type: object + properties: + userid: + $ref: "#/components/schemas/UserID" + success: + $ref: "#/components/schemas/Success" + required: + - userid + - success + FollowBadReq: + description: Bad Request + content: + application/json: + schema: + oneOf: + - type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - you_cant_it_to_yourself + - input_not_found + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + - $ref: "#/components/schemas/APIAuthFailed" + FollowInternalServerError: + description: Internal Server Error + content: + application/json: + schema: + type: object + properties: + error_code: + title: エラーコード + type: string + enum: + - critical_error_userdata_not_found + - could_not_complete + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + schemas: + InputNotFound: + title: パラメータ不足 + type: object + properties: + error_code: + $ref: "#/components/schemas/InputNotFound" + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + APIAuthFailed: + title: API認証失敗 + type: object + properties: + error_code: + type: string + description: エラーコード + enum: + - this_account_has_been_frozen + - token_invalid + - not_allow_scope + success: + $ref: "#/components/schemas/Failed" + required: + - error_code + - success + Notification: + title: 通知 + type: object + properties: + from: + type: object + description: 通知元ユーザー + properties: + username: + type: string + description: ユーザー名 + example: tester + userid: + $ref: "#/components/schemas/UserID" + user_icon: + type: string + description: アイコン画像 + format: URL + example: /usericons/XXXXXXXXXX-XXXXX.png + user_header: + type: string + description: ヘッダー画像 + format: URL + example: /usericons/XXXXXXXXXX-XXXXX.png + required: + - username + - userid + - user_icon + - user_header + category: + type: string + description: カテゴリ + enum: + - system + - favorite + - reply + - reuse + - ueuse + - follow + - mention + - other + - login + title: + type: string + description: タイトル + enum: + - testerさんが返信しました! + - testerさんがメンションしました! + - testerさんがリユーズしました! + - testerさんがいいねしました! + - testerさんが返信しました! + - testerさんにフォローされました!🎉 + - 🚪ログイン通知🚪 + text: + type: string + description: 本文 + example: test1 + datetime: + type: string + description: 通知時刻 + format: date + example: 2025-08-02 18:12:29 + is_checked: + type: boolean + description: 既読かどうか + enum: + - true + - false + required: + - from + - category + - title + - text + - datetime + - is_checked + ServerNotice: + title: お知らせ + type: array + items: + type: + - object + - string + properties: + title: + title: タイトル + type: string + example: お知らせ! + note: + title: 本文 + type: string + example: サービスを開始しました! + editor: + title: 配信者 + type: string + example: admin + datetime: + title: 配信時刻 + type: string + format: date + example: 2024-03-29 14:35:06 + required: + - title + - note + - editor + - datetime + required: + - server_info + - software + - server_notice + ServerInfo: + title: サーバー概要 + type: object + properties: + server_name: + title: 名称 + type: string + example: 新規さば + server_icon: + title: アイコン画像 + type: string + format: URL + example: /img/uwuzu_icon.png + server_description: + title: 説明文 + type: string + example: ようこそ新規さばへ!etc... + adminstor: + title: 運営者 + type: object + properties: + name: + title: 名前 + type: string + example: あどみん + email: + title: メールアドレス + type: string + example: admin@uwuzu.example.com + required: + - name + - email + terms_url: + title: 利用規約 + type: string + format: URL + example: /rule/terms + privacy_policy_url: + title: プライバシーポリシー + type: string + format: URL + example: /rule/privacypolicy + max_ueuse_length: + title: 文字数制限 + type: number + example: + invitation_code: + title: 招待制かどうか + type: boolean + enum: + - true + - false + account_migration: + title: アカウント移行が有効かどうか + type: boolean + enum: + - true + - false + usage: + title: カウント数 + type: object + properties: + users: + title: ユーザー数 + type: number + example: 120 + ueuse: + title: ユーズ数 + type: number + example: 5000 + required: + - users + - ueuse + required: + - server_name + - server_icon + - server_description + - adminstor + - terms_url + - privacy_policy_url + - max_ueuse_length + - invitation_code + - account_migration + - usage + User: + title: ユーザー + type: object + properties: + username: + title: ユーザー名 + type: string + maximum: 50 + example: あどみん + userid: + $ref: "#/components/schemas/UserID" + profile: + title: プロフィール + type: string + maximum: 1024 + example: あどみんです! + user_icon: + title: アイコン画像 + type: string + format: URL + example: /usericons/XXXXXXXXXX-XXXXX.png + user_header: + title: ヘッダー画像 + type: string + format: URL + example: /usericons/XXXXXXXXXX-XXXXX.png + registered_date: + title: 登録時刻 + type: string + example: 2024-03-09 02:19:04 + format: date + followee: + title: フォロー + type: array + items: + $ref: "#/components/schemas/UserID" + followee_cnt: + title: フォロー数 + type: number + example: 1 + follower: + title: フォロワー + type: array + items: + $ref: "#/components/schemas/UserID" + follower_cnt: + title: フォロワー数 + type: number + example: 1 + ueuse_cnt: + title: ユーズ数 + type: number + example: 38 + isBot: + title: BOTかどうか + type: boolean + description: + enum: + - true + - false + isAdmin: + title: 管理者かどうか + type: boolean + enum: + - true + - false + role: + title: ロール + type: array + items: + title: 詳細 + type: object + properties: + name: + title: 名称 + type: string + example: ゆーざー + color: + title: 色(16進数) + type: string + example: CCCCCC + effect: + title: エフェクト + type: string + enum: + - none + - shine + - rainbow + id: + title: ロールID + type: string + example: user + required: + - name + - color + - effect + - id + language: + title: 言語 + type: string + enum: + - ja-JP + required: + - username + - userid + - profile + - user_icon + - user_header + - registered_date + - followee + - followee_cnt + - follower + - follower_cnt + - ueuse_cnt + - isBot + - isAdmin + - role + - language + ueuse: + title: ユーズ + type: object + properties: + uniqid: + $ref: "#/components/schemas/UniqID" + replyid: + title: 返信先ユーズ(ユニークID) + type: string + description: 返信でない場合は`""`が返されます + example: 1vgsg0v3tzv + reuseid: + title: 引用/リユーズ元ユーズ(ユニークID) + type: string + description: 引用/リユーズでない場合は`""`が返されます + example: 1vgsg0v3tzv + text: + title: 本文 + type: string + maximum: + example: "Test\nTest" + account: + title: 投稿アカウント + type: object + properties: + username: + title: ユーザー名 + type: string + maximum: 50 + example: あどみん + userid: + $ref: "#/components/schemas/UserID" + user_icon: + title: アイコン画像 + type: string + format: URL + example: /usericons/XXXXXXXXXX-XXXXX.png + user_header: + title: ヘッダー画像 + type: string + format: URL + example: /userheads/XXXXXXXXXX-XXXXX.png + is_bot: + title: BOTかどうか + type: boolean + enum: + - true + - false + required: + - username + - userid + - user_icon + - user_header + - is_bot + photo1: + title: 画像1 + type: string + description: 添付されていない場合は`""`が返されます + format: URL + example: /ueuseimages/XXXXXXXXXX-XXXXX.png + photo2: + title: 画像2 + type: string + description: 添付されていない場合は`""`が返されます + format: URL + example: /ueuseimages/XXXXXXXXXX-XXXXX.png + photo3: + title: 画像3 + type: string + description: 添付されていない場合は`""`が返されます + format: URL + example: /ueuseimages/XXXXXXXXXX-XXXXX.png + photo4: + title: 画像4 + type: string + description: 添付されていない場合は`""`が返されます + format: URL + example: /ueuseimages/XXXXXXXXXX-XXXXX.png + video1: + title: 動画 + type: string + description: 添付されていない場合は`""`が返されます + format: URL + example: /ueusevideos/XXXXXXXXXX-XXXXX.mp4 + favorite: + title: いいね + type: array + items: + $ref: "#/components/schemas/UserID" + favorite_cnt: + title: いいね数 + type: number + example: 1 + reply_cnt: + title: 返信数 + type: number + example: 1 + reuse_cnt: + title: 引用/リユーズ数 + type: number + example: 1 + datetime: + title: 投稿時刻 + type: string + example: 2024-04-19 20:33:13 + format: date + abi: + title: 追記 + type: string + description: 追記がない場合は`""`が返されます + example: "" + abidatetime: + title: 追記時刻 + type: string + description: 追記がない場合は`0000-00-00 00:00:00`が返されます + example: 2024-04-19 20:33:13 + format: date + nsfw: + title: NSFWかどうか + type: boolean + enum: + - true + - false + required: + - uniqid + - replyid + - reuseid + - text + - account + - photo1 + - photo2 + - photo3 + - photo4 + - video1 + - favorite + - favorite_cnt + - reply_cnt + - reuse_cnt + - datetime + - abi + - abidatetime + - nsfw + Failed: + title: 成功かどうか + type: boolean + enum: + - false + Page: + title: ページ数 + type: number + default: 1 + example: 5 + Limit: + title: 制限数 + type: number + maximum: 100 + default: 25 + example: 60 + UpdateFailed: + title: エラーコード + type: string + enum: + - update_failed + UserID: + title: ユーザーID + type: string + maximum: 20 + example: admin + Success: + title: 成功かどうか + type: boolean + enum: + - true + UniqID: + title: ユニークID + type: string + example: 1vgsg0v3tzv + parameters: + page: + name: page + in: query + schema: + title: ページ数 + type: number + default: 1 + example: 5 + limit: + name: limit + in: query + schema: + title: 制限数 + type: number + maximum: 100 + default: 25 + example: 60 + pageRequired: + name: page + in: query + schema: + title: ページ数 + type: number + default: 1 + example: 5 + required: true + limitRequired: + name: limit + in: query + schema: + title: 制限数 + type: number + maximum: 100 + default: 25 + example: 60 + required: true + useridRequired: + name: userid + in: query + schema: + title: ユーザーID + type: string + maximum: 20 + example: admin + required: true + uniqidRequired: + name: uniqid + in: query + schema: + title: ユニークID + type: string + example: 1vgsg0v3tzv + required: true diff --git a/api-docs/uwuzu.png b/api-docs/uwuzu.png new file mode 100644 index 0000000000000000000000000000000000000000..89794d5eb95b9c19539e6518793435a58e534855 GIT binary patch literal 9076 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 literal 0 HcmV?d00001 diff --git a/api/.htaccess b/api/.htaccess index 68ad3cd..bc137cc 100644 --- a/api/.htaccess +++ b/api/.htaccess @@ -4,6 +4,7 @@ ErrorDocument 401 "" ErrorDocument 403 "" ErrorDocument 404 /errorpage/notfound.json ErrorDocument 413 "" +ErrorDocument 429 "" ErrorDocument 500 "" ErrorDocument 502 "" ErrorDocument 503 /errorpage/serverstop.json