JRAウェブサイトのレース結果画面のクエリパラメータ
JRAのサイトはいろいろスクレイピング対策が行われていて、例えば、レース結果とかだと以下のURLになる。
https://www.jra.go.jp/JRADB/accessS.html
このURLに直接アクセスすると
多分パラメータエラーと表示されていると思う。
しかもこのURL、各レースごとの画面を遷移しても常にこのURLになるという凝った作り。
各レースごとのURLはこんな感じ。
https://www.jra.go.jp/JRADB/accessS.html?CNAME=pw01sde1004202303080120230903/AE
上記のようなクエリパラメータを付与するようになっている。でこのURLはいきなりアクセスできる。
おそらくレース結果は検索でキャッシュされてもいい、というかむしろキャッシュされることを期待しているのだと思う。
この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目の値さえ取ってくれば後はロジックで生成できそう。