見出し画像

牌譜のダウンロードの方法

 今日はアメーバブログの「現代麻雀理論」で公開していた記事を再録する。
 内容は「天鳳の牌譜をダウンロードする方法」について。


 今回は、最近(筆者注、2014年頃)ちょくちょく来ている

「天鳳の牌譜回収データの譲渡の依頼」
「天鳳の牌譜回収プログラムの譲渡、記事の作成の依頼」

についてコメントする。


 しばらく前(筆者注、元の記事を書いたころなので2014年頃)、「牌譜をいただきたい」旨のコメントを頂戴した。

 天鳳の鳳凰卓の牌譜をダウンロードするのはかなりの骨である。
 牌譜解析研究をする上での一つの参入障壁になることは間違いない。

 私のスタンスは(筆者注、2014年における私のスタンス、現在は特段の事情のない限り牌譜を提供することはしない)「天鳳の鳳凰卓をダウンロードしたものを圧縮して公開する予定がないわけではない」が、その優先順位はかなり低い。
 理由は、

「現在やるべきことが多すぎて、そこまで手が回らないから」
「ネット上の置き場がないから」

である。
 よって、「牌譜くれ」と言われても、「差し上げることができない」というのが現状である。


 そこで、代案として「牌譜回収プログラムをくれ」という依頼をしてくることがある。
 または、「牌譜回収のための記事を書いてくれ」というのもそれにあたる。
 ただ、単に「牌譜回収までの道筋を書いたメモ書きを作る」のと「それをブログ上の記事として整備する」のでは、コストが倍近く違う。
 というわけで、そう簡単にはできない。

 そこで、「牌譜回収までの道筋を書いたメモ書き」をここに置いておくことにする。
 牌譜回収をしたいと思う人は、ここに書かれたメモ書きを参考にプログラムを組んでほしい。

 ちなみに、私自身も「自動牌譜回収プログラムの作り方」をenecreさんという方から教わった。
 その人の作成したメモ書きによると、「50行足らずで書ける」そうである。
 もっとも、私のPERLで作った自動牌譜回収プログラムは200行くらいになっているが。


 以下がメモ書きである。
 なお、このメモ書きは私が牌譜回収方法を教えてもらった、enecre氏(twitter @enecre38 氏、URL http://enecre.blog86.fc2.com/ URL名 天鳳引退(キリッ )からいただいたメモを参考にしながら、引用しながら私が書いたものである(ただし、文責はすべて私にある)。
 よって、このメモ書きを読むものは、enecre氏にも感謝するように
 それが出来ないものの閲覧は禁止する。
 では、メモ書きを掲載しよう。


目次
1 最初に
2 言葉の説明
3 手動で一つの天鳳牌譜ファイルをダウンロードする方法
4 自動で大量の天鳳牌譜ファイルをダウンロードする方法


1 最初に
 天鳳では次の行為は明示的に許可されている。

「ログ一覧ファイルの自動ダウンロード」、
「天鳳位の牌譜のダウンロード」、
「ログ一覧ファイルからリンクを辿っての鳳凰卓の牌譜への手動アクセス」 

 しかし、「ログ一覧ファイルからリンクを辿っての鳳凰卓の牌譜への自動アクセス」を許可している文章を見つけられていない(筆者注、2014年時点、ただ、状況を見るに「原則として禁止されている」わけではない)。
 そのため、「ログ一覧ファイルからリンクを辿っての鳳凰卓の牌譜への自動アクセス」については自己責任にて行うこと。
 また、ダウンロードと牌譜解析については研究者倫理・天鳳のルールに反しない範囲で行い、角田氏をして天鳳の牌譜の公開をやめさせる等のことがないようにすること


2 言葉の説明

①「対局id」とは、「2013082321gm-0071-0000-6850ad0c のような文字列のこと」を指す。
②「ログ一覧ファイル」とは、「00:03 | 23 | 四鳳南喰赤- |&nbsp;<a href="http://tenhou.net/0/?log=2013081600gm-00a9-0000-5ddee684">牌譜</a>&nbsp;| AAAAAA(+41.0) BBBBBB(+9.0) CCCCCC(-17.0) DDDDDD(-33.0)」のような行が延々と並んでいるhtmlファイルのことを指す。
③「ログ一覧ファイルid」とは、scc2013081901.htmlのような文字列のことを指す。


3 手動で天鳳牌譜の一つをダウンロードする方法

 手順を説明すると次の通りとなる(以下、enecre氏のメモ引用)

①(webブラウザと、gzip(拡張子は.gz)形式のファイルを解答できるソフトを用意する。) 
② ダウンロードしたい牌譜の対局idを入手する。
③ http://tenhou.net/0/log/?[対局id] をダウンロードする。
④ ダウンロードしたファイルを、gz形式に圧縮する。
⑤ 圧縮したファイルのファイル名から末尾の「.xml.gz」を消す。
⑥ 出来たファイルが、mjlog形式の牌譜である。

<参考> 
 ②について 2013年以前の分については、http://tenhou.net/sc/raw/ の「過去ログ」の「※以下のリンクは大きなファイルのダウンロードが開始します。」のファイル群をダウンロードして解凍すればその年のログ一覧ファイルがすべて手に入るので、sccから始まるものを適当に選び解凍し、テキストエディタで開けば、対局idが見つかる。
 2014年の分は、http://tenhou.net/sc/raw/ の「ログの自動ダウンロードについて」にもあるように、http://tenhou.net/sc/raw/dat/[ログ一覧ファイルid] をダウンロードすれば、あとは2013年以前の分と同じ。


4 自動で大量の天鳳牌譜ファイルをダウンロードする方法

(以下は、enecre氏の書いた文章をそのままコピーアンドペースト)
 基本的に、上の手順をそのまま自動化すれば良い。
(もちろん、「1つ選んで」としていた部分を「全て抽出して」と読み替える必要があるが。) 
 プログラミング言語は、Perl, Python, Ruby, シェルスクリプトのいずれかを使うのが楽だと思われる。
 まず50行未満で書ける。

 ログ一覧ファイルから対局idを抽出する: 正規表現 ログ一覧ファイルの一覧からログ一覧ファイルidを抽出する: 正規表現 または 各行の終わりのカンマを消してjsonライブラリを使用
 .gzで終わるファイルの解凍: [プログラミング言語名] gzip 解凍 でググればすぐに出来る
 ファイルのダウンロード: [プログラミング言語名] http get でググればすぐに出来る
(コピーアンドペースト終了)

 もう少し詳しく説明すると次の通りになる。

① ダウンロードすべき牌譜の対局idリストを作成する
② 対局idリストから一つ対局idを取得する。
③-1 http://tenhou.net/0/log/?[対局id] をダウンロードする。
③-2 ダウンロードしたファイルを、gz形式に圧縮する。
③-3 圧縮したファイルのファイル名から末尾の「.xml.gz」を消す。 ④ ③を対局idリストにある総ての対局idに対して行う。

 それぞれを自動で行うプログラムの書き方は、グーグルで検索すれば見つかる(上のメモの通り、私も同じようにやって見つけた)。


 メモ書きか説明文章か訳の分からないものが出来上がってしまったが、参考にしていただければ幸いである。

 なお、一点だけ注意を。
 私は専業プログラマではない。
 よって、「プログラムのココが分からないんです」と質問されてもなんとも答えられない。
 その場合は、プログラムをそれなりに熟知されている人のところに質問に行くこと(私のところに来るのは勝手だが、「答えられない」と返答されるのがオチである。)


 それでは。

追記、
 どんよく、こと、近藤先生も牌譜ダウンロードに関する記事を書かれていたので、そちらを紹介する。
 つか、こちらの方が分かりやすいかも。


もし気が向いたら、サポートしていただければありがたいです。 なお、サポートしていただいた分は、麻雀研究費用に充てさせていただきます。