3966897 ランダム
 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

Apr 13, 2008
XML
今回の内容を始める前に、<その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つ右)をクリックすれば
止まります。ではでは。





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

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



© Rakuten Group, Inc.