はじめに
今日はプログラミングのおはなし。
鳴潮のランチャーがアップデートされて、ランチャー上で結晶波長板(スタミナ)などが確認できるようになったとのこと。
確かに、ゲームを起動せずにいろいろ情報が見れてる。そこで私はふと考えた。
これ、APIきたんじゃない……?!
新しいおもちゃ!ということで、まずはAPIの叩き方を調べてみた!
プロキシ設定
通信の中身を確認するために mitmproxy/mitmweb ってサービスを使う。このサービスを使うためには、まずプロキシ設定をする必要がある。
WIndowsの「設定」>「ネットワークとインターネット」>「プロキシ」>「プロキシサーバーを使う」からできる。プロキシIPアドレスは「127.0.0.1」、ポートは「8080」としたよ。
次にmitmproxy/mitmwebを起動、ブラウザで htttp://mitm.it にアクセス、証明書をインストールする。
証明書のインポート ウィザードが開くけど、全部設定はそのままで。何か確認画面でたら「OK」しておけば良いと思う。
これでPCの通信の中身が確認できるようになった。
今回見たいのは鳴潮関係の通信だから、ランチャーに少しちょっかいをかけてみる。都合良くランチャーのプレイヤーデータに更新ボタンがあったから、それを押す。
いろいろデータが来た。kurogame (開発元)ってついてるものが鳴潮の通信だね。
URLは https://pc-launcher-sdk-api.kurogame.net/game/queryRole ということが分かった。
Responseを確認すると、確かにそれっぽいデータが取得できてるのが見える。


ちなみにこの上にOPTIONSメソッドの通信もあったけど、これが無くても後のデータ取得はできてたし、何に使うのかは結局よく分からなかった。
次はコードでこのAPIにHTTPリクエストしてみる!
APIにリクエスト
次はPythonでこの通信を再現してみる。下にコード書いたよ。URLのクエリ _t はUNIX時間を入れる。あとリクエスト見る限り、JSONデータが必要みたいだから、その部分をjsonに入れてPOST。
import time
import requests
import json
t = int(time.time())
url = f"https://pc-launcher-sdk-api.kurogame.net/game/queryRole?_t={t}"
data = {
"oauthCode": oauthCode,
"playerId": "701929833",
"region": "Asia"
}
resp = requests.post(url, json=data)
resp_json = resp.json()
print(json.dumps(resp_json, indent=4))
{
"code": 0,
"message": "success",
"data": {
"Asia": "{\"Base\":{\"Name\":\"Miru.\",\"Id\":701929833,\"CreatTime\":1716563160357,\"ActiveDays\":463,\"Level\":80,\"WorldLevel\":8,\"RoleNum\":21,\"SoundBox\":10,\"Energy\":240,\"MaxEnergy\":240,\"StoreEnergy\":381,\"StoreEnergyRecoverTime\":1760704845418,\"EnergyRecoverTime\":0,\"Liveness\":0,\"LivenessMaxCount\":100,\"LivenessUnlock\":true,\"ChapterId\":18,\"WeeklyInstCount\":3,\"Boxes\":{\"2\":753,\"1\":889,\"3\":302,\"4\":62},\"BasicBoxes\":{\"2\":631,\"1\":539,\"3\":298,\"4\":78},\"PhantomBoxes\":{\"2\":144,\"1\":184,\"3\":116},\"BirthMon\":0,\"BirthDay\":0},\"BattlePass\":{\"Level\":6,\"WeekExp\":2600,\"WeekMaxExp\":12000,\"IsUnlock\":true,\"IsOpen\":true,\"Exp\":400,\"ExpLimit\":1000}}"
},
"timestamp": 1760634055662
}取得できた!プレイヤー情報はAsiaキーの中にJSON文字列として入ってる。複数サーバ登録してる人なら、Asiaの他にAmericaとかEuropeとかもあるかも?
JSON文字列は、json.loads()で辞書型変換すれば読み取れるようになる。
APIの具体的な仕様については、また別の記事で。
(2025.11.13追記)仕様をまとめた記事を投稿したよ!
おわりに
ホヨバース系のゲームは、スタミナとかの情報はHoYoLab使えばスマホ上でも見れたけど、鳴潮はゲーム内でしか見る手段が無かったんだよね。
でも今回のランチャーアップデートで欲しい情報が取れるようになったから、サードパーティ面でいろいろ可能性が広がったと思う。
非公開APIだから、今後仕様が変わるかもしれないけど、できればずっと変わらないことを願ってる。




0