スマフォ用サイト


スマフォ用サイトのQRコード

7月のカレンダー



1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31


カテゴリ一覧

ただの日記(940)
原付生活(3)
子育て日記(11)
PC関連(11)
もろもろ日記(889)

競馬+POG(1384)
当たらない予想と反省会(702)
POGネタ(58)
競馬について考える(18)
競馬もろもろ(198)
ダービーウィーク!(14)
2011年競馬場訪問記(27)
2012年競馬場訪問記(53)
2013年競馬場訪問記(61)
2014年競馬場訪問記(40)
2015年競馬場訪問記(44)
2016年競馬場訪問記(25)
2017年競馬場訪問記(36)
2018年競馬場訪問記(39)
2019年競馬場訪問記(34)
2020年競馬場訪問記(24)
2021年競馬場訪問記(2)
ひとくち馬主(3)

ホームページ製作(356)
PHPの備忘録(13)
CSSの備忘録(5)
JavaScriptの備忘録(2)
ホームページもろもろ(278)
Flashの備忘録(12)
管理人の備忘録(19)
スマフォ用サイト作成(19)

自宅サーバ(350)
FreeBSD(17)
Apache(4)
PHP(5)
MySQL(16)
サーバもろもろ(138)
障害連絡(129)
リニューアルプロジェクト 2011-2012(41)

お仕事(48)
お仕事(48)

旅の記録・水曜どうでしょう関連(43)
水曜どうでしょう(11)
2009年四国お遍路(6)
2009年アンコールワット(5)
2010年ベトナム(3)
2010年いっそ九州(5)
2010年北海道179市町村(5)
2011年春の一人旅(2)
2011年四国お遍路(6)


先月までのネタ

2021年
2021年2月(7)
2021年1月(2)

2020年
2020年12月(8)
2020年11月(3)
2020年10月(4)
2020年9月(1)
2020年8月(2)
2020年7月(7)
2020年6月(6)
2020年5月(9)
2020年4月(11)
2020年3月(8)
2020年2月(5)
2020年1月(9)

2019年
2019年12月(4)
2019年11月(5)
2019年10月(7)
2019年9月(2)
2019年8月(2)
2019年7月(8)
2019年6月(2)
2019年5月(3)
2019年4月(2)
2019年3月(4)
2019年2月(3)
2019年1月(1)

2018年
2018年12月(8)
2018年11月(5)
2018年10月(10)
2018年9月(6)
2018年8月(1)
2018年7月(7)
2018年6月(5)
2018年5月(7)
2018年4月(19)
2018年3月(3)
2018年2月(3)
2018年1月(11)

2017年
2017年12月(14)
2017年11月(11)
2017年10月(18)
2017年9月(18)
2017年8月(21)
2017年7月(29)
2017年6月(26)
2017年5月(23)
2017年4月(18)
2017年3月(11)
2017年2月(11)
2017年1月(16)

2016年
2016年12月(25)
2016年11月(24)
2016年10月(30)
2016年9月(15)
2016年8月(16)
2016年7月(15)
2016年6月(18)
2016年5月(30)
2016年4月(28)
2016年3月(29)
2016年2月(26)
2016年1月(32)

2015年
2015年12月(30)
2015年11月(29)
2015年10月(30)
2015年9月(27)
2015年8月(28)
2015年7月(28)
2015年6月(28)
2015年5月(29)
2015年4月(30)
2015年3月(28)
2015年2月(26)
2015年1月(29)

2014年
2014年12月(31)
2014年11月(28)
2014年10月(31)
2014年9月(29)
2014年8月(29)
2014年7月(31)
2014年6月(31)
2014年5月(30)
2014年4月(30)
2014年3月(28)
2014年2月(27)
2014年1月(31)

2013年
2013年12月(29)
2013年11月(27)
2013年10月(29)
2013年9月(27)
2013年8月(28)
2013年7月(28)
2013年6月(29)
2013年5月(29)
2013年4月(30)
2013年3月(26)
2013年2月(24)
2013年1月(29)

