Friction River Software

  • お問い合わせ

CakePHP5入門【WebAPI編⑳】ナンバーズ3を予想④

A子

前回コマンドクラスを作って、それをcronクーロン実行するようにしたじゃん

あれで作られたPDFファイルをブラウザで閲覧できるようにしたいんだよね

C菜

Webシステムのトップページからリンクを張って、PDFファイルの一覧ページに到達できるようにするってことでしょうか~?

A子

だね

ただし、一覧は手動で作るんじゃなくて、自動的に取得したいと思ってる
(面倒くさいから…)

B美

特定のディレクトリ内のファイル一覧を取得するには「glob」関数を使えばOKよ
(PDFファイルだけを限定して取得することも可)

A子

おぉ、それそれ

そういうのを待っていた

C菜

それでは「TopController」の中にメソッドを記述しましょう~

あと「templates/Top/index.php」内に上記メソッドへのリンクも~

A子

あっ、そうだ

PDFファイルのファイル名って、「年月日」情報を持つけどさ
加えて「パターン情報(前回のA,B,C)」も持つようにしようよ

C菜

なるほど~
パターンごとの的中率を調べることもできそうです~

numbers3box_20260701B.pdf」って感じにするんですね~?

A子

そういうこと
あ、予想できないとき(スコア有りの数字が4~6個以外の場合)は「X」を末尾に付けよう

んじゃ、「src/Command/Num3boxCommand.php」を修正するね
赤字部分が追加した箇所)

//スコア有無の数で処理を切り分ける
$pattern = '';
$box_set = [];
$scoreMoreCount = count($scoreMore);
$scoreLessCount = count($scoreLess);
if ($scoreMoreCount == 4 && $scoreLessCount == 6) {
    //パターンA
    $pattern = 'A';
    $combi = $this->PermutationAndCombination->combination($scoreLess, 2);
    foreach ($combi as $row) {
        foreach ($scoreMore as $val) {
            array_push($box_set, [$row[0], $row[1], $val]);
        }
    }
} elseif ($scoreMoreCount == 5 && $scoreLessCount == 5) {
    //パターンB
    $pattern = 'B';
    $combi = $this->PermutationAndCombination->combination($scoreMore, 2);
    foreach ($combi as $row) {
        foreach ($scoreLess as $val) {
            array_push($box_set, [$row[0], $row[1], $val]);
        }
    }
} elseif ($scoreMoreCount == 6 && $scoreLessCount == 4) {
    //パターンC
    $pattern = 'C';
    $combi = $this->PermutationAndCombination->combination($scoreMore, 2);
    foreach ($combi as $row) {
        foreach ($scoreLess as $val) {
            array_push($box_set, [$row[0], $row[1], $val]);
        }
    }
}

・・・

if (count($result) == 0) {
    $pattern = 'X';
    $content .=<<<EOF
    <div style="width: 100%;text-align: center;">
        <h3>ボックス値(予想)</h3>
        【{$year}年{$month}月{$day}日】
        <br /><br /><br />
        <span style="color: red;">スコアの状態が予想可能な範囲ではありません。</span>
    EOF;
} else {

・・・

//ファイル名の決定と保存
$fileName = $dir.'numbers3box_'.date('Ymd').$pattern.'.pdf';

・・・

B美

ふむ、良いんじゃない?

C菜

それでは「src/Controller/TopController.php」内に「num3Pdf」メソッドを作って、さらに「templates/Top」の中に「num3_pdf.php」を作りますね~

あ、トップページから上記メソッドへのリンクも~

//コマンドクラスで生成されたPDFファイルの一覧を取得
public function num3Pdf()
{
}

A子

そのメソッドの中身だけど、ChatGPTチャッピー先生に相談しながら作ってみたよ

//コマンドクラスで生成されたPDFファイルの一覧を取得
public function num3Pdf()
{
    $result = [];
    $pdfDir = WWW_ROOT.'pdf'.DS;

    //PDFファイル取得
    $files = glob($pdfDir . '*.pdf');

    foreach ($files as $file) {
        $filename = basename($file);
        $base = pathinfo($filename, PATHINFO_FILENAME);
        $dateCode = substr($base, strlen('numbers3box_'));

        //日付とパターンを取得
        $year = (int)substr($dateCode, 0, 4);
        $month = (int)substr($dateCode, 4, 2);
        $day = (int)substr($dateCode, 6, 2);
        $pattern = substr($dateCode, 8, 1);
        $week = $this->SixSevenWeek::getSeven($year, $month, $day);

        array_push($result, [$year, $month, $day, $week['week_str_short'], $pattern, $filename]);
    }

    //ファイル名の降順でソート
    array_multisort(array_column($result, 5), SORT_DESC, $result);

    $this->set(compact('result'));
}

あ、「initialize」メソッド内には次の一文を追加したよ

$this->loadComponent('SixSevenWeek');


C菜

ファイル名の降順ということは、最新のものが先頭にくるわけですね~

それでは、私のほうでビューファイルを記述してみます~


A子

んじゃ、実行確認してみよう

ちなみに、「表示」をクリックすると別画面にPDFファイルが表示される

C菜

2026年7月2日の予想(PDFファイル)が以下の表示です~

このときの抽選結果(当選番号)は「768」だったので、ボックスでは見事的中しましたよ~
(順位2位の値を確認してください~)

B美

ボックス値一つはストレート六つに該当するんだから、7月2日の60個のボックス値(パターンAなので…)をストレート換算すると360個分…
1000通りの中の360通りは的中確率の理論値としては36%にもなるわね

そりゃ当たるでしょ(苦笑)
(3回に1回は当たるってことだし…)

A子

でも上位10個の中に入ってるってのは、ちょっとすごいんじゃない?

B美

たまたまでしょ

現に7月1日も50個の予想の中に当選番号はあるけど、第21位だし…
(あと7月3日については、完全にはずれてるわ)

A子

むー、夢が無いやつ…

ロマンを追い求めるって言葉を知らないのかよ

C菜

まぁまぁ、とにかく実験データを大量に取得してみないと妥当性の検証はできないですよ~

しばらくは(この予想処理を)放置しておきましょう~

B美

読者の皆さん、ここまでの会話で分かるようにこの「予想処理」って単なる実験だからね
(これをあてにして宝くじを購入してから、はずれちゃって文句を言わないように!)

ちなみに的中確率の理論値は

・上位10通りを購入 → 6%
・パターンA(60通り)を全て購入 → 36%
・パターンB(50通り)を全て購入 → 30%
・パターンC(60通り)を全て購入 → 36%

となるわ

この「実験」で検証したいのは、これらの理論値が実際にはどこまで変化することになるか…ってことよ
(的中確率の多少の向上が見られると良いんだけどね(苦笑))

A子

引っ張り」理論を使ってるんだし、絶対に理論値よりは高くなると思うけどね
(逆に、そうならなければ大ショックだよ)

C菜

とりあえず、7月分(23日分)の統計は取りたいですね~

楽しみです~