そのほか
626972 ランダム
 HOME | DIARY | PROFILE 【ケータイで見る】 【ログイン】

会社員KNIGHTの株自動売買

PR

Calendar

Category

Archives

Keyword Search

▼キーワード検索

Comments

 ac_knight@ Re[1]:第46回 尼崎産業人卓球大会(11/24) ああこりゃこりゃさん >KNIGHTさんと公式…
 ああこりゃこりゃ@ Re:第46回 尼崎産業人卓球大会(11/24) KNIGHTさんと公式戦で一度お手合わせ願い…
 ac_knight@ Re[1]:第46回 尼崎産業人卓球大会(11/24) GAKOさん >Wで準優勝、おめでとうござい…
 GAKO@ Re:第46回 尼崎産業人卓球大会(11/24) Wで準優勝、おめでとうございます! 良…
 ac_knight@ Re:ふむふむ(02/12) さすらいのカットマンさん コメント有難う…
 さすらいのカットマン@ ふむふむ 高くて深いカットってすごく効きますよね…
 ac_knight@ Re[1]:売買なし11(11/15) わらふるさん >ひとつ質問なんですが、kn…
 わらふる@ Re:売買なし11(11/15) ひとつ質問なんですが、knightさんの株を…
 ac_knight@ Re[3]:私のラケットとラバーの思い出。(01/04) アザゼルさん >う~ん・・・。 >ぶっちゃけ…
 ac_knight@ Re:お疲れさまでした!(11/09) まぅさん >第一回(二回があるんかいてハ…

Favorite Blog

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

Headline News

Rakuten Ranking

Let's link!

Wishlist

Rakuten Card

Mobile

ケータイ
スマートフォン
m ケータイにこのブログのURLを送信!

 

Apr 13, 2008
楽天プロフィール XML

VB.NETで楽天RSSからリアルタイム情報を取得する<その4>

今回の内容を始める前に、<その3>で記事の修正があったので報告します。
トピック名を作るのに

Dim topic As String = 銘柄名称.Text & "." & 市場コード.Text

と書いてしまっていましたが、正しくは

Dim topic As String = 銘柄コード.Text & "." & 市場コード.Text

です。もし間違ったままの方は修正して下さい。すみません。



では気を取り直して行きましょう。
VB2008EEを立ち上げてSampleApplicationを開き、前回の終了時点の状態にして下さい。

前回も書いた「楽天RSSから情報を取得するための基本的な流れ」はこの4ステップでした。
(1)DdeClientのインスタンス化(銘柄毎に1つ)
(2)楽天RSSに接続
(3)欲しい情報を取得(複数項目ある場合は複数回)
(4)DdeClientの破棄


(1)と(2)は前回終わっているので今回は(3)からです。
銘柄名称と現在の株価を取得するんでしたね。

インスタンス化し、接続まで終わったDDEクライアントのメソッドを使って
情報を取得するのですが、使うのはRequest()メソッドです。

ここで前回紹介した「インテリセンス」を使ってみます。

仮にclient.rと打ってCTRL+スペースを押してみて下さい。候補が現れますよね?

WS000018.JPG

「Request」をマウスでダブルクリックするか、マウスかキーボードで選択して
TABキーを押すとちゃんと入力されますよね。あるいは選択している状態で
いきなり引数を書くためのカッコ「(」を入力しても良いですよ。

ここでRequest()メソッドが2種類ある事に気付きます。

Resuest(item As String, timeout As Integer) As String

というのと

Resuest(item As String, format As Integer, timeout As Integer) As Byte()

という2つです。
同じメソッド名を引数違いで定義する事をオーバーロードと言いますが、今はそんな事は
どうでも良いです(笑)。引数の多い方を使います。

理由は戻り値(最後の「As」の後ろの型)です。
最初の方はStringと書いてますが、これは文字列の事です。そして2つ目のByte()は
バイト配列です。
文字列だと何故駄目かと言いますと、文字コードが異なるからです。
楽天RSSは文字列をShift-JISで返します。ですが.NET Frameworkでは文字コードを
Unicodeで扱っている為、文字列で返されても文字化けを起こして何を書いているか全く
読めません。なので、バイト配列を返してもらって、それを自分でUnicodeの文字列に
エンコードしてやる必要があります。
・・・ウダウダ書いてますが、分からない方はやり方だけ真似して下さい。

Request()メソッドの第一引数はアイテム名ですが、これは取得する情報の名前です。
楽天RSSの関数一覧を見て書けば良いです。銘柄名称はそのまま「銘柄名称」です。
第二引数のフォーマットは整数ですが、何も考えず「1」にして下さい。
お作法だと思って下さい。そして第三引数はタイムアウト時間(ミリ秒単位)です。
例えば60000にすると60000ミリ秒なので60秒。つまり結果が返って来るまで最長1分
待ちますよ、という事になります。
どれぐらいが最適かは難しいのですが個人の価値観ですが、私は60000としています。

という事で、銘柄名称のバイト配列を返してもらうためにこう書きます。

Dim meigaraMeishoByte As Byte() = client.Request("銘柄名称", 1, 60000)

「meigaraMeishoByte」は変数名なので何でも良いのですが、そのまま真似してもらった方が
後でややこしくならないかも知れません。

次に、そのバイト配列を文字列にして画面に表示します。
ちなみに画面(Form1)の銘柄名称を表示するテキストボックスの名前を覚えていますか?
そうです。「銘柄名称」です(笑)。
画面の銘柄名称に移送するには、等号の左辺にどう書いたら良いかは想像出来ます。

銘柄名称.Text =

です。メソッドを書いているのがForm1なので、いちいち「Form1の」と書く必要が無いから
いきなり「銘柄名称」で、Form1上に存在するテキストボックスだと分かります。

そしてバイト配列を文字列に変える記述を書きます。

銘柄名称.Text = Encoding.Default.GetString(meigaraMeishoByte)

Encodingクラスを使います。
但しこうやって名前空間を省略するには、ファイルの先頭に「Imports System.Text」と
書いておかなないといけないので書いて下さい。インテリセンスを使って下さいよ!

あと、ここはかなり込み入った話なので読み流してもらっても結構ですが、取得した
バイト配列には末尾に「\0」が付いています。VB.NETで言う「vbNullChar(NULL文字)」です。
不要なので切り取ります。

Encoding.Default.GetString(meigaraMeishoByte).Replace(vbNullChar, String.Empty)

という書き方でNULL文字を空文字に置き換えるという方法がありますが、テストをした結果
書き方は長くなりますが

Encoding.Default.GetString(meigaraMeishoByte, 0, meigaraMeishoByte.Length - 1)

という風にバイト配列の末尾1バイトを切り取る方が高速だと分かりましたので
こちらの方法で記述するのをお勧めします。
特に何度も呼び出す部分なのでパフォーマンスは気にしたいですよね。

現在の株価を取得するのも全く同様に記述してみましょう。こんな風になります。

Dim praceByte As Byte() = client.Request("現在値", 1, 60000)
現在値.Text = Encoding.Default.GetString(praceByte)


現在の株価は「現在値」という名前です。

続けて最後のステップである「(4)DdeClientの破棄」も書きますよ!

client.Dispose()

これを書かないと、インスタンス化したDDEクライアントは(永久にでは無いですが)
長時間生き続けてメモリ、CPUを圧迫します。
無意味なので破棄します。Dispose()メソッドを呼び出すと、楽天RSSとの接続も
綺麗に切断し、オブジェクトを消してくれます。必ず呼び出して下さい。

現時点のソースコードはこうなってます。ご確認下さい。

WS000019.JPG

待ち遠しくてウズウズしてる方。せっかくなので試しに実行してみましょう!!
画面のこのボタンをクリックすると実行しますよ!

WS000020.JPG

画面が表示されましたか?
表示されたら、ここは楽天に敬意を表して、銘柄コードと市場コードはそれぞれ
「4755」「Q」と入力して「取得」ボタンをクリックしましょう(笑)。

WS000021.JPG

銘柄名称と現在値が表示されました!!!(もちろん現在値は実行したタイミングで違います)

WS000022.JPG

いやぁ~見事銘柄名称と現在値が表示されましたね。
これで「リクエスト形式」の方法については終わり・・・と言いたいところですが(汗)。

現在値の表示のされ方に違和感ありませんか!?(汗)

だって株価なのに「 60900.00」って。小数点付き!?しかも数値の前の空白は何??

次回はその辺りについて解説する必要がありますね。
次回に続きます!

VB2008EEは実行しているForm1を閉じるか停止ボタン(開始ボタンの2つ右)をクリックすれば
止まります。ではでは。





楽天SocialNewsに投稿!

Last updated  Apr 13, 2008 11:49:47 PM
コメント(0) | コメントを書く




■コメント


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

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