大会の情報と牌譜一覧をファイルに保存するにゃ

Last-modified: 2024-04-17 (水) 20:12:14
 

概要

雀魂の大会の情報と、大会の牌譜一覧を簡単にファイル保存する方法にゃ!
牌譜一覧さえファイル保存しておけば、いつでも牌譜鑑賞ができるにゃ!
牌譜をファイルに保存するにゃ」のページの方法を使えば、大会の牌譜をダウンロードすることもできるにゃ!

 

準備するもの

  • パソコン
  • 雀魂アカウント(ウェブブラウザ版のアカウントで動作確認済みにゃ!DMM版でも動くかは不明にゃ!)
  • ウェブブラウザ(Chrome と Firefox で動作確認したにゃ!)

以上にゃ!

 

保存方法

 

1. 「牌譜をファイルに保存するにゃ」のページの1~3の方法にしたがって、デベロッパーツールのコンソールを開くにゃ!

 

2. 雀魂にログインするにゃ!

 

3. 下記のコードをコンソールにコピペして、エンターキーを押すにゃ!

function taikai(contestId = "") {
    if (!contestId) {
        contestId = prompt("大会IDを入力してください。 / Please Enter a contest ID.");
    }
    if (!contestId) {
        return;
    }
    function download(data, fileName) {
        let a = document.createElement("a");
        a.href = URL.createObjectURL(
            new Blob([JSON.stringify(data, null, "  ")],
            {type: "text/plain"}));
        a.download = fileName;
        a.style.display = "none";
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
    }
    function sleep(msec) {
        return new Promise(function(resolve) {setTimeout(function() {resolve();}, msec);});
    }
    function getContestDetail(contestId, uniqueId) {
        app.NetAgent.sendReq2Lobby(
            "Lobby",
            "enterCustomizedContest",
            {unique_id:uniqueId},
            function(error, contestDetail) {
                download(contestDetail, "mahjongsoul_contest_" + contestId + "_detail.txt");
            });
    }
    async function getContestRecords(contestId, uniqueId) {
        let uuidArray = new Array();
        let loopEndFlag = false;
        for (let i = 20;; i += 20) {
            app.NetAgent.sendReq2Lobby(
                "Lobby",
                "fetchCustomizedContestGameRecords",
                {unique_id:uniqueId, last_index:i},
                function(error, contestRecords) {
                    if (contestRecords.record_list.length == 0) {
                        loopEndFlag = true;
                        return;
                    }
                    for (const record of contestRecords.record_list) {
                        uuidArray.push(record.uuid);
                        console.log(i + " データ取得中 / Downloading");
                    }
                });
            if (loopEndFlag) {
                break;
            }
            await sleep(1000);
        }
        download(uuidArray, "mahjongsoul_contest_" + contestId + "_uuid_list.txt");
    }
    app.NetAgent.sendReq2Lobby(
        "Lobby",
        "fetchCustomizedContestByContestId",
        {contest_id:contestId},
        function(error, contestInfo) {
            uniqueId = contestInfo.contest_info.unique_id;
            getContestDetail(contestId, uniqueId);
            getContestRecords(contestId, uniqueId);
        });
}
 

4. コンソールに

taikai()

と入力して、エンターキーを押すにゃ!

 

5. 「大会IDを入力してください。」と表示されるにゃ!
ここに雀魂の大会IDを入力するにゃ!
大会IDは、雀魂の大会ロビーに行けば見られるにゃ!
大会IDを入力したら「OK」ボタンを押すにゃ!

 

6. 以上で、大会の情報ファイルと、大会の牌譜一覧ファイルがダウンロードされるにゃ!
大会の対局がたくさんある場合は、データの取得に時間がかかるにゃ!
ダウンロードが完了するまで待つにゃ!
ダウンロードしたファイルは「メモ帳」などのテキストエディタで開いて、中身を確認できるにゃ!
大会の情報ファイルには、大会の説明文や、大会のルールが記されているにゃ!
大会の牌譜一覧ファイルには、各対局の固有IDが並んでいるにゃ!
雀魂の牌譜画面の「その他の牌譜」欄にこのIDを入力すれば、牌譜鑑賞ができるにゃ!
牌譜をファイルに保存するにゃ」のページの方法にしたがえば、牌譜ファイルをダウンロードすることもできるにゃ!
なお、IDをコピペするときには、ダブルクォーテーション(")とカンマ(,)は無視するにゃ!

 

注意

大会終了から時間が経過すると、大会の情報ファイルと牌譜一覧ファイルはダウンロードできなくなるにゃ!
なので、過去の大会のデータをダウンロードすることはできないにゃ!
牌譜一覧ファイルさえ取っておけば、牌譜ファイルは後日ダウンロードすることもできるにゃ!