概要にゃ

Last-modified: 2021-01-23 (土) 19:37:53

走り書きにゃ。
まとまってない情報とかでもとりあえず出しておけば誰かの役に立つかもしれないにゃ。

はじめにゃ

細かい説明は端折って簡単な流れと最低限の情報を集めるページにゃ。
とりあえず雀魂の牌譜データの取得と解析に必要な情報を優先して集めていくにゃ。
速攻にゃー! 速攻ー!

雀魂APIリストにゃ

https://takayama-lily.github.io/mjsoul/api.html(外部リンク)
詳しい情報は書かれていないけれど、API名とパラメータ名が分かるからパケット解読には必須にゃ。
API の言葉の意味は分からなくても大丈夫にゃ。

雀魂サーバーとの通信内容を見るにゃ

mitmproxy というアプリで雀魂サーバーとブラウザが行っているの通信内容を覗けるにゃ。
アプリがやっていることの仕組みを理解する必要はないにゃ。
mitmproxy についての説明と導入手順は「解析ツールの準備にゃ」を参照にゃ。

通信内容を読み解くにゃ

mitmproxy を動かしている状態で雀魂をプレイすれば通信内容がリスト表示されるにゃ。
雀魂サーバー以外との通信内容もキャッチしちゃうからドメイン名でフィルターをかけるのがよいにゃね。

雀魂を動かしているときに新しい通信をキャッチしたら、それは十中八九その操作に関係がある通信にゃ。
対局を観戦しているときなら、画面をぼーっと眺めているだけでも下記画像みたいな通信内容が記録されていくにゃ。

protocol_buffer.jpg

GameLiveSegment とか RecordDiscardTile とかが APIリストのものと一致するにゃね。
通信内容は Protocol Buffers という形式で表現されているにゃ。
情報の量がとても少ないシンプルな形式にゃ。
有名なやつだから調べれば同じ情報がいっぱい出てくるにゃ。カンにゃ!

mitmproxy でキャッチした通信内容はどう解釈すればいいにゃ?

ここからが猫たちの天下無双な頭脳の出番にゃ。
単独で完結している API なら名前だけで何のデータか分かることも多いにゃ。
各APIの個別の読み方は別ページにまとめるにゃ。

APIを叩くにはどうすればいいにゃ?

これを書いている猫は知らないにゃ。
次はここに手をかけてみてもいいんだけど、牌譜が読めないと API を叩く動機が多分ないにゃ。
すでにそこまで到達している上級猫が示してくれたドキュメントはこれにゃ。
https://github.com/SAPikachu/amae-koromo-scripts/issues/2(外部リンク)

攻め方

まずはパケットを解析にゃ。これがそこそこに手間にゃ。
一匹が理解して wiki に簡単にでも共有されれば、理解した別猫が補足するなどしてどんどん加速していく部分にゃ。

パケットの中身が理解できたら、それをどう使うかは各猫の自由にゃ。
楽しいところにゃ。目的が他の猫と違う猫はここからが頑張りどころのはずにゃ。

大多数の猫は牌譜データの自動収集が第一目標かにゃ?
プログラミング猫の手を借りたい部分にゃね。
成果の一部をサービスとして提供してくれている某サイトは本当に偉大にゃ。

そのあとは集積した牌譜から統計情報を得ることかにゃ?
ここからは雀魂に限った話ではなくなるからひとまず保留にゃ。
けっこう先の話だしにゃ。