3964089 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

会社員KNIGHTの趣味三昧(卓球・盆太鼓・色々!)

会社員KNIGHTの趣味三昧(卓球・盆太鼓・色々!)

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Calendar

Category

カテゴリ未分類

(0)

卓球

(1142)

盆太鼓・盆踊り

(402)

トイドローン

(21)

その他

(332)

■■■■■■↓以下は凍結カテゴリー↓■■■■■■

(0)

KATS(自動売買プログラム)

(87)

「VB.NETで自動売買」入門

(24)

本日の取引

(1292)

デイトレ結果(勝ち)

(365)

デイトレ結果(負け)

(591)

夜間取引結果

(15)

今週の取引

(480)

今月の取引

(103)

明日の監視銘柄

(54)

株関連

(55)

草野球

(36)

Archives

Keyword Search

▼キーワード検索

Comments

 KNIGHT@ Re[1]:第1回 日中杯 SpinOnline(WSS団体戦)(04/14) fukufuku1789さんへ いえいえ。むしろ私が…
 fukufuku1789@ Re:第1回 日中杯 SpinOnline(WSS団体戦)(04/14) 一緒に試合に出てくださりありがとうござ…
 KNIGHT@ Re[1]:第15回 朝霧オープン卓球大会(チームマッチ)(01/21) fukufuku1789さんへ お疲れ様でした。今回…
 fukufuku1789@ Re:第15回 朝霧オープン卓球大会(チームマッチ)(01/21) 惜しい試合が多かったですね。 また卓球し…
 KNIGHT@ Re[3]:2023年度台東区オープン年代別後期団体戦(12/10) マニャさんへ コメントどうも有難うござい…
 マニャ@ Re[2]:2023年度台東区オープン年代別後期団体戦(12/10) knightさん ご返信誠にありがとうござい…
 KNIGHT@ Re[1]:今年の卓球を振り返って(12/29) ふくたさんへ お疲れさまでした!沢山ご一…
 ふくた@ Re:今年の卓球を振り返って(12/29) 今年も一年お疲れ様でした!
 ac_knight@ Re[1]:2023年度台東区オープン年代別後期団体戦(12/10) マニャさんへ コメントどうも有難うござい…
 マニャ@ Re:2023年度台東区オープン年代別後期団体戦(12/10) KNIGHTさん 初めまして。 いつも楽しく…

Favorite Blog

kaorin♪FX&I… 働く主婦♪かおりんさん
投資家へ~Mr.Hのふ… HM-kabuさん
2006年2月から株を始… hot_staffさん

Headline News

Rakuten Card

Feb 7, 2009
XML
あと4営業日でクリック証券のWebサービスAPIは提供を終了します。
APIを使っていた自動売買プログラムの開発者は、再来週以降は嫌でも別の発注方法を
選択するしかありません。
いくつかの代案が存在する中、私はモバイルサイトのスクレイピングを採用すると思います。
鴉揚羽さんのブログでも書かれていた通り、約定番号が一意にならない点?や
保有銘柄一覧などが5銘柄ずつ次ページ処理になる点などがあるようで単純には
いかないという事は分かっていますが。
鴉揚羽さんは一覧などの取得にPC用Webサイトを利用しているらしく、モバイルサイトと
併用する事によってデメリットをうまくカバーしているようです。

私は今の所、岡三オンライン証券のモバイルサイトを操作するつもりでいます。
理由は単純に、手数料がクリック証券より安いからです。
ただ、まだ口座開設申し込みが終わったところなので、実際にアカウントが出来て
ログインしてみないとスクレイピング出来そうかどうか分からないので、判断はもう少し
後になりそうです。
まあ最近はKATSの運用はしてなかったので、それほど焦らず構えようと思います。
シミュレーションにはWebサービスAPIは必要ないので、日々のデータ取得やロジックの
検証は引き続き行う事が出来ます。

岡三オンライン証券の口座開設を待っている間、何もしないのはもったいないので
それまでにスクレイピングについて検証してみようという事で、今はクリック証券の
モバイルサイトを使って色々試したりしています。

私はスクレイピングは初めてで、どうやるのがセオリーなのかも分からないのですが、
自分なりに感じたポイントや方法についてちょっと書いてみます。

リクエスト送信は基本的にWebサービスAPIを呼び出していた時と同じだと思います。
問題は返って来るのがXMLではなくHTMLページそのものなので、
その中から自分が必要な情報をどう見つけて取得するのかがポイントです。

ではクリック証券モバイルサイトで余力情報を取得するのに私が取った方法を
書いてみます。
経験者の方は是非「そうじゃない!」「こうすべきだ」等、ご意見頂けたらと思います。

まずはモバイルサイトのログイン画面のURLをWebブラウザに入力します。
「https://sec-sso.click-sec.com/mk/」です。
するとログイン画面が表示されますが、マウスの右クリックで「ソースの表示」とし、
ログイン画面のHTMLソースをテキストエディタ(メモ帳など)で開きます。
・・・ちなみに、HTMLが全く分からない人はスクレイピングは不可能だと思います。

