|
カテゴリ:「VB.NETで自動売買」入門
前回から開始したSBI証券バックアップサイトからの発注シリーズ。
今日からいよいよ処理の作成を始めます。まずはログイン処理です。 この記事の前準備として、SBI証券に口座開設しておく事と、過去記事で利用していた 「SampleApplication」を作っておく必要があります。 記事に沿って開発を行ってみようという方は「VB.NETで楽天RSSからリアルタイム情報を取得する」 から始まり「クリック証券のWebサービスで発注する」を<その4>まで進め、 HTTPリクエストを送信する「HttpPost()メソッド」を作成するところまで完了しておく 必要があります。 ※前回「<その3>まで進めておく」と書きましたが<その4>の間違いです では早速書いてきます。 ログインボタンをクリックした時の処理を実装するわけですが、クリック証券の時のように 「このURLで、このリクエストパラメータを送信して下さい」などという仕様は公開されていません。 自力で送信するしかありません。ではどうするのか。 WebブラウザからSBI証券バックアップサイトを使ってログインするかのように振舞います。 ではSBI証券バックアップサイトのHTMLソースを確認するためにブラウザで開いてみましょう。 ログイン画面が開きましたか? お使いのブラウザによってメニューが違いますが、例えばFirefoxであればメニューバーの 「表示」から「ページのソース」をクリックするか、ページ上で右クリックして 「ページのソースを表示」を選択するとHTMLソースが表示されます。 「HTMLソースが全く読めません」という方は、恐らく今後私の記事を読み進める事は 困難だと思いますので、勉強されるか断念されるしかないと思います(^^; ソースの中から把握したいのは、ログインボタンをクリックした時にどんなURLと リクエストパラメータを送信しているか。 まずログインボタンが属しているFORMタグの属性から、送信URLを確認します。 「https://k.sbisec.co.jp/~~/loginUserCheck.do(少し伏せ字にしてます)」です。 ログインする時はこのURLにパラメータを送信するようです。 次に、リクエストパラメータとしてどんな値を送信する必要があるか。 Javascriptなどでパラメータを追加しているサイトもありますが、単純なサイトであれば FORMタグに囲まれている中に存在するINPUTタグやHIDDENタグを探せば良いです。 ログインの場合ですと単純なのですぐに分かります。 ユーザーIDを表す「username」とパスワードを表す「password」です。 簡単ですよね?(笑) それでは、クリック証券編と同様、HttpPost()メソッドを使ってリクエストを送信します。 Dim res As WebResponse = _ HttpPost("https://k.sbisec.co.jp/~~/loginUserCheck.do", "username=xxxxxx&password=xxxxxx") 1行が長いので2行に分けましたが、プログラム上で1行のソースを分割する場合、 上のように「 _」を付ける必要があります。 実際には折り返さなくても構いません。お好みで結構です。 もうこの1行だけでログイン処理は終了です。ですが問題はここからなのです。 クリック証券のWebサービスだと「応答はこのようなXMLで返ります。ステータスは・・・」などと 仕様が公開されているのですが、単にWebサイトを操作しているだけなのでそんなものはありません。 返って来るのはログインボタンをクリックした後に返って来る画面のHTMLソース。それだけです。 そこにどんな情報が含まれているかは実際にそのページのソースを見るしかありません。 という事で、確認のために、実際にSBI証券バックアップサイトにブラウザからログインして下さい。 私が今ログインすると、このような画面が表示されました。 ![]() この画面から「ログインが成功した」と判断します。判断基準は自分で考えるしかありません(^^; 一番順当な考え方だと私が思うのは、画面の右上と右下に「ログアウト」のリンクが出てますよね? ログアウトするリンクが出ているという事はログインしている状態だと判断出来ます。 HTMLソースの中に「ログアウト」という文字列を発見したらログインしていると判断する事にします。 まずは先ほどの応答クラス「WebResponse」の変数resから応答HTMLを文字列で取得します。 Dim html As String = "" Using sr As New IO.StreamReader(res.GetResponseStream, Encoding.GetEncoding(932)) html = sr.ReadToEnd() End Using 説明は割愛させて頂きます。エンコーディングを「932」で行っているのは、Webサイトの 文字コードがShift_JISだからです。確かクリック証券の時はUnicodeだったので この記述は無かったですかね。 次に、安易ではありますが「HTML文字列中に"ログアウト"が含まれていたらログインが成功した」 とみなすためのコードを追加します。 If html.Contains("ログアウト") Then MessageBox.Show("SBI証券バックアップサイトにログインしました。") Else MessageBox.Show("SBI証券バックアップサイトにログイン出来ませんでした。") End If ログイン出来なかった時の原因ですが、ユーザーIDかパスワードが間違っているのか、 入力されていないのか、どのような理由かは・・・知りません(苦笑)。 その時に応じて画面にエラーメッセージが出ていると思うので、その文字列を解析して 独自で判断ロジックを入れて頂くという事です。仕様は公開されていないのですから。。。 さて、ログイン処理のプログラムはこのようになりました。 ![]() 今回は非常に簡単でしたが、複雑な応答HTMLから欲しい情報を取得するのは、ログイン結果のような 簡単な手順ではありません。 また、リクエストパラメータの値なども複雑化しますので、特に発注処理などは手こずって しまう事もあると思います。 次回はクリック証券の時と同様「購買余力の確認」を行う予定です。 もしご不明な点や、ご意見・ご指摘等があれば遠慮なくコメント下さい。 宜しくお願いします。 お気に入りの記事を「いいね!」で応援しよう
Last updated
Nov 20, 2010 10:17:54 PM
コメント(0) | コメントを書く
[「VB.NETで自動売買」入門] カテゴリの最新記事
|