2012年
2012年12月(28)
2012年11月(27)
2012年10月(28)
2012年9月(30)
2012年8月(31)
2012年7月(33)
2012年6月(32)
2012年5月(33)
2012年4月(35)
2012年3月(30)
2012年2月(27)
2012年1月(31)

2011年
2011年12月(25)
2011年11月(25)
2011年10月(28)
2011年9月(28)
2011年8月(28)
2011年7月(28)
2011年6月(27)
2011年5月(26)
2011年4月(16)
2011年3月(9)
2011年2月(11)
2011年1月(9)

2010年
2010年12月(12)
2010年11月(11)
2010年10月(8)
2010年9月(13)
2010年8月(10)
2010年7月(20)
2010年6月(6)
2010年5月(9)
2010年4月(2)
2010年3月(3)
2010年2月(5)
2010年1月(8)

2009年
2009年12月(9)
2009年11月(2)
2009年10月(4)
2009年9月(3)
2009年8月(1)
2009年7月(9)
2009年6月(3)
2009年5月(14)
2009年4月(10)
2009年3月(11)
2009年2月(9)
2009年1月(10)

2008年
2008年12月(1)
2008年11月(1)
2008年10月(1)
2008年9月(5)
2008年8月(1)
2008年7月(1)
2008年6月(2)
2008年5月(1)
2008年4月(1)
2008年3月(2)
2008年2月(7)
2008年1月(7)

2007年
2007年12月(11)
2007年11月(7)
2007年10月(8)
2007年9月(12)
2007年8月(11)
2007年7月(5)
2007年6月(16)
2007年5月(8)
2007年4月(2)
2007年3月(14)
2007年2月(2)
2007年1月(8)

2006年
2006年12月(4)
2006年11月(6)
2006年10月(7)
2006年9月(10)
2006年8月(9)
2006年7月(20)
2006年6月(13)
2006年5月(3)

2005年
2005年9月(13)
2005年8月(13)
2005年7月(18)
2005年6月(24)
2005年5月(26)
2005年4月(26)
2005年3月(27)
2005年2月(22)
2005年1月(26)

2004年
2004年12月(29)
2004年11月(29)
2004年10月(26)
2004年9月(23)
2004年8月(12)


最近のコメント



本日は笠松競馬場へ行ってきました。(あいべ)

管理人の今年の目標が一つ増えました…。(あああ)

まあそんなに書くことはありませんが…。(momo)

【管理人からご挨拶】 『The Sunday Breeze』は5月25日に開設19周年を迎えます。(アオヤギ)

4月からスタートする「Sunday Breeze POG!」の一部ルール追加について。(アオヤギ)

昨日「Sunday Breeze賞」の観戦に帯広競馬場へ行ってきました。(白イチゴ)

本日5月25日、「The Sunday Breeze」は18回目の誕生日を迎えました。(アオヤギ)

【「G1予想大会」プレリリース終了】皆様のご協力、本当にありがとうございました。(アオヤギ)

【再度お知らせとお願い】今週からの「G1予想大会」、新機能プレリリースを公開中です。(白イチゴ)

2015年、新年明けましておめでとうございます(去年の目標を振り返り、今年の目標を!) (アオヤギ)



ネタの検索



管理人の競馬観戦記録


(2020年〜)

JRA福島競馬場
11月7日

JRA新潟競馬場
10月24日
10月25日

JRA東京競馬場
11月8日 (AR共和国杯)

JRA中山競馬場
1月5日 (中山金杯)
12月19日 (ターコイズS)

JRA中京競馬場
12月12日 (中日新聞杯)

JRA阪神競馬場
12月13日 (阪神ジュベナイルF)

帯広競馬場
7月27日

盛岡競馬場
9月6日 (不来方賞)

水沢競馬場
12月7日 (北上川大賞典)

浦和競馬場
12月25日

船橋競馬場
1月8日 (船橋記念)
2月14日