このソースを見ればクリック証券にログインするためのデータが盛り込まれています。
HTTPリクエストを送信する時に必要な情報はINPUTタグとして入っています。
例えばユーザー名は「j_username」、パスワードは「j_password」です。
必要なリクエストパラメータを全て与え、URLを「{ログイン画面のURL}+"sso-redirect"」として
送信すればトップページが表示されます。
表示されない場合はURLが間違っているかリクエストパラメータが足りないのでしょう。

HTTPリクエストの送信が分からない人は、僭越ながら私が連載していた
「VB.NETで自動売買」入門の「クリック証券Webサービスで発注する」で紹介した
HttpPost()メソッドを参考にして下さい。

Webブラウザで実際にログインし、トップページから「株式取引メニュー」をクリックして下さい。
すると次のページに「余力確認」があります。
このリンクをクリックするのと同様の操作をプログラムにさせる訳ですので、
また「ソースの表示」でHTMLソースを覗いてみましょう。

すると、リンク(Aタグ)にURLが書いてあります。しかも余力情報の取得をするのに
パラメータはありません。じゃあこのURLを送信するだけで簡単に余力情報のページに
飛ぶ事が・・・出来るのですが、そんなに甘くはありません(苦笑)。
このURLはログイン時に動的に変更されるのです。
ログイン後のブラウザのURLには
「https://sec-sso.click-sec.com/mk/xxxxxx/dispKabuMenu.do」と表示されていますが、
「xxxxxx」(sec~)の部分は毎回変わります。
WebサービスAPIの時にもありましたよね。つまり、ログイン後のURLから「dispKabuMenu.do」
取り除いた部分を「baseURL」として保持し、次以降のリクエストではそれを使います。
実装方法については私の連載記事を読んで頂ければ分かると思います。

なので、余力情報の表示でプログラムが送信するURLは
「{baseURL}+"/dispPaUserSheet.do"」です。

Webブラウザでリンクをクリックすると余力確認のページが表示されます。
今回はページの中で「現物買付余力」を取得する事にします。
例の如く、HTMLソースを開いてみます。

これまではリクエストパラメータやURLなどエッセンスを目で読み取って活用すれば
良かったですが今回は違います。HTMLページにある文字列をプログラムで抽出しないと
いけません。これは煩雑です(^-^;

HTMLソースで現物買付余力の部分はこんな感じになっています。

<li>現物買付余力
 <div align="right">
  
  
   82円
  
 </div>
</li>


・・・ここからどうやって金額を取りましょうか?
正直、手掛かりはラベルやHTMLタグしか無いと思います。
まずはHTMLソースから「現物買付余力」という文字列の位置を取得します。
次にその位置以降で「>」を検索します。DIVタグの開始タグの終了位置です。
この次以降が金額の入っている部分ですね。
さらに今度は金額の「円」を探しましょう。「円」の位置までが金額です。
金額の前には思いっきり空白が入っているので、それを取り除けば取得出来ます。
ソースコードはこんな感じになります。

Dim infoIndex As Integer = html.IndexOf("現物買付余力")
Dim startIndex As Integer = html.IndexOf(">", infoIndex) + 1
Dim endIndex As Integer = html.IndexOf("円", startIndex)
Dim yoryoku As Integer = CInt(html.Substring(startIndex, endIndex - startIndex).Trim)


「html」はHTMLページの文字列を表す変数です。

以上のように、Webブラウザ上で操作するのと同様のリクエスト送信をプログラムで
行うために調査する作業と、戻って来たHTMLページを目で確認する代わりにプログラムが
それを解釈する作業。大きく2つの作業が必要です。

余力の確認は比較的簡単ですが、発注部分についてはもう少し複雑になりそうです。
URLやHTMLソースを見る限り間違いなくStrutsというWebアプリケーションフレームワークを
使っています。
「注文入力(銘柄情報)」をクリックしてHTMLソースを確認すれば分かりますが、
「org.apache.struts.taglib.html.TOKEN」というINPUTタグが埋め込まれています。
これはトランザクショントークンと呼ばれるもので、正しい画面遷移でオペレーションが
行われている事を保証するためのもので、いきなり発注画面の操作を行おうとしても
上手くいきません。携帯画面で操作するのと同じ手順で画面遷移させないと
受け付けてくれない仕組みになっています。
なので、正しい画面遷移の手順を踏み、HTMLページに含まれているトークンを
次のリクエストでちゃんと送信してあげないと画面遷移エラーになる恐れがあります。
・・・とか言いながらWebブラウザで操作を確かめると、暗証番号入力後に実際
発注が行われた後で「戻る」ボタンによりもう一度暗証番号を入力するなど、
限られた条件以外ではエラーを返さない事が分かりました(汗)。
トークンは埋め込まれているものの、クリック証券サイドでのエラーチェックは
最小限になっているかも知れません。

以上、私がWebスクレイピングを試してみた結果です。
識者から色々アドバイスを頂けたらなぁと期待していますw

あと、私に答えられる事であれば答えたいと思っていますので、もしご不明な点があれば
遠慮なく質問して頂けたらと思います。





お気に入りの記事を「いいね!」で応援しよう

Last updated  Feb 7, 2009 12:44:34 PM
コメント(31) | コメントを書く



© Rakuten Group, Inc.