diff --git a/src/web/api/TGApi.ts b/src/web/api/TGApi.ts index 6d1ea7f3..176814f6 100644 --- a/src/web/api/TGApi.ts +++ b/src/web/api/TGApi.ts @@ -11,8 +11,8 @@ import { Hk4eAnnoListApi, Hk4eAnnoContentApi, Hk4eAnnoQuery } from "./Hk4e"; import { PassportTokenApi, PassportCookieTokenApi, PassportVerifyApi } from "./Passport"; import { TakumiTokensApi, TakumiRecordCardApi, - TakumiRecordGenshinCharacterApi, TakumiRecordGenshinIndexApi, - TakumiRecordGenshinSpiralAbyssApi, TakumiSTokenBindingRolesApi, + TakumiRecordCharactersApi, TakumiRecordIndexApi, + TakumiRecordAbyssApi, TakumiSTokenBindingRolesApi, TakumiCookieBindingRolesApi, } from "./Takumi"; @@ -32,14 +32,14 @@ const TGApi = { byCookie: { getUserInfo: BBSUserInfoApi, // 获取用户信息 getAccounts: TakumiCookieBindingRolesApi, // 获取绑定角色 - getCharacter: TakumiRecordGenshinCharacterApi, // 获取角色信息 + getCharacter: TakumiRecordCharactersApi, // 获取角色信息 }, bySToken: { getAccounts: TakumiSTokenBindingRolesApi, // 获取绑定角色 }, getUserCard: TakumiRecordCardApi, // 获取用户卡片 - getUserBase: TakumiRecordGenshinIndexApi, // 获取用户基本信息 - getAbyss: TakumiRecordGenshinSpiralAbyssApi, // 获取深境螺旋信息 + getUserBase: TakumiRecordIndexApi, // 获取用户基本信息 + getAbyss: TakumiRecordAbyssApi, // 获取深境螺旋信息 }, }; diff --git a/src/web/api/Takumi.ts b/src/web/api/Takumi.ts index 1eec6dcd..aca231e3 100644 --- a/src/web/api/Takumi.ts +++ b/src/web/api/Takumi.ts @@ -14,8 +14,8 @@ const TakumiAuthApi = `${TakumiApi}auth/api/`; // 认证 API export const TakumiTokensApi = `${TakumiAuthApi}getMultiTokenByLoginTicket`; // 登录票据 API export const TakumiActionTicketsApi = `${TakumiAuthApi}getActionTicketByStoken`; // 行为票据 API export const TakumiRecordCardApi = `${TakumiRecordApi}game_record/app/card/wapi/getGameRecordCard`; // 游戏记录卡片 API -export const TakumiRecordGenshinIndexApi = `${TakumiRecordGenshinApi}index`; // 原神游戏记录索引 API -export const TakumiRecordGenshinCharacterApi = `${TakumiRecordGenshinApi}character`; // 原神游戏记录角色 API -export const TakumiRecordGenshinSpiralAbyssApi = `${TakumiRecordGenshinApi}spiralAbyss`; // 原神游戏记录深境螺旋 API +export const TakumiRecordIndexApi = `${TakumiRecordGenshinApi}index`; // 原神游戏记录索引 API +export const TakumiRecordCharactersApi = `${TakumiRecordGenshinApi}character`; // 原神游戏记录角色 API +export const TakumiRecordAbyssApi = `${TakumiRecordGenshinApi}spiralAbyss`; // 原神游戏记录深境螺旋 API export const TakumiSTokenBindingRolesApi = `${TakumiBindingApi}getUserGameRolesBySToken`; // 获取绑定角色 API-根据 stoken export const TakumiCookieBindingRolesApi = `${TakumiBindingApi}getUserGameRolesByCookie`; // 获取绑定角色 API-根据 Cookie diff --git a/src/web/constant/TGConstant.ts b/src/web/constant/TGConstant.ts index 7a633945..1602074a 100644 --- a/src/web/constant/TGConstant.ts +++ b/src/web/constant/TGConstant.ts @@ -5,7 +5,7 @@ * @since Alpha v0.2.0 */ -import { BBS_VERSION, BBS_HEADER_AGENT, BBS_REFERER } from "./bbs"; +import { BBS_VERSION, BBS_HEADER_AGENT } from "./bbs"; import SALT from "./salt"; import SERVER from "./server"; import { GAME_BIZ } from "./utils"; @@ -14,7 +14,6 @@ const TGConstant = { BBS: { VERSION: BBS_VERSION, USER_AGENT: BBS_HEADER_AGENT, - REFERER: BBS_REFERER, }, Salt: SALT, Server: SERVER, diff --git a/src/web/constant/bbs.ts b/src/web/constant/bbs.ts index 065651c7..a80217ee 100644 --- a/src/web/constant/bbs.ts +++ b/src/web/constant/bbs.ts @@ -5,6 +5,5 @@ * @since Alpha v0.2.0 */ -export const BBS_VERSION = "2.49.1"; -export const BBS_HEADER_AGENT = `Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) miHoYoBBS/${BBS_VERSION}`; -export const BBS_REFERER = "https://webstatic.mihoyo.com"; +export const BBS_VERSION = "2.50.1"; +export const BBS_HEADER_AGENT = `Mozilla/5.0 (Windows NT 10.0; Win64; x64) miHoYoBBS/${BBS_VERSION}`; diff --git a/src/web/request/TGRequest.ts b/src/web/request/TGRequest.ts index 374b7cc6..39fb34e1 100644 --- a/src/web/request/TGRequest.ts +++ b/src/web/request/TGRequest.ts @@ -5,6 +5,7 @@ * @since Alpha v0.2.0 */ +import { getAbyss } from "./getAbyss"; import { getAnnoList, getAnnoContent } from "./getAnno"; import { getCookieTokenBySToken } from "./getCookieToken"; // import * from "./getEnkaData.ts"; @@ -29,6 +30,7 @@ const TGRequest = { getTokens: getTokensByLoginTicket, }, byCookie: { + getAbyss, getAccounts: getGameAccountsByCookie, getUserInfo: getUserInfoByCookie, }, diff --git a/src/web/request/getAbyss.ts b/src/web/request/getAbyss.ts new file mode 100644 index 00000000..57d2a7a5 --- /dev/null +++ b/src/web/request/getAbyss.ts @@ -0,0 +1,37 @@ +/** + * @file web request getAbyss.ts + * @description 获取深渊信息 + * @author BTMuli + * @since Alpha v0.2.0 + */ + +// tauri +import { http } from "@tauri-apps/api"; +// api +import TGApi from "../api/TGApi"; +// utils +import { getServerByUid } from "../utils/tools"; +import { getRequestHeader } from "../utils/getRequestHeader"; + +/** + * @description 获取深渊信息 + * @since Alpha v0.2.0 + * @param {Record} cookie cookie + * @param {string} schedule_type 0: 本期, 1: 上期 + * @param {BTMuli.User.Game.Account} account 游戏账号 + * @returns {Promise} + */ +export async function getAbyss (cookie: Record, schedule_type: string, account: BTMuli.User.Game.Account): Promise { + const url = TGApi.GameData.getAbyss; + const role_id = account.game_uid; + const params = { role_id, schedule_type, server: getServerByUid(role_id) }; + const header = getRequestHeader(cookie, "GET", params, "common"); + return await http.fetch(url, { + method: "GET", + headers: header, + query: params, + }).then(res => { + if (res.data.retcode !== 0) return res.data; + return res.data.data as unknown; + }); +} diff --git a/src/web/utils/getRequestHeader.ts b/src/web/utils/getRequestHeader.ts index 12a70cbd..e6cbcd66 100644 --- a/src/web/utils/getRequestHeader.ts +++ b/src/web/utils/getRequestHeader.ts @@ -97,7 +97,8 @@ export function getRequestHeader (cookie: Record, method: string "User-Agent": TGConstant.BBS.USER_AGENT, "x-rpc-app_version": TGConstant.BBS.VERSION, "x-rpc-client_type": "5", - Referer: TGConstant.BBS.REFERER, + "x-requested-with": "com.mihoyo.hyperion", + Referer: "https://webstatic.mihoyo.com", DS: ds, Cookie: transCookie(cookie), }; @@ -117,7 +118,8 @@ export function getRequestSignHeader (cookie: Record, method: st "User-Agent": TGConstant.BBS.USER_AGENT, "x-rpc-app_version": TGConstant.BBS.VERSION, "x-rpc-client_type": "5", - Referer: TGConstant.BBS.REFERER, + "x-requested-with": "com.mihoyo.hyperion", + Referer: "https://webstatic.mihoyo.com", DS: getDS(method, transParams(data), saltType, true), Cookie: transCookie(cookie), }; diff --git a/src/web/utils/tools.ts b/src/web/utils/tools.ts index 6670e696..e891ce2b 100644 --- a/src/web/utils/tools.ts +++ b/src/web/utils/tools.ts @@ -29,21 +29,21 @@ export function decodeRegExp (data: string): string { /** * @description 将 cookie 对象转换为字符串 - * @since Alpha v0.2.0 + * @since Alpha v0.1.5 * @param {Record} cookie cookie * @returns {string} 转换后的 cookie */ export function transCookie (cookie: Record) { let res = ""; - for (const [key, value] of Object.entries(cookie)) { - res += `${key}=${value};`; + for (const key of Object.keys(cookie).sort()) { + res += `${key}=${cookie[key]};`; } return res; } /** * @description ds 算法需要数据转换后的字符串是按照字典序排序的 - * @since Alpha v0.2.0 + * @since Alpha v0.1.5 * @param {Record} obj object * @returns {string} query string */ @@ -51,7 +51,7 @@ export function transParams (obj: Record): string { let res = ""; const keys = Object.keys(obj).sort(); for (const key of keys) { - res += `${key}=${obj[key]}&`; + res += `${key}=${obj[key].toString()}&`; } return res.slice(0, -1); }