そのほか
569965 ランダム
 HOME | DIARY | PROFILE 【ケータイで見る】 【ログイン】
会社員KNIGHTの株自動売買

PR

Calendar

Category

Archives

Comments

 ac_knight@ Re[1]:第155回灘区卓球リーグ(04/07) New! 村井さん、 >こんにちは、村井です。2部…
 村井です@ Re:第155回灘区卓球リーグ(04/07) New! こんにちは、村井です。2部優勝おめでとう…
 ac_knight@ Re:憶えていますか?『Aoi』から『葵ちゃん』になっておりますです。(04/06) 葵さん、 >Knightお兄様、ご無沙汰してお…
 葵ちゃん@ 憶えていますか?『Aoi』から『葵ちゃん』になっておりますです。 Knightお兄様、ご無沙汰しております。 今…
 ac_knight@ Re[1]:今シーズンの盆太鼓、始動。(04/06) 浪速の投げ師さん >今年もはじまりました…
 浪速の投げ師@ Re:今シーズンの盆太鼓、始動。(04/06) 今年もはじまりましたね。 12名も参加…
 ac_knight@ Re[1]:第30回羽曳野レイティングシステム大会(03/24) シュートドライバーさん >まだほかにもあ…
 シュートドライバー@ Re:第30回羽曳野レイティングシステム大会(03/24) まだほかにもあったのですか? 自分のプレ…
 ac_knight@ Re[9]:第30回羽曳野レイティングシステム大会(03/24) とも@ぺんどらさん >すみません、初めて…
 とも@ぺんどら@ Re[8]:第30回羽曳野レイティングシステム大会(03/24) すみません、初めてでしたのにご挨拶が抜…

Favorite Blog

放蕩日記 houtou777さん
萌えブログ 出張所… 下澤信樹さん
40歳からの卓球上達… ttdriveさん

Headline News

Rakuten Ranking

Let's link!

>>お気に入りブログに追加
ブログが更新されると
メールでお知らせします

Wishlist

Rakuten Card

Mobile

m ケータイに
このブログの
URLを送信!

 

<< 前のページへ一覧

Nov 21, 2010
楽天プロフィール Add to Google XML

 SBI証券バックアップサイトで発注する<その3> (2)

前回から間を置かずに<その3>を投稿する事は私自身も予定していませんでした。
ログイン処理が出来たら、皆さんが知りたいのは恐らく注文処理と一覧取得処理だと思います。

注文処理は、クリック証券のWebサービスのように容易にはいきません。
SBI証券バックアップサイトは発注を行う時に2画面に渡って行います。つまり、
HTTPリクエストを2度送信して初めて発注出来ます。
また、その間処理がシーケンシャルに行われているか判断するために隠しパラメータを
使用しているので、悩んでいる方もいらっしゃるかと思います。

保有銘柄一覧や注文一覧など、一覧情報の取得に悩まれている方もいらっしゃるでしょう。
こちらは、HTMLソースから繰り返し情報を効率良く取得するにはどうするかというのが
ポイントになってくると思います。

それら2つのメイン処理は次回以降に回すとして、その予備知識として先に
「正規表現」というものを扱いHTMLソースから効率良くデータを取得する方法をご紹介します。
作成する処理はクリック証券編と同様、購買余力の取得です。

クリック証券編<その6>に書いているように「余力確認」ボタンを作成し、
コードの実装を行う準備をして下さい。

どんなURLを送信しないといけないかは、実際のSBI証券バックアップサイトで確認します。
Webブラウザを使ってログインすると、トップページに「買付余力」というリンクがあります。
トップページのHTMLソースを見て「買付余力」と書いているリンク(Aタグ)に書いてある
URLを確認しても構いません。でもソースを見慣れていない人はややこしいですし
URLも相対パスで書いているので分かりにくいです。
そこで、簡単な方法があります。
実際に「買付余力」リンクをクリックし、買付余力画面を表示して下さい。
その時WebブラウザのURLに表示されているのがそれです。
 ※もしWebブラウザでURLの表示をしていない場合はブラウザのオプションから表示して下さい

ちなみに買付余力の確認には何のリクエストパラメータも要りません。
よって、ログイン処理の時と同様にソースを書くと、このようになります。

Dim res As WebResponse = HttpPost("https://k.sbisec.co.jp/~~/purchaseMarginList.do", "")
Dim html As String = ""
Using sr As New IO.StreamReader(res.GetResponseStream, Encoding.GetEncoding(932))
 html = sr.ReadToEnd()
End Using


これで、変数「html」には応答HTMLソースが返って来ています。

問題はここからです。そのHTMLソースから、どうやって買付余力を取得するかです。
例えば私の買付余力画面はこのようになっています(お恥ずかしい)。

WS000091.JPG

