JVOPT.pl の 使いかた

JVデータをテキストで保存します。


  1. 動作環境
  2. 使い方 (1) はじめに
  3. 使い方 (2) テキスト
  4. 使い方 (3) データ取得
  5. 起動方法など
  6. その他の注意点
  7. 注:
  8. 更新履歴
  9. 参考
  10. ホームページ

-- ここでの記事は適宜、加筆修正の予定です。項目リンクが間違えていました。恥; --


1.  動作環境  

  Windows XP/2000
  Perl 5.8 がインストールされている。( ActivePerl 5.8 推奨 )

  その他の主な使用モジュールは、Tk と Win32::OLE です。
  上記の環境では入っていると思われますが、ない場合は適宜 PPM などで入手。

  また、JVリンク(DATA Lab..)が使える状況でないとこのスクリプトは役に立ちません。。




2. 使い方 (1) はじめに  

JVData をダウンロードして、(必要な)ファイルをテキストで保存するためのツールです。

使い始めるには、(★最重要)
まず、同梱のjvcfg.ini をエディタなどで書き換えます。

[PASS] 保存用のパスを指定します。実在するパスが必要です。
# パスの最後には / を付けてください。
# 今週のデータ(非蓄積系)の保存場所です。
WEEKLY=h:/others/weekly/
# リアルタイム情報の保存場所です。
RTIME=h:/others/rtime/
# リアルタイムオッズの保存場所です。
ODDS=h:/others/oddss/
# リアルタイムのDM予想データを保存しています。
OTHER=h:/others/other/

[TIME] 最後に取得したデータファイルの時間(LastTime)を記録します。
# 現在未使用です。適当に使ってください。
FromTime=20050701000000
# 今週のデータの LastTime を記録しています。
RACETime=20050701000000
# 開催スケジュールの LastTime を記録しています。
YSCHTime=20050701000000

[SET] その他の設定をします。
# 他のプログラムなどで、JVLink の設定が済んでる場合、ここで再設定する
# 必要はないので、JV_SET ( 1 )にしておけば、設定画面が表示されません。
# ここで JVLink の設定を表示する場合( 0 )にしてください。
JV_SET=1
# JVOPT.pl を最初に実行するとき、このスクリプトは開催スケジュールがないと始ま
# らないので、この時だけ、STEP_1 ( 0 )にしてください。起動時に取得します。
# 無事起動すれば、自動で( 1 )になります。それ以後の通常動作では( 1 )でOKです。
# やり直しでの再取得の場合も( 0 )で、その時は YSCHTime に注意。
STEP_1=0
# Option 1 での dataspec    他に SLOP など
OPT_1=YSCH
# Option 2 での dataspec    他に TOKUTCOV など
OPT_2=RACERCOV
# タイマー使用時のインターバル(分)〜未使用です。
INTVAL=5

[PASS] では保存用のパスを指定します。実在するパスが必要です。
 ※ ココの書き換えだけは必ずやってください。
 ※ kbcfg.ini と異なり、コチラは都合によりパスの最後に / を 付けてください。




3. 使い方 (2) テキスト  

本来、Data Lab. JVData はファイルを提供するサービスではありません。
ただ、テキストに拘って自分独自の考え方で、いろいろな角度からデータを処理し て眺め
てみたいというような人もいると思います。
自分の周辺にも、テキストに愛着と信仰を持ってる人がケッコウいます。

sSeia はテキストデータを処理する方法として、現在 Perl を使っていますが、 テキストで
持っていれば、どんな言語ででも扱えるので便利だと思っています。
データは固定長なので、スクリプト言語で扱うのにも適しています。

現在、Perl用 のスクリプトを幾つか公開しています。
Perl をインストールしている(or する)人なら、取得したテキストデータを簡単に テストでき
るので挑戦してみてください。

現在、表示はkbsTk.pl をメインにしています。
JVOPT で取得、kbsTk で表示という流れです。

⇒⇒ kbsTk 最終版 0025 (2005.12.23) はコチラから

最新バージョンの JVOPT では、データの保存先が変っているので、このままでは
kbsTk は使えません。保存先を変更してください。


保存ファイル名については、今までにも書いてきているので省略します。
変更する場合は、スクリプトを眺めて判断してください。




4. 使い方 (3) データ取得  

GO! ボタンがスイッチになっています。
ボタンに色(Pink)がついていれば、準備完了ということです。
処理中はボタンの色が灰色になっています。気長に待ちましょう

レース年月日が指定されていないとか、押されていてもリアルタイム系データの取得条件
に満たない場合で、スイッチが入ると「今週のデータ」を取得にいきます。
普通は、月曜から金曜の間はレースがないので、大抵は【GO!】ボタンを押して 週データを
取得するだけだと思います。
提供される日とデータの種類は JVData の仕様書を参照してください。

リアルタイムデータを取得するには、
レース年月日を指定する。
取得したいデータの種別をいくつか指定する。
ここまで出来ていれば、GO ボタンで「オッズ以外の速報データ」が取得でき ます。
レース場をいくつか指定する。
レースNo.をいくつか指定する。
これで、GO! ボタンを押すと「オッズデータ」が取得できます。

指定できるレース年月日は、データ提供期限を考慮して7日前2日後を限度にしています。
2006年版で、この部分は、レースデータのある直近のレース日4日以内 に変更しました。

レースNo.をいくつか指定する場合、最少値〜最大値のレースがすべて取得の 対象として
PickUp されるようにしていますので、飛び飛びの取得はできません。
飛び飛び取得の方がいいなら、スクリプトを書き換えてください。非常に簡単です。