大井競馬場
11月2日

川崎競馬場
12月16日 (全日本2歳優駿)

笠松競馬場
12月14日

名古屋競馬場
1月31日

園田競馬場
10月30日 (兵庫クイーンC)

姫路競馬場
1月30日 (白鷺賞)
2月24日

高知競馬場
1月29日
10月4日
2月23日

佐賀競馬場
1月31日 (球磨川賞)

2012年以降の競馬観戦インデックス


管理人の競馬家計簿


(最近14日分)

2021年2月18日大井
10勝  回収率:0.0%

2021年2月19日大井
52勝  回収率:164.4%

2021年2月21日東京
71勝  回収率:33.8%

2021年2月21日小倉
61勝  回収率:26.5%

2021年2月23日浦和
10勝  回収率:0.0%

2021年2月23日高知
105勝  回収率:73.0%

2021年2月24日姫路
91勝  回収率:24.3%

2021年2月25日姫路
63勝  回収率:148.5%

2021年2月25日佐賀
41勝  回収率:107.0%

2021年2月28日中山
20勝  回収率:34.4%

2021年2月28日阪神
10勝  回収率:0.0%

2021年2月28日小倉
10勝  回収率:0.0%

2021年2月28日高知
40勝  回収率:5.1%

2021年2月28日佐賀
21勝  回収率:82.9%

2021年合計
20459
勝率:28.9%  回収率:57.8%
(万馬券:0本的中)

2020年合計
3046684
勝率:22.5% 回収率:65.2%
(万馬券:39本的中)

2019年合計
1438346
勝率:24.1% 回収率:68.2%
(万馬券:39本的中)

2018年合計
1488367
勝率:24.7% 回収率:75.1%
(万馬券:39本的中)

2017年合計
881163
勝率:18.5% 回収率:69.8%
(万馬券:36本的中)

2016年合計
1520346
勝率:22.8% 回収率:68.6%
(万馬券:41本的中)

2015年合計
2014422
勝率:21.0% 回収率:67.2%
(万馬券:51本的中)

2014年合計
1733371
勝率:21.4% 回収率:67.0%
(万馬券:33本的中)

2013年合計
1716328
勝率:19.1% 回収率:76.6%
(万馬券:25本的中)

2012年合計
1206236
勝率:19.6% 回収率:72.5%
(万馬券:9本的中)

2011年合計
90988
勝率:9.7% 回収率:38.1%
(万馬券:8本的中)


管理人のつぶやき


(皆様のフォローをお願いします。)

@sunday_breeze からのツイート

Excel VBAで「SPAT4自動投票システム」を作ってみました。

最初に書いておきます。

・このプログラムで何か問題が起きても、管理人は責任を負いません
 馬券購入についても当然ですが各個人の問題です。文句言わないでください。

・ある程度の知識がある方を前提にしています。
 プログラムの内容についての質問等にはあまり答える気はありません
 わからないことがあれば、各個人でググって調べてください。

・自由に改変とかしてください。これで商売されるのも勝手にやってください。
 ただ何の責任もとりません
 ブログなどで紹介するなら『「The Sunday Breeze」のやつを参考にした』程度でも
 ひとこと書いてもらえると嬉しいです。強制ではないです。

-----

さて。
JRAのインターネット投票システム「iPAT」には
自動で投票済ませてくれるプログラムがあるんですが
地方競馬用の投票システム(SPAT4、オッズパーク、楽天競馬)には
ネットを探す限り、自動で投票してくれるシステムはないようです。

ということで、今回簡単ではありますが
管理人が長く使っている「SPAT4」で自動投票してくれるプログラムを組みました。

---

基本的な動作と前提条件

・管理人はVBで作っていますが、単独exeで動くかOfficeベースで動くかの違いなので
 ExcelのVBAでも動作すると思います。Excelのバージョンによっては使えません。
 もしかしたらVB.netでも使えるのかな?(未確認)

InternetExplorerを使います。Windows10ではオプションでインストールできます。

