uigf-org / mihoyo-api-collect Goto Github PK
View Code? Open in Web Editor NEW收集米哈游旗下的游戏与应用的API。
License: Other
收集米哈游旗下的游戏与应用的API。
License: Other
做星铁体力查询的时候,注意到/game_record/app/hkrpg/api/note
这个API如果长期不添加x-rpc-device_fp
字段会必定触发验证码(retcode 1034),因此建议鉴权中将x-rpc-device_fp
放在“少数API才需要验证的额外的请求头”中。
虽然有些地方有点错误,但是总体整理的还是不错的,有没有兴趣并入到UIGF的文档里面呢
Apifox 中维护了大量的 API(半成品),现在欢迎社区人士的加入
DismissedLight 在 Apifox 中邀请你加入团队 UIGF https://app.apifox.com/invite?token=VtE-VfmGnEtA4E_Khmct6
由于链接 7 天就会过期,可以在这个Issue下回复我,我会及时更新链接
以下信息完善后可补充至 /hoyolab/user/game_account_info.md
请求路径与国服相比只有域名不同:
https://hk4e-api-os.hoyoverse.com/event/gacha_info/api/getGachaLog
请求参数与国服类似,增加了 region
参数,但不清楚缺少此参数是否还能成功查询。其值即为 “ID对照表”中的“服务器名称”。
(另外,我可以肯定 init_type
参数对于 API 请求没有实际作用,这是祈愿记录页面的遗留参数,表示祈愿类型下拉框初始选中的类型。)
几个签到软件都无法签到了(活动已结束)
body和query一般来说不会同时存在。
指的是在使用post请求,没有query的时候删除那个字段还是直接设置为空
main = f"salt={salt}&t={t}&r={r}&b={body}&q={query}"
main = f"salt={salt}&t={t}&r={r}&b={body}"
这2种我都试过了,都显示服务不可用
<html>
<head><title>503 Service Temporarily Unavailable</title></head>
<body bgcolor="white">
<center><h1>503 Service Temporarily Unavailable</h1></center>
<hr><center>nginx</center>
</body>
</html>
完整的请求代码如下
async def main():
# device_id: str = "".join(str(uuid.uuid4()).split("-")).upper() # str(uuid.uuid4()).upper() # "".join(str(uuid.uuid4()).split("-")).upper()
device_id: str = ''.join(random.choices(ascii_letters + digits, k=32))
print(device_id)
print(len(device_id))
post_data = {
"role_id": "117373444",
"server": "prod_gf_cn"
}
headers = {
"x-rpc-app_version": "2.44.1",
"x-rpc-client_type": "5",
"x-rpc-device_id": device_id,
"X-Requested-With": "com.mihoyo.hyperion",
"Origin": "https://api-takumi-record.mihoyo.com",
"Host": "api-takumi.mihoyo.com",
"Referer": "https://webstatic.mihoyo.com",
"User-Agent": "Mozilla/5.0 (Linux; Android 13; M2101K9C Build/TKQ1.220829.002; wv) " +
"AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/108.0.5359.128 Mobile Safari/537.36 miHoYoBBS/2.44.1",
"DS": ds.get_ds(post_data)
}
async with aiohttp.ClientSession(cookies=cookies) as session: # type: ignore
async with session.get('https://api-takumi-record.mihoyo.com/game_record/app/hkrpg/api/index', params=post_data, headers=headers) as response:
data = await response.text()
print(data)
其中get_ds函数长这样
def get_ds(body: Any, query: str = ""):
# 将要使用的salt,此为2.44.1版本的salt。
salt = "xV8v4Qu54lUKrEYFZkJhB8cuOh9Asafs"
# body(post)和query(get)一般来说不会同时存在。
# 可以使用json库的dumps函数将对象转为JSON字符串。
body = json.dumps(body)
# query = "&".join(sorted(query.split("&")))
t = int(time.time())
# 直接用更简单粗暴的方法
r = random.randint(100001, 200000)
main = f"salt={salt}&t={t}&r={r}&b={body}" # &q={query}"
print(main)
ds = md5(main.encode(encoding='UTF-8')).hexdigest()
final = f"{t},{r},{ds}" # 最终结果。
return final
按照鉴权那页写的js,
let salt = 'xV8v4Qu54lUKrEYFZkJhB8cuOh9Asafs';
let time = new Date().getTime().toString().substring(0, 10);
let random = Math.floor(Math.random() * 100001 + 100001);
let body = '';
let query = "role_id=xxxxx&server=prod_gf_cn&isPrev=&schedule_type=1&need_all=true"
let sign = md5("salt=" + salt + "&t=" + time + "&r=" + random + "&b=" + body + "&q=" + query);
console.log(time + "," + random + "," + sign)
header是
Host: api-takumi-record.mihoyo.com
DS:ds
x-rpc-app_version: 2.52.1
x-rpc-client_type: 5
用米游社抓包出来的ds放进去能用,用上述代码生成的ds丢header里会报-10001错误,代码应该没错吧,请问是不是算法或salt改变了?
https://api-takumi-record.mihoyo.com/game_record/app/genshin/api/dailyNote 获取游戏内实时数据的api,我通过快捷指令做了一个快速查看,然后使用圈x做了一个监控脚本,但是经常发生数据无法获取的情况,retcode是1034。
在米游社打开便签页面会提示账号异常,通过验证码之后恢复,但是过段时间还会这样。
salt
需要在验证请求头的API的生成DS
请求头字段值时使用合适的salt
K2 | LK2 | 米游社版本 |
---|---|---|
BIPaooxbWZW02fGHZL1If26mYCljPgst | 9ttJY72HxbjwWRNHJvn0n2AYue47nYsK | 2.63.1 |
pIlzNr5SAZhdnFW8ZxauW8UlxRdZc45r | 0wr0OpH2BNuekYrfeRwkiDdshvt10cTY | 2.62.2 |
uTUzziiV9FazyGA7XgVIk287ZczinFRV | L6ht0P18usSaC9c5Do3olmygiR4QX389 | 2.61.1 |
AcpNVhfh0oedCobdCyFV8EE1jMOVDy9q | 1OJyMNCqFlstEQqqMOv0rKCIdTOoJhNt | 2.60.1 |
awFeNNTsLYcK20LSO60Es8CRVZOjCB1b | 6pNd5NnDnbwKxewrPwEoWlSYwhualS2H | 2.59.1 |
kzTvKGDHumYf6h1Ia5txMjxAJuTtD0ol | KTJQGN2a2Trqk0tcQZS6JV3rU7CnV8Q6 | 2.58.2 |
1XgQyjgs3iGBwEwgnqySnqtPdw0Yi2mP | 20k4lPpyult9CEZ2dhoEkV09lkt0Rqes | 2.57.1 |
4boKU9HR49XublAiGdlH6xCpjAnaix3X | wam87VdmOXIGINFFSChd4D5idFx9KGiY | 2.56.1 |
xc1lzZFOBGU0lz8ZkPgcrWZArZzEVMbA | F6tsiCZEIcL9Mor64OXVJEKRRQ6BpOZa | 2.55.1 |
HwppTvPwIAKGTG7DhnwQRHhQ1LP3oR3S | 6opzJn4gevA62u3g6arFwLKu8Hvq9kdP | 2.54.1 |
yuzHvf4MkGYyoS4837hHOwLMyVOmtPuY | 0PUWkNIBnLcg8GgRNRJc14kSn4SrPBsS | 2.53.1 |
HiwYTTu2ovGcU51ehSXfe22SpNmQumlT | QCRgj6bHHQvS0Rz03loexYSXpuiO3DZ6 | 2.52.1 |
OFYrOudMZI78JBshNtCipA12GLQ4smLZ | 8eow43oFDpZeLfsSlpYVdtO6cbPN9yAu | 2.51.1 |
A4lPYtN0KGRVwE5M5Fm0DqQiC5VVMVM3 | kkFiNdhyHqZ1VnDRHnU1podIvO4eiHcs | 2.50.1 |
egBrFMO1BPBG0UX5XOuuwMRLZKwTVKRV | DG8lqMyc9gquwAUFc7zBS62ijQRX9XF7 | 2.49.1 |
OYcKGMRDRpnluotQHWwPDnV4xZG4WRMx | 9YiFQ07upss6RVY7bwrUe3Hly9pktOr4 | 2.47.1 |
KZazpG4cO2QECFDBUCxdhS8cYCsQHfzn | X7UOLLnTuNS3kgTJ1BUHOvKpiqp3kmym | 2.46.1 |
Ea0hkTHxe9cJDwlw4hswBGHDfSlmM5t9 | J1ylcAXhqus0YkEOEqeYDia4ldrd1Wvg | 2.45.1 |
dZAwGk4e9aC0MXXItkwnHamjA1x30IYw | IEIZiKYaput2OCKQprNuGsog1NZc1FkS | 2.44.1 |
ODzG1Jrn6zebX19VRmaJwjFI2CDvBUGq | V1PYbXKQY7ysdx3MNCcNbsE1LtY2QZpW | 2.43.1 |
jrU9ULHGZdM9Os3uGHOpjyRELYxby5cg | 9gaxOdeeY2W9dw5x62pywhik8cxy5TIJ | 2.42.1 |
TsmyHpZg8gFAVKTtlPaL6YwMldzxZJxQ | osgT0DljLarYxgebPPHJFjdaxPfoiHGt | 2.41.1 |
fdv0fY9My9eA7MR0NpjGP9RjueFvjUSQ | jEpJb9rRARU2rXDA9qYbZ3selxkuct9a | 2.40.1 |
PVeGWIZACpxXZ1ibMVJPi9inCY4Nd4y2 | yUZ3s0Sna1IrSNfk29Vo6vRapdOyqyhB | 2.38.1 |
6J1hde1Wu02eF1DFlLpMjeg2dMloAytL | Qqx8cyv7kuyD8fTw11SmvXSFHp7iZD29 | 2.37.1 |
n0KjuIrKgLHh08LWSCYP0WXlVXaYvV64 | YVEIkzDFNHLeKXLxzqCA9TzxCpWwbIbk | 2.36.1 |
ZSHlXeQUBis52qD1kEgKt5lUYed4b7Bb | N50pqm7FSy2AkFz2B3TqtuZMJ5TOl3Ep | 2.35.1 |
z8DRIUjNDT7IT5IZXvrUAxyupA1peND9 | 9nQiU3AV0rJSIBWgdynfoGMGKaklfbM7 | 2.34.1 |
6aupac9Brl9ngY6zTbW4R6qhFU4ieorq | DrOURud7SJPhMq7QFGessqlP0W1H1Zde | 2.33.1 |
TMZzKzTLKsdoHlg9HclqPVfswKPkVc3K | tUjkz3RmgcqT3wn3EWVRypzw55JNOcqw | 2.32.1 |
vf6vnwHNA28XvTVEG2quR7Jb1nDRshIp | dzwqtbBBhnRsaaR74BrqgUo9wnGj192Y | 2.31.1 |
pOdIuWYDJpUE8XywWIvJmqZ3MbQMIcly | 8FvNSgrYbNmKA7it3x3PXM1UHt5k5QLD | 2.30.1 |
fvdsy1uvjh2nH7pbRhsR3EehBmfKM07f | N5SE5zP9dKlde9doDgnoy0smOneHEDBE | 2.29.1 |
dWCcD2FsOUXEstC5f9xubswZxEeoBOTc | ulInCDohgEs557j0VsPDYnQaaz6KJcv5 | 2.28.1 |
5egHWuxthS2A3y5cLAs5mFNxZ1Vq47Xm | zWUvmGfuUDYtlyJixZKo4TNGkyy2eKdE | 2.27.1 |
x5SqmUKVTOXQm0atFFgzaPnuukoR3kRR | B82TrmbdFM1egQyX6nLLoMxHq0bv8o2i | 2.26.1 |
51kF1mSQqrudUeG2bmOpfN1Zyi0w7kup | 7vUrKhuTsGFhGFNRuEiFqDn08JqUoZjC | 2.25.1 |
2vQN5HYZQjaMBsBURP2TEiQE2pWxmYBT | qEla7MX4OncDWcZ5LIYNh3ZlBVTxvVzE | 2.24.1 |
PRMloet7okK3GkDE9NUugVI9Uwqg772U | MuS3jRY8gGBj3POP0oHls3rd2pICh8Dg | 2.23.1 |
Xs13CXZSoSJiSyNqI7OueXHoYFW9nd7J | x3zQtF0dT4VqRDhgghCtTMXM6FSZSaAk | 2.22.1 |
WEZMArnp99q0ILEKBhjSmATg6WstvnsL | ImmsH7Ucl9yUnGFRjbiPPrY1p8Ph626m | 2.21.1 |
O7NuQxRWQLeDlx3ydb7g0ePHqnuCqUYu | 78vFtRwwxhokqXggjHykueJg1Fb3OA01 | 2.20.1 |
zs1ckRtbocPtV5em1KvhQ3lohiUIvdRC | wCN9yMxmW1shLBMGSxPXRTcwpVavUYZx | 2.19.1 |
qgBAyoUemRSdTyG0cKCURW09K3mkfftA | RYarginIzdoujH2WnEtL65isWpVZ5V9N | 2.18.1 |
plKuQubSC47mKGRNQbvHT2JGV5Bv7jtO | 3sOJyHWiJpymE0hW2b6OUQQrLq7G0c5c | 2.17.1 |
iKN9RtYfW8sIimkfpLblSoDp4HvtMJB7 | eOqOpOPvcRPPDt1PSdoaNRM78RJ3e8Tk | 2.16.1 |
lGdUqAcvDgJNSKT3g8VNojvusFJnmWFB | amtw04Bbfi2Uvo9u3THErtpNOZST3h0u | 2.15.1 |
KpynUoRqKicWDCw5ZmFbHgcBIsjzE5np | vTAcBCLSIOCfGxXLWhhj9k4ksvGQepQ9 | 2.14.1 |
6zT9berkIjLBimVKLeQiyYCN0tatGDpP | R621k3PJicyCn77wXTSGszb3U8zkBQA | 2.13.1 |
I4Yzj5EHZIVcEX6nYd1L3tdNqe3F0Xkc | 48MMWHcOuxdqKSmb8OeMyiw5xdCHd1C | 2.12.1 |
SrPve82idlmfrcRQqtMnhwKbdHJGGxMk | WwkfRfjpaJIrbQQQlGOvfh31yHJeHV6 | 2.11.1 |
rd62nc33ngxzyuvlhcql3dqfaksdota8 | 4a8knnbk5pbjqsrudp3dq484m9axoc5g | 2.10.1 |
以下版本早已不可用
K2 | LK2 | 米游社版本 |
---|---|---|
4q04st7bwy45c71az4yusak43n7en8wp | w5k9n3aqhoaovgw25l373ee18nsazydo | 2.9.1 |
dmq2p7ka6nsu0d3ev6nex4k1ndzrnfiy | rk4xg2hakoi26nljpr099fv9fck1ah10 | 2.8.1 |
fd3ykrh7o1j54g581upo1tvpam0dsgtf | 14bmu1mz0yuljprsfgpvjh3ju2ni468r | 2.7.1 |
hfiki8qvnuai95p2845psdo9ydcmsrc0 | w9p2p72p9octwd7lj1oa913hncq1k4td | 2.6.1 |
4X | 6X | PROD |
---|---|---|
xV8v4Qu54lUKrEYFZkJhB8cuOh9Asafs | t0qEgfub6cvueAPgR5m9aQWWVciEer7v | JwYDpKvLj6MrMqqYU6jTKF17KNO2PXoS |
安全性API的RSA公钥:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDvekdPMHN3AYhm/vktJT+YJr7
cI5DcsNKqdsx5DZX0gDuWFuIjzdwButrIYPNmRJ1G8ybDIF7oDW2eEpm5sMbL9zs
9ExXCdvqrn51qELbqj0XxtMTIpaCHFSI50PfPpTFV9Xt/hmyVwokoOXFlAEgCn+Q
CgGs52bFoYMtyi+xEQIDAQAB
-----END PUBLIC KEY-----
salt
取决于你想在请求头的x-rpc-app_version
中的米游社版本,每个版本有其对应的K2salt
和LK2salt
。但是4Xsalt
和6Xsalt
是每个版本都不变的。
也取决于请求头的x-rpc-client_type
:
x-rpc-client_type
为2
时,一般使用K2salt
,并配合DS1
生成算法。x-rpc-client_type
为4
时,一般使用LK2salt
,并配合DS1
生成算法。x-rpc-client_type
为5
时,一般使用4X或6Xsalt
,并配合DS2
生成算法。x-rpc-client_type
的值会在需要验证请求头的API进行标识。
如果某个API需要独有的salt
、DS
算法等,会进行标识。
用例:
api-takumi-record.mihoyo.com
的API使用较多)。salt
位置x-rpc-client_type
为2
时使用的salt
APK被混淆后的com.mihoyo.hyperion.manager.AManager.k2()
中。
x-rpc-client_type
为4
时使用的salt
APK被混淆后的com.mihoyo.hyperion.manager.AManager.lk2()
中。
x-rpc-client_type
为5
时使用的salt
4Xsalt
在libxxxxxx.so
中的Java_com_mihoyo_hyperion_net_aaaaa_a2222
。
6Xsalt
在libxxxx.so
中的Java_com_mihoyo_hyperion_net_aaaaa_b5555
。
DS
生成算法的位置注:下文简称“DS
算法”。
DS
算法的位置:
com.mihoyo.hyperion.net.bbbbb.a2222
用于DS
生成的函数
来自libdddd.so
DS1
算法。
因为该函数直接传入了salt
,因此记录该函数的参数值即可获得K2salt
。
参数:salt
返回:DS1
com.mihoyo.hyperion.net.aaaaa.a2222
来自libxxxxxx.so
DS2
算法
参数:POST请求的数据,GET请求的URL参数
返回:DS2
com.mihoyo.hyperion.net.aaaaa.b5555
来自libxxxx.so
DS2
算法
参数:POST请求的数据,GET请求的URL参数
返回:DS2
从作用上讲 DS 应该是 DataSign(数据签名)而不是 Dynamic Secret(动态密钥)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.