競馬について徒然と

競馬について適当に書きます. ちょっとtech系風味も入れて.

JRAウェブサイトのレース結果画面のクエリパラメータ

JRAのサイトはいろいろスクレイピング対策が行われていて、例えば、レース結果とかだと以下のURLになる。

https://www.jra.go.jp/JRADB/accessS.html

このURLに直接アクセスすると

www.jra.go.jp

多分パラメータエラーと表示されていると思う。

しかもこのURL、各レースごとの画面を遷移しても常にこのURLになるという凝った作り。

各レースごとのURLはこんな感じ。

https://www.jra.go.jp/JRADB/accessS.html?CNAME=pw01sde1004202303080120230903/AE

上記のようなクエリパラメータを付与するようになっている。でこのURLはいきなりアクセスできる。

www.jra.go.jp

おそらくレース結果は検索でキャッシュされてもいい、というかむしろキャッシュされることを期待しているのだと思う。

このCNAMEというやつだけども、どういう法則があるのか見てみた。

pw01sde1004202303080120230903

まず最初はよくわからない。

pw01sde10

で、その次。これは競馬場コード。JRA−VANと同じ。

04

こうなってるので、上の例だと新潟。

"01": "札幌"
"02": "函館"
"03": "福島"
"04": "新潟"
"05": "東京"
"06": "中山"
"07": "中京"
"08": "京都"
"09": "阪神"
"10": "小倉"

次が年次。

2023

回次。

03

日次

08

レース番号

01

次が日付

20230903

で問題はこれ

/AE

これがちょっとよくわからない。

でChatGPTに色々聞く中で、これは「カウンター」なのではないか?という仮説を立てた。9月3日の新潟の1〜12Rについて聞いてみた。

User: これを一種のカウンターと考えればいいのではないでしょうか。FFまで来たら00に戻ってまたインクリメントする。

AI: はい、その通りです。16進数の範囲 00 から FF をカウンターとして考えると、それは0から255までの256通りの値をカウントする循環カウンターとして機能します。FF の次にインクリメントすると、カウンターは00 に戻り、再びインクリメントが開始されます。このようなカウンターは、循環的な動作やリセット機能を持つシステムでよく使用されます。

例えば、デジタル時計の分の部分は60までカウントして0に戻る循環カウンターとして機能します。同様に、16進数の 00 から FF の範囲も、256のサイクルで循環するカウンターとして考えることができます。

User: はい、でそのカウンターの概念で考えた場合に以下の数値の差異は出せますか?

AE
63
18
CD
82
37
EC
A1
56
4B
00
B5

AI: 了解しました。16進数の範囲 00 から FF をカウンターとして考える場合、与えられた16進数のリストの各値間の差異を計算します。

以下の手順で計算します:

各16進数を10進数に変換します。
隣接する値の差を計算します。もし結果が負の場合、256を加算して正の差異を得ます(これはカウンターが循環するためです)。
計算を行います:

AE (174) から 63 (99) への差異: 99 - 174 + 256 = 181
63 (99) から 18 (24) への差異: 24 - 99 + 256 = 181
18 (24) から CD (205) への差異: 205 - 24 = 181
CD (205) から 82 (130) への差異: 130 - 205 + 256 = 181
82 (130) から 37 (55) への差異: 55 - 130 + 256 = 181
37 (55) から EC (236) への差異: 236 - 55 = 181
EC (236) から A1 (161) への差異: 161 - 236 + 256 = 181
A1 (161) から 56 (86) への差異: 86 - 161 + 256 = 181
56 (86) から 4B (75) への差異: 75 - 86 + 256 = 245
4B (75) から 00 (0) への差異: 0 - 75 + 256 = 181
00 (0) から B5 (181) への差異: 181 - 0 = 181
結果として、ほとんどの16進数のペア間の差異は181となっていますが、9番目のペア (56と4B) の差異は245となっています。

でこれをいくつかの日、競馬場で確認してみると、すべてこの法則になっていた。10Rだけがちょっと違う。

となると、あとは1R目がどういう風に生成されているか?が分かれば機械的に生成できる。ただ、これはちょっと分からなかった。唯一わかったのは、

User: 2023年3回新潟7日目1R: 34
2023年3回新潟8日目1R: 64
2023年3回小倉7日目1R: 66
2023年3回小倉8日目1R: 96
2023年3回札幌7日目1R: 25
2023年3回札幌8日目1R: 55
提供していただいたデータをもとに、1レース目の16進数の値のロジックを考察します。

まず、各競馬場ごとの7日目と8日目の1Rの16進数の値の差を計算してみます。

新潟:64 - 34 = 30
小倉:96 - 66 = 30
札幌:55 - 25 = 30
すべての競馬場で7日目と8日目の差が30となっています。

次に、異なる競馬場間での8日目の1Rの16進数の値の差を考察します。

新潟と小倉:96 - 64 = 32
新潟と札幌:55 - 64 = -15(これは256をベースとしたモジュロ計算を考慮すると、241となります。)
この情報から、以下の仮説を立てることができます:

同じ競馬場での連続する日の1Rの16進数の値の差は一定(この場合、30)である。
異なる競馬場間での差は一定ではないが、何らかの法則性やパターンが存在する可能性がある。
具体的なロジックや法則性を特定するためには、さらに多くのデータや、この16進数の値を生成するシステムの背景情報が必要となります。しかし、上記の仮説をもとに、さらなるデータの分析や推測を行うことができます。

同じ競馬場で土曜と日曜で一定の法則はある模様。

2週に広げてみた。

User: もう少し検証してみましょう。

2023年3回新潟3日目1R: BC
2023年3回新潟4日目1R: E4
2023年3回新潟5日目1R: C5
2023年3回新潟6日目1R: F5
2023年3回新潟7日目1R: 34
2023年3回新潟8日目1R: 64

AI: 提供していただいた2023年の新潟競馬場のデータをもとに、1レース目の16進数の値の差を計算してみます。

3日目から4日目:E4 - BC = 28
4日目から5日目:C5 - E4 = -1F(これは256をベースとしたモジュロ計算を考慮すると、237となります。)
5日目から6日目:F5 - C5 = 30
6日目から7日目:34 - F5 = -C1(これは256をベースとしたモジュロ計算を考慮すると、35となります。)
7日目から8日目:64 - 34 = 30
この結果から、以下の観察ができます:

ほとんどの日において、連続する日の1Rの16進数の値の差は30となっています。これは以前のデータと一致しています。
しかし、4日目から5日目、および6日目から7日目の差は30ではありません。これは、何らかの特別な事情や例外が存在する可能性を示唆しています。
特定の日や条件において、16進数の値の差が一定でない理由を特定するためには、さらに詳しい背景情報や、他の関連するデータが必要となるでしょう。しかし、大まかな法則性やパターンとして、連続する日の1Rの16進数の値の差が大体30であることは確認できます。

うーむ、週ごとに一定の法則はあるけれども、連続しているわけではなさそう。

現時点では、各週・各競馬場ごとの1R目の値さえ取ってくれば後はロジックで生成できそう。