・当たり前ですが、予想はしません
 予想(買い目)をフォーマットに従ってテキストファイルに書いておくことが前提です。

・公開するソースは「3連複」「3連単」「ワイド」の「フォーメーション」のみを対応としていますが
 ほかの券種や買い方も簡単に追加できると思います。
 必要な方はご自由に直してください。

・事前にSPAT4への入金はしておいてください(残高不足で投票できないだけですが)

---

こういう予想ファイルを作りましょう。
コース名、レース番号、券種、馬1(ハイフンでつなげる)、馬2、馬3、1点当たりの金額(100円単位)をカンマ区切りで。
同じ形式で複数行記入できます。違う競馬場でも違うレースでも違う券種でも、いっぺんに投票できます。

高知,12,三連複,05,03-06-09,01-02-03-07-09-10-11-12,1
帯広,9,ワイド,05,03-06-09,,2


この場合、1行目は
高知12レースの3連複で
馬1(1列目)が5、馬2(2列目)が3,6,9、馬3(3列目)が1,2,3,7,9,10,11,12で
各100円ずつの購入。

2行目は帯広9レースのワイドの場合
馬1(1列目)に5、馬2(2列目)に3,6,9
馬3がないので、値を入れずにカンマが続くように書きます。
この場合は各200円ずつ(計600円ですかね)

---

最初にInternetExplorerをVBAの中で使える設定をしましょう。

メニューの[ツール]から[参照設定]を開いて
・Microsoft HTML Object Library
・Microsoft Internet Controls
を探してチェックを入れましょう。



それと、ソースの一番最初に次のように書いておきましょう。
Windowsで提供されている標準の関数を使う準備です。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const WM_COMMAND As Long = &H111&


---

ではプログラムをぶつ切りで書いていきます。
最終的につなげれば、動くはずです。


まずは予想ファイルを読み込みます。
「c:\temp」に「votedata_なんとか.csv」という名前で保存している例です。
複数ファイルがあってもいいように、ループさせます。

strPath = "c:\temp\"
strFile = Dir$(strPath & "votedata_*.csv")

Do While strFile <> "" ’ ここからループ1(ファイルがあるだけループ)
 fileNo = FreeFile
 Open strPath & strFile For Input As #fileNo



InternetExplorerを開きます。

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.navigate "https://www.spat4.jp/keiba/pc"


ページが完全に表示されるまで待機。

Do While objIE.Busy = True Or objIE.readyState <> 4
 DoEvents
Loop





ここで、HTMLのソースを見ればわかりますが
ログインフォーム全体が「LOGIN」
加入者番号は「MEMBERNUMR」、利用者IDは「MEMBERIDR」と名前がついています。
それぞれ値を入れて、ログインボタンを押しましょう。

objIE.document.LOGIN.MEMBERNUMR.Value = "01234567"
objIE.document.LOGIN.MEMBERIDR.Value = "12345678"
objIE.document.LOGIN.submit


ページが完全に表示されるまで待機。

Do While objIE.Busy = True Or objIE.readyState <> 4
 DoEvents
Loop
sleep 2000 ’ 念のため2秒待機





ボタンが並んでいる中から、「投票入力」と書かれているボタンを選んでクリックします。

For Each objTag In objIE.document.getElementsByTagName("input")
 If InStr(objTag.outerHTML, "投票入力") > 0 Then
  objTag.Click
  Exit For
 End If
Next


ページが完全に表示されるまで待機。

Do While objIE.Busy = True Or objIE.readyState <> 4
 DoEvents
Loop
sleep 2000 ’ 念のため2秒待機





このページはフレーム構成になっていて
上の黄色が0、赤が左から1,2,3、下の黄色が4
使うのは1,2,3ですかね。

フレームを分割します。

Set objFrame = objIE.document.frames


最後の金額入力の準備だけしたら
予想ファイルから1行ずつ見ていきますかね。

