【鳴潮】プレイヤーデータを外部取得してみた

はじめに

今日はプログラミングのおはなし。
鳴潮のランチャーがアップデートされて、ランチャー上で結晶波長板(スタミナ)などが確認できるようになったとのこと。

確かに、ゲームを起動せずにいろいろ情報が見れてる。そこで私はふと考えた。

これ、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のクエリ _tUNIX時間を入れる。あとリクエスト見る限り、JSONデータが必要みたいだから、その部分をjsonに入れてPOST

Python
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))

JSON
{
    "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だから、今後仕様が変わるかもしれないけど、できればずっと変わらないことを願ってる。

もし良ければ、Like!をお願いします。記事執筆のモチベーションになります!
Like 0

投稿者 みぃるん

うさぎさんとかちっちゃいのが好き。 プログラミング勉強中~

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です