Skip to content

Commit

Permalink
🤔 add(sth): 加了一些 api,请求还是跑不通
Browse files Browse the repository at this point in the history
  • Loading branch information
BTMuli committed May 5, 2023
1 parent bcf41bb commit d959ab4
Show file tree
Hide file tree
Showing 11 changed files with 118 additions and 46 deletions.
3 changes: 2 additions & 1 deletion src/core/api/TGApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import { ENKA_API } from "./ENKA";
import { Hk4eAnnoListApi, Hk4eAnnoContentApi, Hk4eAnnoQuery } from "./Hk4e";
import { PassportTokenApi, PassportCookieTokenApi, PassportVetifyApi } from "./Passport";
import { TakumiTokensApi, TakumiRecordCardApi, TakumiRecordGenshinCharacterApi, TakumiRecordGenshinIndexApi, TakumiRecordGenshinSpiralAbyssApi } from "./Takumi";
import { TakumiTokensApi, TakumiRecordCardApi, TakumiRecordGenshinCharacterApi, TakumiRecordGenshinIndexApi, TakumiRecordGenshinSpiralAbyssApi, TakumiBingdingRolesApi } from "./Takumi";

// 应用 API
const TGApi = {
Expand All @@ -26,6 +26,7 @@ const TGApi = {
getUserCard: TakumiRecordCardApi, // 获取用户卡片
getUserBase: TakumiRecordGenshinIndexApi, // 获取用户基本信息
getCharacter: TakumiRecordGenshinCharacterApi, // 获取角色信息
getGameRoles: TakumiBingdingRolesApi, // 获取绑定角色
getAbyss: TakumiRecordGenshinSpiralAbyssApi, // 获取深境螺旋信息
},
};
Expand Down
4 changes: 3 additions & 1 deletion src/core/api/Takumi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
*/

const TakumiApi = "https://api-takumi.mihoyo.com/"; // 基础 API
const TakumiRecordApi = "https://api-takumi-record.mihoyo.com"; // 游戏记录 API
const TakumiRecordApi = "https://api-takumi-record.mihoyo.com/"; // 游戏记录 API
const TakumiBindingApi = `${TakumiApi}binding/api/`; // 绑定 API
const TakumiRecordGenshinApi = `${TakumiRecordApi}game_record/app/genshin/api/`; // 原神游戏记录 API
const TaukumiAuthApi = `${TakumiApi}auth/api/`; // 认证 API

Expand All @@ -16,3 +17,4 @@ export const TakumiRecordCardApi = `${TakumiRecordApi}game_record/app/card/wapi/
export const TakumiRecordGenshinIndexApi = `${TakumiRecordGenshinApi}index`; // 原神游戏记录索引 API
export const TakumiRecordGenshinCharacterApi = `${TakumiRecordGenshinApi}character`; // 原神游戏记录角色 API
export const TakumiRecordGenshinSpiralAbyssApi = `${TakumiRecordGenshinApi}spiralAbyss`; // 原神游戏记录深境螺旋 API
export const TakumiBingdingRolesApi = `${TakumiBindingApi}getUserGameRolesByStoken`; // 获取绑定角色 API
4 changes: 2 additions & 2 deletions src/core/constant/bbs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +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 16_0_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) miHoYoBBS/${BBS_VERSION}`;
export const BBS_VERSION = "2.11.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}`;
3 changes: 2 additions & 1 deletion src/core/request/TGRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import { getAnnoList, getAnnoContent } from "./getAnno";
import { getTokensByLoginTicket, getLtokenByStoken, getCookieTokenByStoken, vetifyStoken } from "./getTokens";
import { getGameCard } from "./getGameData";
import { getGameCard, getGameRoles } from "./getGameData";