Dim Kingaku As Integer
Kingaku = 0
Do While Not EOF(fileNo) ’ ここからループ2(ファイルの行があるだけループ)
 Line Input #fileNo, buf
 strFileData = Split(buf, ",")



フレーム1(左の赤)を見ていきます。
それぞれこういう名前がついています(HTMLにこう書かれています)



まずは「PLACE」というセレクトボックス(コンボボックス)を探して
予想ファイルの1項目目(0)と一致する場名を選択します。
選択したら、JavaScriptのonChangeイベントを実行。
onChangeを実行しないと、レース番号が出てきません。

For Each slt In objFrame(1).document.getElementsByTagName("select")
 If slt.Name = "PLACE" Then
  For Each opt In slt.getElementsByTagName("option")
   If opt.Text = strFileData(0) Then
    opt.Selected = True
    slt.onchange
    Exit For
   End If
  Next
 End If
Next


同じ要領で、次はレース番号。予想ファイルの2項目目(1)

For Each slt In objFrame(1).document.getElementsByTagName("select")
 If slt.Name = "RACE" Then
  For Each opt In slt.getElementsByTagName("option")
   If opt.Text = strFileData(1) Then
    opt.Selected = True
    slt.onchange
    Exit For
   End If
  Next
 End If
Next


続いて式別。予想ファイルの3項目目(2)

For Each slt In objFrame(1).document.getElementsByTagName("select")
 If slt.Name = "SHIKI" Then
  For Each opt In slt.getElementsByTagName("option")
   If opt.Text = strFileData(2) Then
    opt.Selected = True
    slt.onchange
    Exit For
   End If
  Next
 End If
Next


投票方式はフォーメーション固定にしてます。
流しとか追加するなら、同じ要領でできますね。

For Each slt In objFrame(1).document.getElementsByTagName("select")
 If slt.Name = "HOUSHIKI" Then
  For Each opt In slt.getElementsByTagName("option")
   If opt.Text = "フォーメーション" Then
    opt.Selected = True
    slt.onchange
    Exit For
   End If
  Next
 End If
Next


金額は予想ファイルの7項目目(6)
「KINGAKU」という名前のテキストボックスに値をぶち込むだけです。

txtKin = objFrame(1).document.getElementsByName("KINGAKU")
txtKin.Value = strFileData(6)

sleep 1000 ’ 1秒待機



ここまでいくと、フレーム2(真ん中の赤)に頭数分のチェックボックスが出てきます。



ここでは
列は馬1「C1」、馬2「C2」、馬3「C3」
んで
行は馬番マイナス1の番号が名前になっています。

馬1の5番なら「C1の4」
馬2の3番と6番と9番なら「C2の2、C2の5、C2の8」
にそれぞれチェックを入れるだけです。

予想ファイルの4項目目(3)をハイフンで分割して、C1の馬番マイナス1にチェック

splittedResult = Split(strFileData(3), "-")
For Each output In splittedResult
 objFrame(2).document.getElementsByName("C1")(output - 1).Checked = True
Next


馬2も同じ。予想ファイルの5項目目(4)をC2列へ。

splittedResult = Split(strFileData(4), "-")
For Each output In splittedResult
 objFrame(2).document.getElementsByName("C2")(output - 1).Checked = True
Next


馬3も同じ。ただ馬連馬単ワイドの場合は、この処理を飛ばすように書いたほうがいいです。

splittedResult = Split(strFileData(5), "-")
For Each output In splittedResult
 objFrame(2).document.getElementsByName("C3")(output - 1).Checked = True
Next



ここまで来たら、
チェックボックスをクリックしたときに動くJavaScriptを呼びます。
馬1の馬番1をクリックしたテイで。(実際にチェックはしません)
このonClickを動かさないと、組数(AMOUNT)が計算されないのです。

objFrame(2).document.getElementsByName("C1")(0).onclick


これで組数が表示されるので、その数字×金額(合計金額)を控えておきましょう。

txtAmount = objFrame(2).document.getElementsByName("AMOUNT")
Kingaku = Kingaku + txtAmount.Value * strFileData(6)



