From 8ee28d890768e10f66cada2b2773180aa56963e7 Mon Sep 17 00:00:00 2001 From: Masterain Date: Tue, 18 Apr 2023 17:55:05 -0700 Subject: [PATCH] Update docs --- docs/.vuepress/public/upload-abyss-data.js | 1 + docs/zh/features/hutao-API.md | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 docs/.vuepress/public/upload-abyss-data.js diff --git a/docs/.vuepress/public/upload-abyss-data.js b/docs/.vuepress/public/upload-abyss-data.js new file mode 100644 index 000000000..82ca03655 --- /dev/null +++ b/docs/.vuepress/public/upload-abyss-data.js @@ -0,0 +1 @@ +javascript:if(window.location.href.indexOf("miyoushe.com")>-1){loadScript()}else{if(window.confirm('书签需要在米游社页面执行,是否前往?')){window.location.href="https://www.miyoushe.com/ys/"}}function loadScript(){var script=document.createElement('script');script.type='text/javascript';if(script.readyState){script.onreadystatechange=function(){if(script.readyState==='loaded'||script.readyState==='complete'){script.onreadystatechange=null;upload()}}}else{script.onload=function(){upload()}}script.src='https://cdn.staticfile.org/blueimp-md5/2.19.0/js/md5.min.js';document.body.append(script)}function upload(){this.getUserInfo().then(result=>{if(result.retcode!==0){alert("用户信息获取失败\\n请确认已登录并刷新当前页面");return}let userInfoList=result.data.list;let uid='';switch(userInfoList.length){case 0:alert("暂无原神角色信息\\n渠道服请绑定后重试");return;case 1:uid=userInfoList[0].game_uid;if(!window.confirm('提交 [UID:'+uid+'] 数据?')){return}break;default:let uidList=userInfoList.map(u=>u.game_uid);uid=prompt('输入在 ['+uidList.join('|')+'] 之中你想提交的角色 UID');if(!uidList.includes(uid)){alert("输入的 UID 不在你的账号列表内,请重试");return}break}let userInfo=userInfoList.filter(u=>u.game_uid===uid)[0];userInfo.cookie_id=md5(document.cookie);Promise.all([this.getAbyss(userInfo,1),this.getCharacter(userInfo)]).then(result=>{if(result[0].retcode!==0||result[1].retcode!==0){alert("深渊挑战信息获取失败\\n请确认已登录并刷新当前页面");return}let abyss=result[0].data;let character=result[1].data.avatars;this.saveData(abyss,character,userInfo,1).then(json=>alert(json.message)).catch(()=>alert('请求错误'))})}).catch(reason=>alert("用户信息获取失败\\n请确认已登录并刷新当前页面\\n错误提示:"+JSON.stringify(reason)))}function getUserInfo(){return new Promise((resolve,reject)=>{let url='https://api-takumi.miyoushe.com/binding/api/getUserGameRolesByCookie?';let query="game_biz=hk4e_cn";fetch(url+query,{method:'GET',credentials:'include',headers:this.getHeaders("/ys","",query),}).then(res=>res.json()).then(json=>resolve(json)).catch((e)=>reject(e))})}function getAbyss(userInfo,scheduleType){return new Promise((resolve,reject)=>{let url='https://api-takumi.miyoushe.com/game_record/app/genshin/api/spiralAbyss?';let query="role_id="+userInfo.game_uid+"&schedule_type="+scheduleType+"&server="+userInfo.region;fetch(url+query,{method:'GET',credentials:'include',headers:this.getHeaders("/ys/deep/","",query),}).then(res=>res.json()).then(json=>resolve(json)).catch((e)=>reject(e))})}function getCharacter(userInfo){return new Promise((resolve,reject)=>{let url='https://api-takumi.miyoushe.com/game_record/app/genshin/api/character';let body=JSON.stringify({role_id:userInfo.game_uid,server:userInfo.region,});fetch(url,{method:'POST',credentials:'include',headers:this.getHeaders("/ys/role/all",body,""),body:body}).then(res=>res.json()).then(json=>resolve(json)).catch((e)=>reject(e))})}function saveData(abyss,character,userInfo,scheduleType){return new Promise((resolve,reject)=>{let url='https://homa.snapgenshin.com/Record/Upload';fetch(url,{method:'POST',headers:{'User-Agent':'Snap Hutao/Bookmark','Content-Type':'application/json;charset=utf-8'},body:JSON.stringify({Uid:userInfo.game_uid,Identity:"Snap Hutao Bookmark",SpiralAbyss:TransformSpiralAbyss(abyss),Avatars:TransformAvatar(character)}),}).then(res=>res.json()).then(json=>resolve(json)).catch((e)=>reject(e))})}function getHeaders(rpcPage,body,query){return{'Accept':'application/json, text/plain, */*','x-rpc-client_type':'5','Accept-Language':'zh-CN,zh-Hans;q=0.9','Accept-Encoding':'gzip, deflate, br','Content-Type':'application/json;charset=utf-8','x-rpc-app_version':'2.36.1','DS':this.getDS(body,query),}}function getDS(body,query){let salt='xV8v4Qu54lUKrEYFZkJhB8cuOh9Asafs';let time=new Date().getTime().toString().substring(0,10);let random=Math.floor(Math.random()*900000+100000);let sign=md5("salt="+salt+"&t="+time+"&r="+random+"&b="+body+"&q="+query);return time+","+random+","+sign}function TransformAvatar(avatars){var res=[];for(var el of avatars){var payload={AvatarId:el.id,WeaponId:el.weapon.id,ReliquarySetIds:el.reliquaries.map(rel=>rel.set.id),ActivedvarellationNumber:el.actived_varellation_num,};res.push(payload)}return res}function TransformSpiralAbyss(data){var SpiralAbyss={};SpiralAbyss.ScheduleId=data.schedule_id;SpiralAbyss.TotalBattleTimes=data.total_battle_times;SpiralAbyss.TotalWinTimes=data.total_win_times;SpiralAbyss.Damage={AvatarId:data.damage_rank[0].avatar_id,Value:data.damage_rank[0].value,};SpiralAbyss.TakeDamage={AvatarId:data.take_damage_rank[0].avatar_id,Value:data.take_damage_rank[0].value,};SpiralAbyss.Floors=data.floors.map(el=>({Index:el.index,Star:el.star,Levels:el.levels.map(lel=>({Index:lel.index,Star:lel.star,Battles:lel.battles.map(bel=>({Index:bel.index,Avatars:bel.avatars.map(ael=>ael.id),}))})),}));return SpiralAbyss} \ No newline at end of file diff --git a/docs/zh/features/hutao-API.md b/docs/zh/features/hutao-API.md index 7b6e1bb74..23571ef45 100644 --- a/docs/zh/features/hutao-API.md +++ b/docs/zh/features/hutao-API.md @@ -42,7 +42,7 @@ redirectFrom: /features/hutao-API.html - 点击`角色使用`以查看角色使用率数据 - 角色使用率 = 角色在当前层数出场次数[^first] / 持有该角色的玩家在该层数的总记录数 - 点击`角色出场`以查看角色出场率数据 - - 角色出场率 = 角色在当前层数出场次数[^first] / 当前层数总记录数 + - 角色出场率 = 角色在当前层数出场次数[^first-2] / 当前层数总记录数 - 点击`角色持有`以查看角色持有率数据[^second] - 角色持有率[^third] = 所有拥有该角色的玩家数量 / 全部玩家数量 - 点击`队伍出场`以查看队伍组合出场次数数据 @@ -50,12 +50,29 @@ redirectFrom: /features/hutao-API.html ## 上传深境螺旋数据 +### 使用胡桃客户端 - 在主界面点击左侧菜单栏进入`深渊记录`功能页面 - 点击右上角的`刷新数据`以确保胡桃工具箱客户端已经获取到最新的个人深境螺旋数据 - 点击右上角的`上传数据`以上传你的深境螺旋数据 - 这可能需要花费数秒,上传成功后你将会看到如下图的成功提示 ![upload-hutaoapi](https://img.alicdn.com/imgextra/i3/1797064093/O1CN01Zt7yQp1g6duBDALeX_!!1797064093.png) + +### 使用浏览器 + +- 打开我们的 [JavaScript 脚本](/upload-abyss-data.js),复制全部内容 +- 在浏览器中创建一个新的书签 + - 在名称中填写一个合适的名称 + - 在 URL 中粘贴你刚刚复制的全部代码 + + ![add-bookmark](https://img.alicdn.com/imgextra/i3/1797064093/O1CN01p0KOqU1g6dvfDQO6e_!!1797064093.png) +- 访问米游社,在页面加载完成后点击你刚刚创建的书签 +- 稍等片刻,你应该能看到请求上传的确认窗口 +- 在确认后,浏览器将上传你的深渊数据,请勿关闭米游社页面 +- 在上传完成后,浏览器会有确认完成的提示窗口 + + [^first]: 在当前层中不同间内多次出现的同一个角色仅记1次出场次数 +[^first-2]: 在当前层中不同间内多次出现的同一个角色仅记1次出场次数 [^second]: 角色持有数据与深境螺旋记录独立 [^third]: 只要拥有该角色,即使没有在深境螺旋中登场,也会被计入拥有的状态;只要上传过深境螺旋记录,即会被计入全部玩家的数据中。