コンテンツにスキップ

天鳳の牌譜(mjlog)

鳳凰卓の牌譜ダウンロードについて

天鳳の牌譜を手に入れるためには、牌譜IDを知らなければならない。天鳳-ログ/一覧から、鳳凰卓のチェックボックスを選択して、日毎のログが一覧表示される。fileの"表示"を選択すると、その日の対戦成績一覧が表示され、4カラム目に"牌譜"が見つかる。クリックするとビューワーに移動するが、このときのアドレス、例えば

http://tenhou.net/0/?log=2022050401gm-00a9-0000-ffc804eb

であれば、"?log="のあとの"2022050401gm-00a9-0000-ffc804eb"が牌譜IDである。この牌譜IDを用いて、

"http://tenhou.net/0/log/?" + "牌譜ID" 
(上記例でいえば、http://tenhou.net/0/log/?2022050401gm-00a9-0000-ffc804eb)

にアクセスすれば、牌譜を取得することができる。

同ページにある過去ログから2006年以降のログファイルを取得することができるので(鳳凰卓は2009年以降)、そこから鳳凰卓の牌譜IDを取得し牌譜をダウンロードする。ログファイルのようにまとめて圧縮されているものもないため(見つけられてないだけであるんだろうか?)、一つ一つダウンロードする必要があり、スクリプトを組まないとやってられない作業である。としても、なんせファイル数が多く時間がかかる。全部の牌譜をダウンロードするのに4〜5日かかった。まとめてダウンロードできるようにしてもらえるとAI開発者は助かるし、サーバーの負荷も軽減できると思うので、win-winと思うのだが(そんなにAI開発者がいないか?)。

(ちなみに、お気づきかもしれないが自分自身の牌譜も牌譜IDがわかれば上記の手法でダウンロード可能である。有料会員しかダウンロードできないことになっているので、大きな声で言ってはいけないのだろうか?)

ダウンロードした牌譜の数/容量

ダウンロードした牌譜のファイル数(戦数)とその容量を示す。 計測方法は下記コマンド

# ファイル数
ls -d * | xargs -I{} sh -c 'echo -n {}: && find {} -type f ! -name ".*"| wc -l'

# 容量
du -hs *
  • ログファイルに記載されている戦数とファイル数が同じであることを確認済み。
  • 2009/02/01 のファイルはサンプルのようなので除外している。

三麻

ファイル数(戦数) 容量
2009 21994 242 MB
2010 38209 510 MB
2011 51150 708 MB
2012 60854 839 MB
2013 48664 667 MB
2014 54540 749 MB
2015 51310 708 MB
2016 47769 660 MB
2017 51958 716 MB
2018 57734 795 MB
2019 62392 859 MB
2020 74320 1.1 GB
2021 71829 992 MB
合計 692723 9.3 GB

四麻

ファイル数(戦数) 容量
2009 58160 551 MB
2010 111397 1.6 GB
2011 165861 2.5 GB
2012 202735 3.0 GB
2013 202126 3.1 GB
2014 189614 3.0 GB
2015 198606 3.1 GB
2016 204295 3.2 GB
2017 200008 3.2 GB
2018 210067 3.3 GB
2019 216880 3.4 GB
2020 254104 4.1 GB
2021 229583 3.6 GB
合計 2443436 38 GB

mjlog

下記サイトを参考にさせてもらった。消えると困るので、ここにも記載しておく。

ファイル形式

mjlogファイルはXML形式で記述されている。

<mjloggm ver="2.3">
<GO type="185"/>
<UN n0="%E3%82%B8%E3%83%A5%E3%83%B3" n1="%E6%88%91%E3%80%85%E3%82%AF%E3%83%A9%E3%82%B9" n2="%E6%A5%A0%E4%B8%8B%E5%B9%BE%E5%A4%AA%E9%83%8E" n3="" dan="16,16,16,0" rate="2108,2102,2097,1500" sx="M,F,M,C"/>
<TAIKYOKU oya="0"/>
<INIT seed="0,0,0,2,2,93" ten="350,350,350,0" oya="0" hai0="50,128,76,124,118,49,42,99,131,41,35,121,0" hai1="46,68,73,58,62,108,60,110,82,119,135,75,133" hai2="134,89,113,56,43,71,85,109,65,39,32,57,101" hai3="" shuffle="mt19937ar,208DE6A5,C95C7BDB,13F94561,85B5EC9B,F3928945,EBCB4B30,4C67B3D4,E47B7F53"/>
<T63/>
<N who="0" m="31008" />
<T66/>
<D0/>
<U129/>
<E119/>
<V53/>
<F32/>
(中略)
<T84/>
<N who="0" m="49745" />
<T87/>
<DORA hai="51" />
<D49/>
<U107/>
<E107/>
<V83/>
<REACH who="2" step="1"/>
<F57/>
<REACH who="2" step="2"/>
<T36/>
<D42/>
(中略)
<F86/>
<AGARI ba="0,1" hai="54,58,60,73,75,77,82,86,108,110,111" m="51209" machi="86" ten="40,5200,0" yaku="14,1,20,1,52,1" doraHai="93,51" who="1" fromWho="2" sc="350,0,350,62,340,-52,0,0" />
<INIT seed="1,0,0,4,0,119" ten="350,412,288,0" oya="1" hai0="48,110,82,85,97,86,133,43,106,36,125,92,41" hai1="122,129,124,98,123,91,32,128,108,45,54,109,68" hai2="1,96,58,105,64,37,104,120,70,40,75,71,72" hai3="" shuffle="mt19937ar,CD54F2E9,42B68B7A,F80329E0,F2742C7C,B9B5ED3E,17F61B88,E52E5200,BFE93A84"/>
<U69/>
<N who="1" m="31264" />
<U63/>
<N who="1" m="31520" />
<U112/>
<E32/>
<V118/>
(以下略)

<mjloggm ver="2.3">から<TAIKYOKU oya="0"/>までを対局情報、<INIT seed=…から<AGARI ba=…までを一局情報と呼ぶことにする。

対局情報

mjloggm

<mjloggm ver="2.3">

rootタグ。mjlogファイルのバージョン。

SHUFFLE

<SHUFFLE seed="mt19937ar-sha512-n288-base64,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" ref=""/>

2009年7月22日以降はこのseedを使って牌山を生成。

http://tenhou.net/stat/rand/

Go

<GO type="185"/>

対局形式(対戦予約時に選ぶ"四般南喰赤"というやつ)を表す。2進数に変換して、下記と比較すればOK。

BIT マスク FLAG=1 FLAG=0
0 0x001 対人戦 対コンピュータ戦
1 0x002 赤ナシ 赤アリ
2 0x004 喰ナシ 喰アリ
3 0x008 東南 東風
4 0x010 三麻 四麻
5 0x020 特上 (5bitと7bitが両方1のときは鳳凰、両方0のときは一般。)
6 0x040 5+10秒
7 0x080 上級 (5bitと7bitが両方1のときは鳳凰、両方0のときは一般。)
8 0x100
9 0x200
10 0x400 雀荘
11 0x800 技能

例えば、type="185"だと、2進数に変換すると、

10111001

ビットは右から数えるので、上の表から

  • 対人戦
  • 赤アリ
  • 喰アリ
  • 東南
  • 三麻
  • 鳳凰(6bit,8bitが共に1なので鳳凰)

となり、"三鳳南喰赤"となる。

UN

<UN n0="%E3%82%B8%E3%83%A5%E3%83%B3" n1="%E6%88%91%E3%80%85%E3%82%AF%E3%83%A9%E3%82%B9" n2="%E6%A5%A0%E4%B8%8B%E5%B9%BE%E5%A4%AA%E9%83%8E" n3="" dan="16,16,16,0" rate="2108,2102,2097,1500" sx="M,F,M,C"/>

ユーザー情報が記載されている。

n[0-3]

ユーザー名。URLエンコードされているのでデコードすればよい。

dan

段級位。

数字 段級位
0 新人
1 9級
2 8級
3 7級
4 6級
5 5級
6 4級
7 3級
8 2級
9 1級
10 初段
11 二段
12 三段
13 四段
14 五段
15 六段
16 七段
17 八段
18 九段
19 十段
20 天鳳
21 RESERVED...
var DAN=[
    "新人","9級","8級","7級","6級","5級","4級","3級","2級","1級",
    "初段","二段","三段","四段","五段","六段","七段","八段","九段","十段",
    "天鳳","RESERVED..."
];
rate

レート。

sx

性別。M:男性、F:女性、C:コンピュータ

TAIKYOKU

<TAIKYOKU oya="0"/>

対局開始。

oya

親が誰かを表す。0はUNで示されたn0が親であることを示す。(oya="0"以外あるのだろうか?)

一局情報

<INIT />で始まり<AGARI />もしくは<RYUUKYOKU />で終わる。これの繰り返し。

INIT

<INIT seed="0,0,0,2,2,93" ten="350,350,350,0" oya="0" hai0="50,128,76,124,118,49,42,99,131,41,35,121,0" hai1="46,68,73,58,62,108,60,110,82,119,135,75,133" hai2="134,89,113,56,43,71,85,109,65,39,32,57,101" hai3="" shuffle="mt19937ar,208DE6A5,C95C7BDB,13F94561,85B5EC9B,F3928945,EBCB4B30,4C67B3D4,E47B7F53"/>

局情報

seed

この局についての情報。以下の通り。

i seed[i]
0 東一局~北四局 0-3が東一-東四、4-7が南場、8-11が西場
1 本場
2 リーチ棒の本数
3 一つ目のサイコロの目-1
4 二つ目のサイコロの目-1
5 ドラ表示牌
ten

点数。×100する。

oya

親を表す

hai[0-3]

配牌。

shuffle

2009年7月22日以前はこの値を使って山を生成していた。

https://tenhou.net/man/#LOG

[T-W][0-9]*

<T66/>

ツモ。アルファベットはユーザーを表し、数字は牌を表す。

T: n0, U: n1, V: n2, W: n3

牌については、牌について参照

[D-G][0-9]*

<D0/>

打牌を表す。アルファベットはユーザーを表し、数字は牌を表す。

REACH

<V92/>
<REACH who="2" step="1"/>
<F41/>
<REACH who="2" ten="71,409,560,0" step="2"/>

立直を表す。

who

リーチした人を表す。

step

1のときリーチ宣言。その後打牌をして、ロンされなければ2が呼ばれる。

ten

リーチ棒を除いた後の点数を表す。

N

<N who="1" m="42059" />

鳴きを表す。

who

鳴いた人。

m

鳴きの種類と形を表す。

詳細はhttp://tenhou.net/img/tehai.js

16bitの整数値(216 = 65,536)で表される。場合分けが発生するのでややこしい。

順子の場合

2bit目が1なら順子となる。

BIT マスク Value
0-1 0x0003 誰から鳴いたか。0: 鳴きなし、1: 下家、2: 対面、3: 上家。
2 0x0004 1 (必ず1。順子であることを表す。)
3-4 0x0018 牌添字1
5-6 0x0060 牌添字2
7-8 0x0180 牌添字3
9 (未使用)
10-15 0xFC00 順子のパターン

順子のパターンは123, 234, 345, … , 789と7パターンある。これが萬子、索子、筒子の3種類あるので、7x3=21パターン。鳴いた牌を考慮すると、7x3x3=63パターンとなり、64bitで表すことができる。

赤牌を考慮する場合、3-4bit, 4-5bit, 6-7bitの情報が必要となる。面子を構成する牌が何番目の牌かを示している(これを牌添字と呼ぶ)。例えば5mのIDは16~19であるが、牌添字が0の場合はIDが16となり、赤5萬を表す。

ToDo: パターンについては要検討。

刻子あるいは加槓の場合

2bit目が0 且つ 3bit目もしくは4bit目が1の場合、これにあたる。

BIT マスク Value
0-1 0x0003 誰から鳴いたか。0: 鳴きなし、1: 下家、2: 対面、3: 上家。
2 0x0004 0 (必ず0。1の場合は順子になる。)
3 0x0008 刻子のとき1。加槓のとき0。
4 0x0010 加槓のとき1
5-6 0x0060 牌添字
7-8 (未使用)
9-15 0xFE00 刻子のパターン

9-15bit目で刻子のパターンを表す。赤牌を考慮しなければ、刻子は全て同一の牌から構成されるので、3x9+7=34パターンとなるが、天鳳の牌譜では牌IDを使用しているためどの牌を鳴いたかの情報も必要で、34x3=102パターンとなる。

5-6ビット目には刻子に含まれない牌添字が設定されている。赤牌ありの場合、ここが0であれば、赤牌以外の3枚で副露したことがわかる。

加槓の場合、刻子に含まれない牌はすなわちカンの時に加えた牌である。

ToDo: パターンについては要検討。

北抜きの場合

2, 3, 4bit目がすべて0で、5bit目が1の場合。

BIT マスク Value
0-1 (未使用)
2 0x0004 0 (必ず0。)
3 0x0008 0 (必ず0。)
4 0x0010 0 (必ず0。)
5 0x0020 1 (必ず1。)
6-7 (未使用)
8-15 0xFF00 抜いた牌のID
暗槓あるいは大明槓の場合

2, 3, 4, 5bit目がすべて0の場合である。

BIT マスク Value
0-1 0x0003 誰から鳴いたか。0: 鳴きなし、1: 下家、2: 対面、3: 上家。
2 0x0004 0 (必ず0。)
3 0x0008 0 (必ず0。)
4 0x0010 0 (必ず0。)
5 0x0020 0 (必ず0。)
6-7 (未使用)
8-15 0xFF00 槓子のパターン

槓子のパターンは、すべて同一の牌から構成され、どの牌を鳴いたかの情報を加えると、(3x9+7)x4=136パターンとなる。

ToDo: パターンについては要検討。

DORA

<DORA hai="52" />

槓ドラ。明槓・加槓はツモの後、暗槓の場合は鳴きの後。

BYE

<BYE who="0" />

接続切れで退室。whoは退室したユーザーを表す。

UN

<UN n0="%E5%83%8D%E3%81%8D%E3%81%9F%E3%81%8F%E3%81%AA%E3%81%84" />

接続切れから復活した場合。

AGARI

<AGARI ba="0,1" hai="57,58,59,63,64,69,77,82,86,88,95,97,125,127" machi="69" ten="30,5900,0" yaku="1,1,0,1,52,1,54,1,53,0" doraHai="91" doraHaiUra="99" who="1" fromWho="1" sc="350,-39,340,69,350,-20,0,0" />

誰かが和了したことを示す。ダブロンなど、2つ発生することもある。

ba

場に出ている点棒を表す カンマ区切りの整数で、ba[0]が百点棒(本場)、ba[1]がリーチ棒を表す。

hai

和了した時の手牌。和了牌も含まれている。 カンマ区切りの整数で牌IDを表す。

m

副露があるときのID カンマ区切りの整数でNのmに同じ

machi

和了牌

ten

点数に関する情報 カンマ区切りの整数で、ten[0]が符、ten[1]が和了点を表す。 ten[2]は和了ランクを表し、以下

ten[2] 内容
0 なし
1 満貫
2 跳満
3 倍満
4 三倍満
5 役満
yaku

役について。[役A,役Aの翻数,役B,役Bの翻数,役C,役Cの翻数]。 役満はyakuman属性に記述される。

var YAKU=[
    //// 一飜
    "門前清自摸和","立直","一発","槍槓","嶺上開花",
    "海底摸月","河底撈魚","平和","断幺九","一盃口",
    "自風 東","自風 南","自風 西","自風 北",
    "場風 東","場風 南","場風 西","場風 北",
    "役牌 白","役牌 發","役牌 中",
    //// 二飜
    "両立直","七対子","混全帯幺九","一気通貫","三色同順",
    "三色同刻","三槓子","対々和","三暗刻","小三元","混老頭",
    //// 三飜
    "二盃口","純全帯幺九","混一色",
    //// 六飜
    "清一色",
    //// 満貫
    "人和",
    //// 役満
    "天和","地和","大三元","四暗刻","四暗刻単騎","字一色",
    "緑一色","清老頭","九蓮宝燈","純正九蓮宝燈","国士無双",
    "国士無双13面","大四喜","小四喜","四槓子",
    //// 懸賞役
    "ドラ","裏ドラ","赤ドラ"
];
yakuman

役満の種類。複合役満の場合、カンマ区切りの整数 役満のときのみ存在。

doraHai

ドラ牌。複数ある場合はカンマ区切りの整数

doraHaiUra

裏ドラ牌。複数ある場合はカンマ区切りの整数。存在しないときは省略される。

who

誰が和了したか。

fromWho

誰が放銃したか。ツモ和了の場合whoと一致する。

sc

点数。カンマ区切りの符号付き整数。

[Aさんの点数, Aさんの変動,Bさんの点数,Bさんの変動,……,Dさんの変動]。

この点数は変動が反映される前の点数となっている

owari

終局を示す。

点数。カンマ区切りの符号付き整数。

[Aさんの点数, Aさんのスコア,Bさんの点数,Bさんのスコア,……,Dさんのスコア]

スコアにはウマが含まれている。

RYUUKYOKU

<RYUUKYOKU ba="1,1" sc="71,-10,409,-10,560,20,0,0" hai2="45,50,54,64,69,72,78,83,91,92,97,105,107" />
ba

場に出ている点棒を表す。

カンマ区切りの整数で、ba[0]が百点棒(n本場)、ba[1]がリーチ棒を表す。

sc

点数。カンマ区切りの符号付き整数。

[Aさんの点数, Aさんの変動,Bさんの点数,Bさんの変動,……,Dさんの変動]。

この点数は変動が反映される前の点数となっている

hai[0-3]

流局によって手牌が公開される場合の牌。カンマ区切りの整数。

副露したものは示されない。

聴牌したプレイヤーもしくは九種九牌のプレイヤーのみ表示。

type

流局の種類 通常の流局以外の場合存在

type 流局
yao9 九種九牌
reach4 四家立直
ron3 三家和了
kan4 四槓散了
kaze4 四風連打
nm 流し満貫
owari

終局を示す。

点数。カンマ区切りの符号付き整数。

[Aさんの点数, Aさんのスコア,Bさんの点数,Bさんのスコア,……,Dさんのスコア]

スコアにはウマが含まれている。

牌ID

それぞれの牌は0 - 135のIDが割り当てられている。

0-3は1m、4-7は2mといった具合。順序は萬子→筒子→索子→東南西北白發中。

赤ありの場合、赤はmod4で0となる牌(16,52,88)に割り当てられている。

hai = ["一", "二", "三", "四", "五", "六", "七", "八", "九", #萬子
       "①", "②", "③", "④", "⑤", "⑥", "⑦", "⑧", "⑨", #筒子
       "1", "2", "3", "4", "5", "6", "7", "8", "9", #索子
      "東", "南", "西", "北", "白", "發", "中"]
return hai[id >> 2]