んで、フレーム1(左)の「入力決定」ボタンを探して押します。

For Each objTag In objFrame(1).document.getElementsByTagName("input")
 If InStr(objTag.outerHTML, "入力決定") > 0 Then
  objTag.Click
  Exit For
 End If
Next


んで次の行の処理へ。ループ2(ファイルの行があるだけループ)を繰り返します。

Sleep 2000 ’ 念のため2秒待機
Loop ’ ループ2の戻り



すべての行の入力を終えたら、
フレーム3(右)の「投票内容確認へ」のボタンを探して押します。

ただ、このボタンを押すとき
普通に押すと制御が利かなくなりますので(このあとダイアログが出てくるので)
非同期で押すようにしましょう。

非同期でボタンを押したら、ちょっと時間を空けて(2秒)
ダイアログ(「Web ページからのメッセージ」)のウインドウを探してOKボタンを押してあげます。

btnIdx = 0
For Each objTag In objFrame(3).document.getElementsByTagName("input")
 If InStr(objTag.outerHTML, "投票内容確認へ") > 0 Then
  objFrame(3).document.Script.setTimeout "javascript:document.getElementsByTagName(""input"")(" & CStr(btnIdx) & ").click()", 10
  Sleep 2000
  hwindow = FindWindow("#32770", "Web ページからのメッセージ")
  PostMessage hwindow, WM_COMMAND, vbOK, 0&
  Exit For
 End If
 btnIdx = btnIdx + 1
Next


ページが完全に表示されるまで待機。

Do While objIE.Busy = True Or objIE.readyState <> 4
 DoEvents
Loop
sleep 2000 ’ 念のため2秒待機




これまでと同じやり方ですね。
暗証番号は「MEMBERPASSR」、投票金額は「TOTALMONEYR」という名前になっていますので
それぞれ入れて、「投票する」ボタンを探して押します。
この時も先ほど同様、非同期でボタンを押して、ダイアログのOKボタンまで押しましょう。

objIE.document.BET_CHECK.MEMBERPASSR.Value = "0000"
objIE.document.BET_CHECK.TOTALMONEYR.Value = CStr(Kingaku * 100)

btnIdx = 0
For Each objTag In objIE.document.getElementsByTagName("input")
 If InStr(objTag.outerHTML, "投票する") > 0 Then
  objIE.document.Script.setTimeout "javascript:document.getElementsByTagName(""input"")(" & CStr(btnIdx) & ").click()", 10
  Sleep 2000
  hwindow = FindWindow("#32770", "Web ページからのメッセージ")
  PostMessage hwindow, WM_COMMAND, vbOK, 0&
  Exit For
 End If
 btnIdx = btnIdx + 1
Next


ページが完全に表示されるまで待機。

Do While objIE.Busy = True Or objIE.readyState <> 4
 DoEvents
Loop
sleep 2000 ’ 念のため2秒待機



これで投票完了です。
InternetExplorerを閉じて、次のファイルを開く準備をして
ループ1(ファイルがあるだけループ)を繰り返します。

objIE.Quit
Set objIE = Nothing
strFile = Dir$

Loop ’ ループ1の戻り



これで終了です。

---

今回作ったのは予想ファイルを使って読み込んで投票する仕組みですが
Excelのセルを読み込んで投票する仕組みも簡単にできると思います。

適当に直して使ってください。


どっちにしても大事なのは
「予想するロジック」(今回でいう「予想ファイルの作り方」)だと思いますので。


人気ブログランキングへ 
[広告です] 地方競馬をひとつに集約!全場買える【 楽天競馬 】



このネタへのコメント:


コメントはありません。
お名前(入力必須):
ログインID(SBメンバーズの方)(任意):
(SBメンバーズの方から頂いたコメントは、管理人の承認なしで書き込まれます。)

タグは使えません。

URL(任意):
メール(任意):

右に「さんでーぶりーず」と入力してください。