人間が見れば「47,508円だな」と分かりますが、プログラムからこの金額を
取得するには果たしてどうしましょうか。
Webサービスの応答のように「ここに金額が入っていますよ」と示すタグもありません。
せいぜい、単に表を構成するTABLEタグぐらいでしょう。
入力項目(テキストボックス等)ではなくただの表示項目なので、特にそこを
データとして識別するものは何もありません。
しかも、金額は複数箇所にあります(^^; 取得したいのは一番上にある金額です。

こんな時、テキスト文字列を解析するのに非常に役立つのが「正規表現」です。
私が解説するよりも、もっと良いリソースがネット上に沢山ありますので、
ご存じない方は是非このキーワードで検索して頂ければ幸いです。奥が深いです。

.NET Frameworkで正規表現を扱うには「System.Text.RegularExpressions.Regex」というクラスを使用します。

このクラスには、文字列から自分の指定した文字列パターンに合致するものを
検索する「Match()」というメソッドがあり、それを使用します。

申し訳ないですが、まずはソースをご紹介します。

Dim m As Match = Regex.Match(html, "<td\salign=""right"">\s*(?<yoryoku>\S*)円")

このように「Regex」というクラスをコーディングするには、ソース上部に

Imports System.Text.RegularExpressions

が必要です。
あるいは「System.Text.RegularExpressions.Regex」とフルで書いて下さい。

上のソースのポイントはダブルクォーテーションで囲まれた部分です。
少しだけ解説すると、文字列中の「""」は、一番外側のダブルクォーテーションとは違い、
文字列中の「"という文字」という風に扱うものです。2つ続けて記述します。
「\s」は半角スペースを意味します。「*」は、0回以上繰り返すという意味です。
「?<yoryoku>」は、その位置にある文字を「yoryoku」という変数として定義しています。

つまり、上の文字列は、HTMLソースの中から、一番最初に見付かった
「<td align="right">  xxxxxx円」という文字列パターンを探します。
「xxxxxx」の部分の長さは言及していません。また、その左のスペースの長さも。
スペースが終わって何か違う文字列が入っている部分(「円」が出現する手前)である「xxxxxx」の
部分を変数「yoryoku」という名前で定義します。

この結果の変数「m」を使って余力を取得します。

m.Groups("yoryoku").Value

が求めている値です。

メッセージボックスで出力するために以下のように書きます。
「Groups」なんて書いてますので、もし指定したパターンに合致する場所が複数箇所存在する
場合は「yoryoku」は複数あります。今回もそうですね。
ですが、上の1行だけだと、最初に見つかったものしか取得していません。
複数回の取得方法は一覧情報を取得する回に解説させて頂きます。

MessageBox.Show("購買余力は" & m.Groups("yoryoku").Value & "円です。")

いかがでしょうか?
これで、HTMLソースから何とかデータを取得する事が出来そうですよね。

最終的にソースはこうなりました。

WS000092.JPG

正規表現についてあまり理解されていない方は、次回までに学習される事をお勧めします。
Webスクレイピングのために有効な知識ですので損は無いと思います。






楽天SocialNewsに投稿!

Last updated  Nov 21, 2010 07:15:16 AM
コメント(2) | コメントを書く

Nov 20, 2010

 SBI証券バックアップサイトで発注する<その2>

前回から開始した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証券バックアップサイトにブラウザからログインして下さい。
私が今ログインすると、このような画面が表示されました。

WS000089.JPG

この画面から「ログインが成功した」と判断します。判断基準は自分で考えるしかありません(^^;

一番順当な考え方だと私が思うのは、画面の右上と右下に「ログアウト」のリンクが出てますよね?
ログアウトするリンクが出ているという事はログインしている状態だと判断出来ます。
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かパスワードが間違っているのか、
入力されていないのか、どのような理由かは・・・知りません(苦笑)。
その時に応じて画面にエラーメッセージが出ていると思うので、その文字列を解析して
独自で判断ロジックを入れて頂くという事です。仕様は公開されていないのですから。。。

さて、ログイン処理のプログラムはこのようになりました。

WS000090.JPG

今回は非常に簡単でしたが、複雑な応答HTMLから欲しい情報を取得するのは、ログイン結果のような
簡単な手順ではありません。
また、リクエストパラメータの値なども複雑化しますので、特に発注処理などは手こずって
しまう事もあると思います。

次回はクリック証券の時と同様「購買余力の確認」を行う予定です。

もしご不明な点や、ご意見・ご指摘等があれば遠慮なくコメント下さい。
宜しくお願いします。






楽天SocialNewsに投稿!

Last updated  Nov 20, 2010 10:17:54 PM
コメント(0) | コメントを書く

Nov 13, 2010

 SBI証券バックアップサイトで発注する<その1>

私が過去に連載していた「VB.NETで自動売買」入門というものがあります。

私が試行錯誤して自動売買プログラムを開発した経験が少しでも皆さんの
参考になればと思い、公開させて頂いたものです。

株価などのリアルタイム情報の取得については、楽天証券のMarketSpeedと
RealtimeSpreadSheetを使い、発注については、クリック証券のWebサービスAPIを
使用したプログラムでした。
しかし、2009年2月にクリック証券がWebサービスの公開を中止してしまい、
発注部分についての記事がほとんど使い物にならなくなってしまいました。

私個人としましては、自動売買プログラムKATSの修正を行い、何とか運用再開を
行ったのですが、クリック証券に替わる新たな方法についての入門編を書くという
モチベーションはありませんでした。

ですがこの度ブログにリクエストがあり「期待されている方がいらっしゃるなら
書いてみよう」という事で「SBI証券バックアップサイトで発注する」編の
連載を開始する事にしました。
連載と言っても不定期になりますし、大した内容が無いのですぐに終わるとは
思いますが、少しでも皆さんの参考になれば幸いです。

今回は初回という事で、SBI証券バックアップサイトを使って発注する事に決めた
理由を書きたいと思います。

クリック証券の時は、公開されたAPIに基づき、安定した無駄の無い発注処理を
行う事が出来ました。
しかし、WebサービスのAPIが無い今、残された手段の中で私が有力だと思うのが
「Webスクレイピング」でした。
Webスクレイピングとは、APIを公開していない通常のWebサイトの情報から自分が必要な
情報を取得する技術で、Web2.0の要素の一つと言われているマッシュアップで
有効となるテクニックです。
しかし、一般のWebサイトから地道な作業で情報を取得する作業ですので、
APIを使用する方法に比べてデメリットが沢山あります。
その中でも痛いのは下の2つです。

(1)仕様が公開されていない
Webサイトのデザインは予告無く変更される場合があるので、開発したプログラムが
突然動かなくなる事があります。これは大きなデメリットです。
サイトの作りによりますが、ちょっとしたデザイン変更で全く動かなくなるケースも
あると思いますし、エラーなど発生しなければ暫く気付かないという事もあり得ます。

(2)レスポンスが悪い
APIだと必要な情報のみをデータで取得出来るので非常に軽快ですが、Webスクレイピングの
場合はWebサイトのソース(HTML)を受信するので、本来取得したいデータ以外に
Webサイトをデザインしているような不要なデータを沢山受信しています。
また、その中から必要なデータを抽出する処理も必要なため、どうしてもレスポンスは
遅くなってしまいがちです。

デメリットを少しでも少なくするためには、Webサイトの作りがなるべく簡素で、
動作も複雑でないもの。例えばJavaScriptを駆使していたりフレームを使ったような
サイトは向いていません。また、画像をガンガン使った様な凝ったサイトも然りです。
また、その条件を満たした上で重要なのはやはり手数料です。
プログラムで発注するのであまり至れり尽くせりのサービスやGUIは必要なく、
出来るだけ手数料が安い証券会社を選ぶべきです。

という事で皆さんにご意見を伺ったり自分で調べたりしながら至った結論はSBI証券でした。
手数料が安く、決め手となったのは「バックアップサイト」でした。
SBI証券の通常のWebサイトは普通にビジーなサイトで操作するのは大変なのですが、
障害時などの臨時サイトとして、最低限の情報だけでやり取りをするバックアップサイトなる
ものが存在します。
見るとシンプルなWebサイトなのでやり取りする情報が少なく、構造も分かりやすくて
良い感じです。また、あまり頻繁にデザイン変更するようなサイトにも見えないので
「これだ!」という感じで決定しました。

もしこの記事を読んで自動売買プログラムの開発を行われる方は、是非SBI証券の
口座を開設してみて下さい。


ちなみに、この連載は過去の記事で利用した「SampleApplication」を使って行います。
記事に沿って開発を行ってみようという方は「VB.NETで楽天RSSからリアルタイム情報を取得する」
から始まり「クリック証券のWebサービスで発注する」を<その3>まで進めたところから
続きを始めるつもりですので宜しくお願いします。






楽天SocialNewsに投稿!

Last updated  Nov 13, 2010 01:43:16 PM
コメント(0) | コメントを書く

Jan 12, 2009

 「VB.NETで自動売買」入門 現時点の目次 (2)


過去の連載記事全てをリンク一覧にしました。ご活用下さい。

・VB.NETで楽天RSSからリアルタイム情報を取得する<その1>
・VB.NETで楽天RSSからリアルタイム情報を取得する<その2>
・VB.NETで楽天RSSからリアルタイム情報を取得する<その3>
・VB.NETで楽天RSSからリアルタイム情報を取得する<その4>
・VB.NETで楽天RSSからリアルタイム情報を取得する<その5>
・VB.NETで楽天RSSからリアルタイム情報を取得する<その6>
・VB.NETで楽天RSSからリアルタイム情報を取得する<その7>
・VB.NETで楽天RSSからリアルタイム情報を取得する<その8>
・VB.NETで楽天RSSからリアルタイム情報を取得する<その9>
・VB.NETで楽天RSSからリアルタイム情報を取得する<その10>
・VB.NETで楽天RSSからリアルタイム情報を取得する<「バイト配列を文字列に変換する方法」の訂正>

・クリック証券のWebサービスで発注する<その1>
・クリック証券のWebサービスで発注する<その2>
・クリック証券のWebサービスで発注する<その3>
・クリック証券のWebサービスで発注する<その4>
・クリック証券のWebサービスで発注する<その5>
・クリック証券のWebサービスで発注する<その6>
・クリック証券のWebサービスで発注する<その7>
・クリック証券のWebサービスで発注する<その8>





楽天SocialNewsに投稿!

Last updated  Jan 12, 2009 02:54:18 AM
コメント(2) | コメントを書く

 クリック証券のWebサービスで発注する<その8>

今回は保有銘柄一覧取得の続きです。
前回が途中で終わっているので、今回はなるべく早く投稿した方が良いと思い
3連休中にアップする事にしていました。
<その7>を読んでない方は先にお読み下さい。

これから実装するソースコードは、Webサービスの応答XMLを元に作成した
DataSetからHoyuKabuGridというDataGridViewにデータを格納する
事でした。

「保有株一覧取得」ボタンをクリックする度にデータを格納していたら
件数がどんどん増えていきます。
もしかしたら前回ボタンを押した時から今回押す時までに保有銘柄を売っていたら
逆にデータが減る可能性もあります。
なので、ボタンがクリックされたらまずDataGridViewのデータをクリアする事から
始めないといけません。こう書きます。

'最初にDataGridViewをクリアする
HoyuKabuGrid.Rows.Clear()


「Rows」というプロパティは、DataGridViewの全行の集まり(コレクション)を表します。
それに対するClear()メソッドは、全ての行を削除します。

次はいよいよDataSetからの項目移送です。
設定する項目は証券コード、取得単価、保有数量でした。
取得単価と保有数量はhoyukabuTategyokuItemテーブルに。
一方証券コードはmeigaraテーブルに入っています。
どちらも保有する銘柄の数だけデータが存在し、両テーブルの件数が違うという事は
絶対にありません。
なので、どちらかのテーブルの件数を基準にして、何行目を
指しているかを合わせて項目移送して行けば良いです。
基準とするテーブルはどちらのテーブルでも構いません。今回は証券コードが
入っているmeigaraテーブルを元にループする事にします。
全行をループする時には「For~Each」という構文で書くとシンプルなのですが、
ループ内で「今何行目を処理しているか」を取得するには通常のFor文を使って
回す方が良いのでそちらを使います。このように書きます。

'保有銘柄の数だけループする
For i As Integer = 0 To ds.Tables("meigara").Rows.Count - 1


Next


1行目の最後まで打ってEnterを押すと「Next」は勝手にコーディングされるので
活用して下さい。それ以外のコードも、入力途中で候補が出ます。
CTRL+スペースでも出せますので、入力速度アップと間違い防止のため、是非
補完機能(インテリセンス)を使われる事をお勧めします。

この文は、iという変数を0から「meigaraテーブルの行数-1」まで回すという意味です。
なぜ-1かというと、.NETの配列の添え字は0から始まるからです。
例えばデータが5行だと「0行目から4行目」という風に表されます。
なので、n行の時0からn-1までループするためにこう書いています。

このループの中で、3つの項目を移送していきます。
HoyuKabuGridに直接移送しても良いのですが、1行が長くなると何をしているか
後で読みにくくなるので、一旦各DataTableの該当行(DataRow)を取得してから
項目移送する事にします。For文の中に2行追加します。

Dim row1 As DataRow = ds.Tables("meigara").Rows(i)
Dim row2 As DataRow = ds.Tables("hoyukabuTategyokuItem").Rows(i)


「row1」や「row2」は変数名なので何でも構いません。
DataSet「ds」「Tables」プロパティはDataTableを表し「Rows」プロパティは
そのテーブルの全行を表すんでした。そのi番目というカッコを付ける事によって
ある1行を表す事になります。型はDataRowです。
両テーブルとも同じ添え字を使っているので、同じ保有銘柄を指しています。

あとはrow1とrow2の3項目をHoyuKabuGridに移送すれば終わりです。
HoyuKabuGridは空なので、ループを回す毎に行を追加しなければなりません。
行を追加するためにはDataGridViewの「Rows」プロパティにあるAdd()メソッド
使うのですが、その方法はいくつものバリエーションがあります。
「シグニチャ(シグネチャ)」というのですが、ご存じない方は無視して下さい。
今回は、全く引数の無いAdd()メソッドを使用し、空の新規行を追加した上で
その行の項目にデータを移送するという方法を取ります。
まずはHoyuKabuGridへの行の追加です。

HoyuKabuGrid.Rows.Add()

そして3項目の移送はこうなります。

HoyuKabuGrid.Rows(i).Cells("shokenCode").Value = row1.Item("shokenCode")
HoyuKabuGrid.Rows(i).Cells("tanka").Value = row2.Item("tanka")
HoyuKabuGrid.Rows(i).Cells("suryo").Value = row2.Item("suryo")


例えば1行目は、HoyuKabuGridのi行目(今追加した行)の「shokenCode」という
セルの値に、row1の列「shokenCode」を移送する
という意味です。
残り2つの項目は移送元のDataRowが違うのでrow2になっている事にご注意下さい。

これで保有株一覧を画面に表示する事が出来ます!
でも、せっかくですから最後に結果メッセージをダイアログ表示します。
これは何度もやってますので皆さん大丈夫ですね?

MessageBox.Show(ds.Tables("hoyukabuTategyokuListResponse").Rows(0).Item("message"))

では早速実行し、ログイン後に「保有株一覧取得」をクリックしてみて下さい。
どうですか?保有株の一覧がDataGridViewに表示されましたか?

WS000084.JPG

HoyuKabuList_Click()メソッドは最終的に以下のようになりました。

WS000085.JPG


これで私が予定していた「クリック証券のWebサービスで発注する」編は終わりました。
今は次の予定もありません。
「楽天RSSでリアルタイム情報を取得する」とのペアにより、自動売買プログラムを
作る為にどんな事をするのか全く分からなかった方のとっかかりにはなったのでは
無いかと自負しています。
ところがご紹介した内容は本当に基礎の基礎です。
これらの内容を元にご自分でプログラムの勉強をして、本当に自動売買プログラムが
開発出来るスキルを身に付けて欲しいと思います。

ところで、恐らくこのブログをご覧の方の中には、実現方法が分からなかったり
解決出来ないバグが出るなど、色々な事で悩まれている方がいらっしゃるのでは
無いかと推測します。
私が答えられる事であれば、時間の許す限り回答していきたいと思いますので、
遠慮なくブログ上にコメント頂けたらと思います。
また「こんな内容で入門編を連載して欲しい」などの要望もお待ちしております。
私の気力があれば連載させて頂くかも知れません(笑)。


宜しくお願いします。





楽天SocialNewsに投稿!

Last updated  Jan 12, 2009 02:35:24 AM
コメント(0) | コメントを書く

Jan 10, 2009

 クリック証券のWebサービスで発注する<その7>

クリック証券Webサービスについての記事は今回を最終回にするつもりでしたが、今回は
準備も含めて長くなりますので、2回に分けて書きたいと思います。すみません。

前回の記事にgatさんからコメント頂いた事から、一覧形式でのデータをどう扱うかに
ついて悩まれている方がいらっしゃる事が分かりました。
今回の内容が理解出来れば、恐らく他の全ての発注について応用可能だと思います。
保有株一覧の取得です。では早速始めます。

序盤の説明はログインボタンや余力確認ボタンと同様なので割愛させて頂きます。
Form3にボタンを追加後、Textプロパティを「保有株一覧取得」、Nameプロパティを
「HoyuKabuList」
と変更した後でボタンをダブルクリックし、ソースコードを生成しました。

保有株一覧は余力情報のようにダイアログ表示するだけでは済まないのですが
まず最初のステップとして、Webサービスの呼び出しの結果XMLがDataSetに格納すると
どのような状態になるのか確認するために以下のソースコードを記述します。

'保有株一覧の取得
Dim res As WebResponse = HttpPost(baseUrl & "/ws/kabu/hoyukabuTategyokuList.do", "lst=1")
'株式余力情報の取得結果をDataSetに取り込む
Dim ds As New DataSet
Using resStream As Stream = res.GetResponseStream()
  ds.ReadXml(resStream)
End Using
Console.WriteLine(ds.GetXml)


「クリック証券 Webサービス仕様書【株式取引編】- 第2.1.0版 -」
の39ページに記載されている通り、送信パラメータが1つ存在します。一覧指定「lst」です。
必要に応じて1、2、3のいずれかを指定して下さい。
今回は「保有株のみ」の1を設定しています。

記述出来たら一度実行してみて下さい。
保有株一覧取得の前に、ちゃんとログインして下さいね(笑)。

ボタンを押すと「出力」ウィンドウに文字列が表示されます。以下は私の保有株2つの例です。

<hoyukabuTategyokuListResponse>
 <responseStatus>OK</responseStatus>
 <message>保有株、信用建玉一覧の取得が完了しました。</message>
 <hoyukabuTategyokuList>
  <hoyukabuTategyokuItem>
   <shubetsu>1</shubetsu>
   <chumonKano>1</chumonKano>
   <baibai />
   <shijo />
   <koza>2</koza>
   <shinyo>0</shinyo>
   <suryo>300</suryo>
   <chumonSuryo>0</chumonSuryo>
   <tatebi />
   <hensaiKijitsu />
   <tanka>14</tanka>
   <shiharaiShokeihi />
   <uketoriRisoku />
   <tategyokuKey />
   <meigara shokenCode="1844" />
  </hoyukabuTategyokuItem>
  <hoyukabuTategyokuItem>
   <shubetsu>1</shubetsu>
   <chumonKano>1</chumonKano>
   <baibai />
   <shijo />
   <koza>2</koza>
   <shinyo>0</shinyo>
   <suryo>9</suryo>
   <chumonSuryo>0</chumonSuryo>
   <tatebi />
   <hensaiKijitsu />
   <tanka>81</tanka>
   <shiharaiShokeihi />
   <uketoriRisoku />
   <tategyokuKey />
   <meigara shokenCode="2316" />
  </hoyukabuTategyokuItem>
 </hoyukabuTategyokuList>
</hoyukabuTategyokuListResponse>


これはWebサービスの結果XMLを表示したものではなく、
「結果XML→DataSet→XML」と変換したものです。DataSetの中でどんなDataTableとして
保持されているかを確認する事が出来ます。
仕様書に書いている「応答メッセージの例」とは順番が異なっている事にお気付きでしょうか。

このデータはDataSetの中でどういう風に保持されているのでしょうか。
まず「hoyukabuTategyokuListResponse」という名前のDataTableが存在します。
列はresponseStatus」と「message」の2つで、中には1レコードが登録されています。
データは「OK」「保有株、信用建玉一覧の取得が完了しました。」です。
2テーブル目は「hoyukabuTategyokuItem」です。但し、中身はありません。
3テーブル目は「hoyukabuTategyokuItem」で「shubetsu」「chumonKano」など
沢山の列が定義されていて、2銘柄分となる2レコードが登録されています。
最後4テーブル目に「meigara」というテーブルがあり「shokenCode」という列のみ存在します。
データは2レコードです。

こんな具合に登録されているので、中身を確認する事無くDataSetからデータを取得しようと
した時に混乱してしまいます。
でも内容が分かったのでもう安心ですよね?

2つ目のテーブルは何も入っていないので無視します。
1つ目のテーブルは結果ステータスとメッセージですので、画面に一覧を表示した後に
メッセージをダイアログ表示するために使いましょう。
残るは「hoyukabuTategyokuItem」テーブルと「meigara」テーブルです。
2テーブルに分かれていたら見難いので、両方合わせて一覧に表示したいところです。
では画面に一覧形式のデータを表示するにはどうすれば良いでしょうか。
最もよく利用されているのは「DataGridView」です。
表形式で参照出来てデータ数が可変なので便利です。

では、画面にDataGridViewを追加します。ボタンなどのようにツールボックスからForm3に
ドラッグ&ドロップして下さい。
DataGridViewの「Name」プロパティは「HoyuKabuGrid」に変更します。
Form3の大きさやボタンの配置など、見映えが良くなるようにレイアウトし直しましょう。
私はこんな風にしました。

WS000076.JPG

HoyuKabuGridを選択した状態でプロパティ「Anchor」を四方全てにすると、
実行時にFormの大きさを変えたらHoyuKabuGridの大きさもそれに付いて変わってくれるので
便利です。設定しておきましょう。

WS000077.JPG

DataGridViewはDataTableなどをバインド(紐付け)すると、DataTableで定義されている
列の情報をそのまま表示してくれるので便利ですが、今回は独自で設定した列に
手作業でデータを追加していきたいので、まだ列の設定がされていない空のHoyuKabuGridに
設定していきます。
HoyuKabuGridを選択し、右上角の小さい右向き黒三角のボタンをクリックして下さい。

WS000078.JPG

表示される「列の追加」ダイアログを使って列を追加していきますが、この記事では

・証券コード(shokenCode)
・取得単価(tanka)
・保有数量(suryo)


の3つに留めておきます。必要に応じて追加して下さい。
日本語名称は「ヘッダーテキスト」に。ローマ字名は「名前」に。ユーザーが取得した
データを変更する必要は無いので「読み取り専用」のチェックを付けて下さい。
あとのプロパティは変更しなくて結構です。

WS000079.JPG

3つの列が追加出来たら「閉じる」をクリックして下さい。

次に「列の編集」を行います。もし間違って変な列を追加してしまった場合もここで
削除出来ますのでご安心下さい。
ここでは、取得単価と保有数量は数値ですので、見映え良く右詰めで表示したいので
プロパティを変更します。
取得単価を選択した状態で「DefaultCellStyle」の右にある小さなボタンをクリックして下さい。

WS000080.JPG

するとCellStyleビルダが表示されるので「Alignment」の値を「MiddleRight」に変更します。
同様の作業を保有数量に対しても行います。

WS000081.JPG

そして最後に、HoyuKabuGridに対してユーザーがデータを追加する事が出来ないようにします。
HoyuKabuGridを選択してプロパティ「AllowUserToAddRows」を「False」に変更します。
同様にして、プロパティ「RowHeadersVisible」も「False」に変更します。
一番左にある、いわゆる「レコードセレクタ」の列が非表示になります。
今回はデータの取得のみで行を選択する事は無いので不要でしょう。

WS000082.JPG

これでHoyuKabuGridの準備は完了です!
いよいよ取得結果をHoyuKabuGridに格納していく作業を実装します。
保有株一覧取得をダブルクリックするか、ソリューションエクスプローラから「コードの表示」を
クリックしてソースコードを表示します。
先ほどDataSetの中身を確認するために入れた一番下の行はいらないので削除し、その下に
コードを追加していく事になります。


・・・さて今回はここまでです。
メインとなる部分をほったらかして次回に回してしまいますが、ここまで解説すれば
あとは自分で実装出来る方も多いのでは無いかと思います。
とは言え最後はDataSetとDataGridViewの泥臭い作業ですのでちょっとややこしいです。
なるべく早く次の投稿をするつもりですが、時間と気力のある方は挑戦してみて下さい。

現在のソースコードは以下のようになっています。

WS000083.JPG

ではでは。





楽天SocialNewsに投稿!

Last updated  Jan 10, 2009 02:57:50 PM
コメント(0) | コメントを書く

Jan 6, 2009

 クリック証券のWebサービスで発注する<その6> (4)

前回クリック証券へのログインが終了したので、分かる方は既に発注について
応用されていると思っています。
でもこのまま放っておいてもいけないので、私は今回を含めあと2回記事を書く予定です。
1つは、多分一番簡単だと思っている余力情報の確認です。
ログインが理解出来た方はすぐに出来ます。
もう1つは、一覧形式をやっておこうという事で、保有株の一覧取得をやってみたいと思います。

今回はサラッと流します。

まずForm3にボタンを配置し、プロパティウィンドウから「Text」の値を"余力確認"に。
「Name」の値を"Yoryoku"に
変更して下さい。

WS000072.JPG

次にそのボタンをダブルクリックし、ソースを開きます。
余力情報確認メソッドが出来ましたので、中にコーディングしていきます。

WS000073.JPG

ログイン処理では複雑なシーケンスがあったので面倒でしたが、今回は不要です。
ログインに使ったクッキーはForm3クラス内にありますので、それを使って
余力確認用のURLを呼び出すだけです。
その時、ログイン時に確保した基底URLも使います。覚えてますか?(笑)

余力確認用のURLは
「クリック証券 Webサービス仕様書【株式取引編】- 第2.1.0版 -」
の65ページに記載されています。

コーディングは、ごちゃごちゃ説明しません。こんな感じになります。

'株式余力情報の取得
Dim res As WebResponse = HttpPost(baseUrl & "/ws/kabu/kabuYoryokuJoho.do", "")
'株式余力情報の取得結果をDataSetに取り込む
Dim ds As New DataSet
Using resStream As Stream = res.GetResponseStream()
  ds.ReadXml(resStream)
End Using
'株式余力情報をダイアログ表示
MessageBox.Show(ds.Tables("kabuYoryokuJohoItem").Rows(0).Item("genbutsuKaitsuke") & "円です。")


まさにログイン処理の応用で出来ますよね!?

一度実行してみて下さい。
もちろん先にログインボタンを押し、ログイン出来てから余力情報取得ボタンを押して下さいね。

こんな風に出力されたら成功です。

WS000074.JPG

ちなみに、この「7円」は私の今の本当の余力ですよ(´д`;

最終的にソースは以下のようになっている筈です。

WS000075.JPG


・・・今回はちょっと手抜きでしたが、どうだったでしょうか?
これで他の発注も基本的に出来るはずですよね!?
次回はXML情報の扱いのためだけの解説と言っても過言ではない、保有株一覧の取得を行います。
ではでは。





楽天SocialNewsに投稿!

Last updated  Jan 7, 2009 12:10:31 AM
コメント(4) | コメントを書く

Dec 27, 2008

 クリック証券のWebサービスで発注する<その5> (9)

前回の投稿から2週間以上が過ぎすみません。
クリック証券部分について解説するために自分のプログラムKATSの該当部分も
開発当時より少し改良した方が良いと思い作業を進めるうち、Webサービス呼び出しの
クラスライブラリ自体の大幅リファクタリングとなってしまい、連載が滞ってしまいました。

ブログを読んで下さっている方から「続きを首を長くして待っております・・・
がんばってください・・・」というコメントを頂き「早く続きを書かないと!」と
思いました。今後も、もし滞っている事があれば声を掛けて頂けたらと思います。
皆さんの期待が私の活力になりますので。

さて前回はログインボタンの作成まで行いました。
いよいよ今回はログイン処理を実装していきます。

私は手元にある
「クリック証券 Webサービス仕様書【ログイン編】- 第2.1.0版 -」
を元に解説を書いていきます。

最初ログインシーケンスについての解説を読んで「ん!?」と悩まれた方も
多いのでは無いかと思います。
でも実際Webサービスを呼び出す時には、2回のリクエスト送信を意識するだけです。
では早速書いていきましょう。

まずはログインシーケンス1です。
仕様書の6ページにある要求URLと、それに付随する要求BODY(リクエストパラメータ)を
使ってHTTPリクエストを送信します。
<その3>で作成したHttpPost()メソッドを使用します。

引数はURLとパラメータですのでそのままですね。
呼び出す時にはこう書きます。

Dim res As WebResponse = HttpPost("https://~~/ws-redirect", "u=xxxxxx")

リクエストURLを伏せていますが、Confidential情報だからです。
クリック証券は口座開設した人にのみ仕様書を公開していますので。
クリック証券Webサービスを使用される方は仕様書を見ればURLは分かりますので大丈夫です。
リクエストパラメータにはユーザーIDを「u=」の形で渡します。
もちろんxxxxxxにはご自分のクリック証券ユーザーIDを記述して下さい。

ちなみにこの1回の処理で、ログインシーケンス2の終了まで処理が行われます。
ログインシーケンス1はリダイレクト応答なので、自動的にログインシーケンス2も
行われて戻り値のWebResponseはログインシーケンス2後の応答となります。

まずここまでして、戻って来たXML情報を覗いてみる事にしましょう。
以下のソースは応答XMLが目に見えるように、仮に記述するものです。

Dim sr As New System.IO.StreamReader(res.GetResponseStream())
Console.WriteLine(sr.ReadToEnd())


記述出来たら早速実行して、ログインボタンを押してみましょう。

出力ウィンドウに以下のように表示されたでしょうか?

WS000069.JPG

もし結果が失敗の場合は、クリック証券のサービスを有効にしていないか、
URLが間違っているか、ユーザーIDが間違っている可能性があるのでチェックして下さい。

人間が目で見たら「プレ認証が成功している」と分かります。
ですが、ログインシーケンスの続きを行うためには、このXML情報をプログラムが解釈して
「OK」を認識しないといけません。

色々なやり方がありますが、私が最も有効だと思っているやり方は、DataSetを使う方法です。
「ナンじゃそれ!?」と思われた方。確かに.NETでDB処理のプログラミングをされていない方は
馴染みの無い名前だと思います。
DataSetあるいはDataTableというのは、RDBをメモリ上で表現する非接続型のデータオブジェクトです。
元々はデータベースの情報を扱う時に便利なものなのです。
DataTableは1テーブルを表し、そのレコードとしてDataRowがあったり。
DataTableの集合としてDataSetが存在します。
ここではDataSetやDataTableなどの解説は行いません。

http://msdn.microsoft.com/ja-jp/library/zb0sdh0b.aspx
http://www.atmarkit.co.jp/fdotnet/basics/adonet04/adonet04_01.html

などで概念が分かるかも知れませんが、少々ややこしいですし今回はDBアクセスに使用する訳では
無いのであまり触れないでおきます。
でもDataSetはXMLとの親和性が高く、それを利用しない手は無いと私は思っています。
DataSetにXML情報を取り込むと、各要素をプロパティで取り出す事が可能になるからです。

能書きはこれぐらいにして早速やってみます。

先ほど書いた仮の2行の代わりに以下のコードを記述します。

Dim ds As New DataSet
Using resStream As Stream = res.GetResponseStream()
 ds.ReadXml(resStream)
End Using


「Usingブロック」は楽天RSS編でも解説した事があります。
確実にリソースを解放するために記述しています。詳細の解説は割愛します。
実際やっているのは、DataSetをインスタンス化してReadXml()を呼んでいるだけです。

以上で応答XMLをDataSetに読み込めましたが、データはどのように入っているのでしょうか?

応答XMLは

<?xml version="1.0" encoding="UTF-8"?>




<loginResponse>
<responseStatus>OK</responseStatus>
<message>PreAuthentication Success.</message>
<loginResponse>


でした。
1行目の情報はDataSetには入らず、実データの4行が解釈されます。
DataSetの中には「loginResponse」というテーブル名のDataTableが1つ。
そしてDataTableの中には「responseStatus」というカラムと「message」というカラムを持った
データ1行が入っています。

それを踏まえて「responseStatus」の内容「OK」を取得するためにはどう記述したら良いか。
このようになります。

Console.WriteLine(ds.Tables("loginResponse").Rows(0).Item("responseStatus"))

DataSetの中のloginResponseテーブルの0行目(0行目から始まります)の、
responseStatusカラムの値です。

実行して出力ウィンドウを確認すると、もちろん「OK」と表示されています。
これで応答XML情報の内容を確認する事が可能になりました。
プレ認証の結果を元にログインシーケンスの後続処理を続ける事が出来ます。

プレ認証に失敗したら結果は「NG」と返って来ますので、NGの場合はメッセージボックスを
表示して終了し、それ以外の時だけ後続処理を行うように1文入れます。

If ds.Tables("loginResponse").Rows(0).Item("responseStatus") = "NG" Then
 MessageBox.Show("プレ認証に失敗しました。")
 Return
End If


応答XMLの内容を解釈するのにやや長いコードを記述しなくてはならず、しかも内容が
少し複雑なので煩雑なソースになってしまいます。

なので、個人的にはDataSetクラスを継承して独自のプロパティを持たせたDataSetを
作成する事をお勧めします。

以下はログイン応答についてのDataSetの例ですが、理解出来る方はこのように作られては
どうでしょうか?私の提案です。

Public Class LoginDataSet
 Inherits DataSet

 ReadOnly Property 応答結果() As String
  Get
   Return Me.Tables("loginResponse").Rows(0).Item("responseStatus")
  End Get
 End Property

 ReadOnly Property 応答メッセージ() As String
  Get
   Return Me.Tables("loginResponse").Rows(0).Item("message")
  End Get
 End Property

End Class


話が少し脱線してしまいました。
ではログインシーケンス3を行います。
そのためには「基底URL」なるものを取得しなければなりません。
仕様書にはログインシーケンス1での応答ヘッダーに含まれていると書いてありますが、
プログラムでは先ほどのレスポンス情報の中にちゃんと持っています。
基底URLは、これ以降の全てのWebサービス呼び出しに必要な情報ですので、ずっと
保持しておく必要があります。

以前定義した「クッキー」と同様、クラス変数として定義します。

Private Shared baseUrl As String = ""

基底URLは、仕様書の7ページに記載されたURLの赤色部分です。
という事は後ろについている「/to~」という部分は不要で、応答URLから切り取らないと
いけません。その作業は以下のように記述します。

baseUrl = res.ResponseUri.ToString.Replace("/to~", "")

もちろん「"/to~"」の部分は、仕様書に書いている正式な文字列を書いて下さい。
やってる作業は、応答URIを文字列に変換し、不要な部分を空文字に変換する事です。

ログインシーケンス3はこの「baseUrl」を使ってこのようになります。
WebResponseの変数「res」は使い回します。

res = HttpPost(baseUrl & "/ws-login", "j_username=xxxxxx&j_password=xxxxxx")

認証処理なのでユーザーIDとパスワードが必要です。
xxxxxxの部分には、それぞれ正しいユーザーIDとパスワードを記述して下さい。

このリクエスト送信で、ログインシーケンス5まで全て完了してしまいます。
結果XMLはレスポンスにちゃんと含まれています。

プレ認証の結果はプログラムが解釈する必要がありましたが、ログイン結果は
画面にダイアログ表示する事にしましょう。

先ほどのコードを参考に、このように書けます。

ds = New DataSet
Using resStream As Stream = res.GetResponseStream()
 ds.ReadXml(resStream)
End Using
MessageBox.Show(ds.Tables("loginResponse").Rows(0).Item("message"))


実行すると、ログイン処理の結果メッセージがダイアログ表示されます!

やっとログイン処理の実装が終わりました。
でも、ログイン処理が一番ややこしいと私は思っています。
これが実装出来たら、あとの処理はこの応用です。
次回以降は余力情報の取得など、仕様書の「株式取引編」から簡単な要求について
解説するつもりです。


ログイン処理のソースは最終的にこのようになりました。

WS000071.JPG

もしご不明な点や、ご意見・ご指摘等があれば遠慮なくコメント下さい。
宜しくお願いします。





楽天SocialNewsに投稿!

Last updated  Dec 30, 2008 12:22:58 PM
コメント(9) | コメントを書く

Dec 11, 2008

 クリック証券のWebサービスで発注する<その4> (2)

前回「次回はいよいよ、ログイン処理を作成したいと思います!」と書きました。

でも実はログイン処理って通常の発注に比べて逆にややこしくて長いです。
ログイン処理の解説が終われば後はその応用で済んでしまうぐらい重要な内容です。
ですが今日はもう時間も遅いので、ログイン処理の解説を書く気力がありません。
かと言って全く書かないのもナンですし、予定を変更して申し訳ないですが
今回はログイン処理の解説をする前のつなぎの回とさせて頂きます。すみません。

別サイトへのリクエスト送信は、その権限が無いと出来ません。
先にご自分で開発してみて、以下のエラーが出た方はいらっしゃいますでしょうか?

WS000064.JPG

デフォルトでは、リクエスト送信出来ないんです。
本当はセキュリティ要件をしっかり把握して細かく設定しないといけないのですが、
今は簡単に解消するために、以下の操作を行います。

まずソリューションエクスプローラのプロジェクト名を右クリックして
「プロパティ」を選択して下さい。

WS000065.JPG

するとプロジェクトのプロパティが開きますので「セキュリティ」タグをクリックしてから
ClickOnceセキュリティのラジオボタンを「これは完全に信頼するアプリケーションです」
選択してから保存します。これで大丈夫です。

WS000066.JPG

では、次回のためにログイン処理の骨格だけ用意しておきます。
まずForm3にボタンを配置し、プロパティウィンドウから「Text」の値を"ログイン"に。
「Name」の値を"Login"に
変更して下さい。

WS000067.JPG

そして、ボタンをダブルクリックしてソースを開きます。
Login_Click()メソッドが作成されていたら成功です。

WS000068.JPG

次回は、このメソッドの中身をコーディングしていく事になります。
基本的には、前回作成したHttpPost()メソッドの呼び出しと、レスポンスに含まれている
XML情報をどうやって解釈するかだけです。

興味のある方は、クリック証券Webサービスの仕様書(ログイン編)を元にログイン処理の
実装にチャレンジしてみては如何でしょうか。

特にXML形式の結果をどうやって読み取るかは開発する人によって個人差があると思うので
私が書く前に「自分ならこうする」というのを見つけられた方が勉強になるかも知れません。

出来れば私が書いた時には「自分はこうしてるけど、お前のやり方より良いんじゃないか?」等
あれば教えて頂ければ幸いですw

ではまた(^-^)





楽天SocialNewsに投稿!

Last updated  Dec 12, 2008 12:13:32 AM
コメント(2) | コメントを書く

Dec 10, 2008

 クリック証券のWebサービスで発注する<その3>

またまた間が空いてしまいました。すみません。
今回は前回作成したHttpPost()メソッドの実装を行います。
全てのWebサービス呼び出し時に共通で使う部品のようなものなので大事です。

とは言っても、HTTPリクエストについて細かく解説するつもりは無く
「VB.NETでHTTP送信するためにはこう書きましょうね」と例を示すだけにしますので
ご了承下さい。

まずHTTPリクエストをインスタンス化します。
WebRequestクラスにはCreate()メソッドというSharedメソッドが存在します。引数は
2通り存在しますが、今回使うのはリクエストURLの文字列を渡す方です。

'リクエストの作成
Dim req As HttpWebRequest = WebRequest.Create(url)


あとは、お作法だと思って下さい。
もちろん理解するに越した事は無いので、興味のある方は勉強してみて下さい。

まずはメソッドがPOSTである事と、コンテンツタイプを指定します。

req.Method = "POST"
req.ContentType = "application/x-www-form-urlencoded"


リクエストパラメータはアスキーのバイト配列に変換します。

Dim data As Byte() = Encoding.ASCII.GetBytes(params)

この時「Imports System.Text」が必要になります。

Dim data As Byte() = System.Text.Encoding.ASCII.GetBytes(params)

と書いても良いですが。
次にデータ長を設定。

req.ContentLength = data.Length

そして大事なのが次です。
Webサービスの呼び出し元には、ログインした情報などをずっと保持しておく必要があります。
クッキーと呼ばれるものです。
HTTPリクエストにはクッキーを渡し、今後何度も行われるHTTPリクエストのために
そのクッキーを保持して毎回同じものを引き回さないといけません。
どこで保持しておくかですが、今回は簡単に考える為に、Form3クラスの変数として
直接持っている事にします。
クラス変数として

'クッキー
Private Shared cc As New CookieContainer


と指定しておき、メソッドの続きは

req.CookieContainer = cc

と、そのクッキーを設定しておきます。
続いてリクエストパラメータをリクエストに設定し、送信すればOKです。

'ポスト・データの書き込み
Dim reqStream As Stream = req.GetRequestStream()
reqStream.Write(data, 0, data.Length)
reqStream.Close()
'送信
Return req.GetResponse()


Streamのために「Imports System.IO」が必要です。
もちろん、

Dim reqStream As System.IO.Stream = req.GetRequestStream()

でも良いです。

これでHttpPost()メソッドは完成しました。現在のソースはこのようになっているはずです。

WS000063.JPG

次回はいよいよ、ログイン処理を作成したいと思います!

ログイン処理ではもちろんHttpPost()メソッドを使用するので、私が次回を書くまでに
しっかり理解しておいて下さい。

今回はここまでです。失礼します。





楽天SocialNewsに投稿!

Last updated  Dec 10, 2008 11:25:20 PM
コメント(0) | コメントを書く

<< 前のページへ一覧一番上に戻る

Powered By 楽天ブログは国内最大級の無料ブログサービスです。楽天・Infoseekと連動した豊富なコンテンツや簡単アフィリエイト機能、フォトアルバムも使えます。デザインも豊富・簡単カスタマイズが可能!

Copyright (c) 1997-2013 Rakuten, Inc. All Rights Reserved.