sSeia の使い方は、今のところ JVDTXT の補完で使うことが多いのですが、 レース年月日
を指定してからデータの種別レース場の選択できるものを全部と レースNo.の 1 と 12 を
選んで GO! ボタンを押します。つまり、リアルタイムデータ全取得です。
それ以外、月〜土曜の適当なときに何も指定せず GO! で週データを取得しています。




5.  起動方法など 

拡張子.pl が Perl に関連付けられていれば、ファイルを(W)クリックする。 (推奨)

コマンドプロンプト画面から、perl jvopt.pl と打ち込んでリターンキー。
当然この場合、JVOPT.pl のあるディレクトリで実行するか、パスを追加。




6.  その他の注意点  

** 単なるツールです。
スクリプトはどんどん書き換えて、使いやすいツールにしてください。
注意点は、別にありません。

まぁ、それ程むきになるものでもないのでボチボチですが、自己都合を最優先にやって
いこうと思ってます、です。はぃ




7.  注:  

分からないことは、検索、立ち読み、検索、読書。。です。

そこまでやってもダメなら諦めるという男らしい選択肢が最近少ないようで 嘆かわしい。
分からないのは、バカなのか勘違いしてるのかドッチかだというというところまで行って、
何回でも立ち直る。そんな応援したくなるような生き方する人も少ない?のかな。

伝言版や Mail での問い合わせで期待されても、それ以上の答えは多分出せません。

逆に、間違いの指摘や改善のヒントなどをいただいた時は sSeia にとってはうれしい限
りです。
いつも心より感謝しております。


タイマーによる自動取得について:

自動取得の目的は、別に「時系列と同様のデータを蓄えたい」ということ ではなくて、
「データを表示するときに、なるべくタイムリーなデータが欲しい」 ということです。

取得専用の JVDTXT ではタイマーをつけています。
JVOPT でも、といろいろ考えたのですが、結局タイマーは止めておきます。

Threads モジュールだと、Tk と巧く共同作業が出来ず、POE モジュールでは何とかなり
そうだったのですが、起動時のもたつきや修正すべきところが多くかなりのエネルギーが
必要なので面倒になり撤退しました。再度挑戦する意欲はありません。
しばらくは、JVDTXT のお世話になることにします。

この件は、タイマーとして、pycron SGET.pl を使うことで 一応の解決をしました。
コレで暫らく様子をみます。(2006.01.22)


今後の JVOPT の用途は、全レース終了後の全データが提供されるのを待って、 補完に使うのが
主になると思います。遺漏なく取得するには、これで十分でしょう。

SGET.pl では、必要最小限のデータを取得するようにすれば、画面での煩わしさも軽減できます。

レースが中止などで代替開催になった場合などは、開催スケジュールから日程を読んでいるため、
データが取得できません。開催後に新しく提供されるスケジュールデータを入手後にデータを取得
する手順が必要になります。

不便なので、読込先を変更した修正版を用意しました。スクリプト本体だけです。 2006.01.23




8.  更新履歴  

⇒重要な変更はココに書くかもしれません。

サブルーチン ini_save の位置が適切とはいえません。
異常終了時でも LastTime を記録してしまうので必要なデータが取得できない場合があります。
今週のデータ分だけでも、現在の &ini_save() をコメントアウトして、 データ取得後にセーブする
ように変更してください。

                &ini_save() ;
                print "\t今週のデータを取得しました。→ $fn\n" ;
            } else {

辺りが適当だと思います。 ↑ 2006.03.23 追記
適当ではありません。無駄に何度もセーブしています。データ取得後にフラグを たてて、最後に
そのフラグによって一回だけセーブするほうがいいようです。↑はダメな例として残します。
※ 2006.04.03

公開バージョンでは、JVRead でデータの読み込みをしています。
JVGets を使う方がイイようなので、一応該当部分を下記に

        ・・・〜
        my $bsize = Variant( VT_I4, 5120 ) ;
        my $string = Variant( VT_UI1|VT_ARRAY|VT_BYREF, '' ) ;
        my $fn = Variant( VT_BSTR|VT_BYREF, '' ) ;  # ファイル名
        my @dat = () ;      my $i = 0 ;
        my $flg ;
        while ( $flg = $jvd->JVGets( $string, $bsize, $fn ) ) {
            next if $fn =~ /^H[16]/i ;      # 票データは除外
            next if $fn =~ /^O/i ;          # アタマに O と B がつくのは除外
            next if $fn =~ /^BR/i ;
            my $yyyy = substr( $fn, 4, 4 ) ;
            if( $flg > 0 ) {
                $dat[$i] = $string->Get ;
                $i++ ;
                $string = Variant( VT_UI1|VT_ARRAY|VT_BYREF, '' ) ;
            } elsif( $flg == -1 ) {
            〜・・・

コンナ感じになります。参考にしてください。※ ↑ 2006.03.30 追記
速くはなっていないようだし、基本的なところをいろいろ見直す必要がありそうです。
気が向けば修正版を公開するつもりですが、いつになるか分かりません。




9.  参考  

⇒参考になるような情報はココに書くかもしれません。

Perl/Tk に関してなら
M.Hiroi's Home Page の Perl/Tk memo がとても参考になります。





10.  ホームページ  

充分ではありませんが、ホームページの情報も参照してください。
sSeia競馬



Copyright (c) 2004-2006 WinKB & sSeia