const TGRequest = {
Anno: {
Expand All @@ -20,6 +20,7 @@ const TGRequest = {
getCookieToken: getCookieTokenByStoken,
vetifyStoken,
getGameCard,
getGameRoles,
},
};

Expand Down
45 changes: 37 additions & 8 deletions src/core/request/getGameData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,53 @@
import { http } from "@tauri-apps/api";
// utils
import TGApi from "../api/TGApi";
import { getDS } from "../utils/getDS";
import { getRequestHeader } from "../utils/getRequestHeader";
import TGUtils from "../utils/TGUtils";

/**
* @description 获取用户游戏数据
* @since Alpha v0.2.0
* @param {BTMuli.User.Base.Cookie} cookie 用户的 Cookie
* @returns {Promise<unknown>} 用户基本信息
*/
export async function getGameCard (cookie: BTMuli.User.Base.Cookie): Promise<unknown> {
const url = TGApi.GameData.getUserCard;
const header = {
...getRequestHeader(cookie),
cookie: JSON.stringify(cookie),
DS: getDS(`uid=${cookie.login_uid}`, ""),
};
const url = `${TGApi.GameData.getUserCard}?uid=${cookie.login_uid}`;
const query = `uid=${cookie.login_uid}`;
const ck = TGUtils.Tools.cookieToString(cookie);
const header = TGUtils.User.getHeader(ck, query);
console.log("header:", header);
console.log("uid:", cookie.login_uid);
return await http.fetch(url, {
method: "GET",
headers: header,
body: http.Body.json({
uid: cookie.login_uid,
}),
}).then((res) => {
console.log(res.data);
return res.data;
});
}

/**
* @description 获取用户绑定角色
* @since Alpha v0.2.0
* @param {BTMuli.User.Base.Cookie} cookie 用户的 Cookie
* @param {string} stoken stoken
* @returns {Promise<unknown>} 用户绑定角色
*/
export async function getGameRoles (cookie: BTMuli.User.Base.Cookie, stoken: string): Promise<unknown> {
const url = TGApi.GameData.getGameRoles;
const ck = TGUtils.Tools.cookieToString(cookie);
const query = `stoken=${stoken}`;
const header = TGUtils.User.getHeader(ck, query);
console.log("header:", header);
console.log("stoken:", stoken);
return await http.fetch(url, {
method: "GET",
headers: header,
body: http.Body.json({
stoken,
}),
}).then((res) => {
console.log(res.data);
return res.data;
Expand Down
37 changes: 21 additions & 16 deletions src/core/request/getTokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@ import TGUtils from "../utils/TGUtils";
*/
export async function getTokensByLoginTicket (cookie: BTMuli.User.Base.Cookie): Promise<BTMuli.User.Base.TokenItem[] | BTMuli.Genshin.Base.Response> {
const url = `${TGApi.GameTokens.getTokens}?login_ticket=${cookie.login_ticket}&token_types=3&uid=${cookie.login_uid}`;
const header = TGUtils.User.getHeader(cookie);
const ck = TGUtils.Tools.cookieToString(cookie);
const query = `login_ticket=${cookie.login_ticket}&token_types=3&uid=${cookie.login_uid}`;
const header = TGUtils.User.getHeader(ck, query);
console.log("header:", header);
return await http.fetch<BTMuli.User.Response.Token>(url, {
method: "GET",
headers: header,
Expand All @@ -39,17 +42,13 @@ export async function getTokensByLoginTicket (cookie: BTMuli.User.Base.Cookie):
*/
export async function getLtokenByStoken (cookie: BTMuli.User.Base.Cookie, stoken: string): Promise<unknown> {
const url = `${TGApi.GameTokens.getLToken}`;
const header = TGUtils.User.getHeader(cookie);
const ds = TGUtils.User.getDS(`stoken=${stoken}`, "");
console.log("DS:", ds);
console.log("Cookie:", JSON.stringify(cookie));
const ck = TGUtils.Tools.cookieToString(cookie);
const query = `stoken=${stoken}`;
const header = TGUtils.User.getHeader(ck, query);
console.log("header:", header);
return await http.fetch<BTMuli.User.Response.Token>(url, {
method: "POST",
headers: {
...header,
cookie: JSON.stringify(cookie),
DS: `${ds}`,
},
headers: header,
}).then((res) => {
console.log(res.data);
if (res.data.retcode !== 0) return res.data;
Expand All @@ -65,13 +64,16 @@ export async function getLtokenByStoken (cookie: BTMuli.User.Base.Cookie, stoken
*/
export async function getCookieTokenByStoken (cookie: BTMuli.User.Base.Cookie, stoken: string): Promise<unknown> {
const url = `${TGApi.GameTokens.getCookieToken}?stoken=${stoken}`;
const header = TGUtils.User.getHeader(cookie);
return await http.fetch<BTMuli.User.Response.Token>(url, {
const ck = TGUtils.Tools.cookieToString(cookie);
const query = `stoken=${stoken}`;
const header = TGUtils.User.getHeader(ck, query);
console.log("header:", header);
return await http.fetch(url, {
method: "GET",
headers: header,
}).then((res) => {
console.log(res.data);
if (res.data.retcode !== 0) return res.data;
return res.data;
});
}

Expand All @@ -84,15 +86,18 @@ export async function getCookieTokenByStoken (cookie: BTMuli.User.Base.Cookie, s
*/
export async function vetifyStoken (cookie: BTMuli.User.Base.Cookie, stoken: string): Promise<unknown> {
const url = `${TGApi.GameTokens.vetifyStoken}`;
const header = TGUtils.User.getHeader(cookie);
return await http.fetch<BTMuli.User.Response.Token>(url, {
const ck = TGUtils.Tools.cookieToString(cookie);
const query = `stoken=${stoken}`;
const header = TGUtils.User.getHeader(ck, query);
console.log("header:", header);
return await http.fetch(url, {
method: "POST",
headers: header,
body: http.Body.json({
stoken,
}),
}).then((res) => {
console.log(res.data);
if (res.data.retcode !== 0) return res.data;
return res.data;
});
}
6 changes: 4 additions & 2 deletions src/core/utils/TGUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,20 @@

import { parseAnnoContent } from "./parseAnno";
import { getAnnoCard } from "./getAnnoCard";
import { getDS } from "./getDS";
import { getRequestHeader } from "./getRequestHeader";
import { cookieToString } from "./tools";

const TGUtils = {
Anno: {
getCard: getAnnoCard,
parseContent: parseAnnoContent,
},
User: {
getDS,
getHeader: getRequestHeader,
},
Tools: {
cookieToString,
},
};

export default TGUtils;
9 changes: 4 additions & 5 deletions src/core/utils/getDS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
* @since Alpha v0.2.0
*/

// Node
import qs from "qs";
// Tauri.Genshin
import { MD5 } from "./tools";
import TGConstant from "../constant/TGConstant";
Expand All @@ -19,15 +17,16 @@ import TGConstant from "../constant/TGConstant";
* @param {string} body 请求体
* @returns {string} ds
*/
export function getDS (query: string, body: string): string {
export function getDS (query: string, body: string = ""): string {
const params = {
salt: TGConstant.SALT.Other.X4,
t: Math.floor(Date.now() / 1000).toString(),
r: Math.floor(Math.random() * 900000 + 100000).toString(),
r: Math.floor(Math.random() * 100000 + 100000).toString(),
b: body,
q: query,
};
const md5Str = MD5(qs.stringify(params));
const paramStr = `salt=${params.salt}&t=${params.t}&r=${params.r}&b=${params.b}&q=${params.q}`;
const md5Str = MD5(paramStr);
const ds = `${params.t},${params.r},${md5Str}`;
return ds;
}
21 changes: 15 additions & 6 deletions src/core/utils/getRequestHeader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,26 @@
*/

import TGConstant from "../constant/TGConstant";
import { getDS } from "./getDS";

export function getRequestHeader (cookie: BTMuli.User.Base.Cookie): Record<string, string> {
/**
* @description 获取请求头
* @since Alpha v0.2.0
* @param {string} cookie cookie
* @param {string} q query
* @param {string} b body
* @returns {Record<string, string>} 请求头
*/
export function getRequestHeader (cookie: string, q: string, b: string = ""): Record<string, string> {
const header = {
"User-Agent": TGConstant.BBS.USER_AGENT,
"content-type": "application/json;charset=UTF-8",
"x-requested-with": "com.mihoyo.hyperion",
// "x-requested-with": "com.mihoyo.hyperion",
"x-rpc-app_version": TGConstant.BBS.VERSION,
"x-rpc-client_type": "5",
"x-rpc-device_id": cookie.DEVICEFP,
Origin: "https://www.miyoushe.com",
Referer: "https://www.miyoushe.com",
Origin: "https://webstatic.mihoyo.com/",
Referer: "https://webstatic.mihoyo.com/",
DS: getDS(q, b),
Cookie: cookie,
};
return header;
}
13 changes: 13 additions & 0 deletions src/core/utils/tools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/

import md5 from "js-md5";
import qs from "qs";

/**
* @description 转义正则表达式
Expand Down Expand Up @@ -50,3 +51,15 @@ export function getRandomString (length: number): string {
export function MD5 (data: string): string {
return md5.update(data).hex();
}

/**
* @description 将 ck JSON 对象转换为字符串
* @since Alpha v0.2.0
* @param {object} ck ck JSON 对象
* @returns {string} ck 字符串
*/
export function cookieToString (ck: object): string {
let res = qs.stringify(ck);
res = res.replace(/&/g, ";");
return res;
}
19 changes: 15 additions & 4 deletions src/pages/User.vue
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
<v-btn @click="getUserGameCard">
获取游戏数据
</v-btn>
<v-btn @click="getBindRole">
获取绑定角色
</v-btn>
</div>
</template>
<script setup lang="ts">
Expand All @@ -42,6 +45,7 @@ onMounted(async () => {
// 根据获取到的 cookie.login_ticket 获取 stoken 和 ltoken
async function getTokens () {
const tokenRes = await TGRequest.User.getTokens(cookie.value);
console.log(tokenRes);
if (Array.isArray(tokenRes)) tokens.value = tokenRes;
else {
console.log(tokenRes);
Expand Down Expand Up @@ -75,11 +79,11 @@ async function vertifyStoken () {
console.log(vertifyRes);
}
// 获取 stoken
// 获取 ltoken
async function getLToken () {
const ltoken = await TGSqlite.getAppDataItem("ltoken");
console.log("ltoken", ltoken);
const tokenRes = await TGRequest.User.getLToken(cookie.value, ltoken);
const stoken = await TGSqlite.getAppDataItem("stoken");
console.log("stoken", stoken);
const tokenRes = await TGRequest.User.getLToken(cookie.value, stoken);
console.log(tokenRes);
}
Expand All @@ -89,6 +93,13 @@ async function getUserGameCard () {
console.log(gameCard);
}
// 获取绑定角色
async function getBindRole () {
const stoken = await TGSqlite.getAppDataItem("stoken");
const bindRole = await TGRequest.User.getGameRoles(cookie.value, stoken);
console.log(bindRole);
}
</script>
<style scoped>
.testDiv {
Expand Down

0 comments on commit d959ab4

Please sign in to comment.