2025 02,09 11:00 |
|
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
|
2008 12,13 12:29 |
|
InternetConnect で取得したハンドル hConnect を使って色々な要求を出します。
その要求の方式”GET”、”POST”だとかを lpszVerb に、サーバー側のどのオブジェクトに対するリクエストかを lpszObjectName に記述してゆきます。”GET" Method を指定している場合には - サーバー側のどのプログラムを起動し、?でSymbol=Value の形でプログラムに渡すパラメータとその値を記述します。urlencode する必要がありますが StockPrice&Chart では渡すフォーマットが決まっていますから”/”、”:”は直接”%2F”とか”%3A”として設定しています。 PPC、WMでは内部は Widechar が標準のため Multibyte に変換しています。 RequestHeader に指定する情報を一度に複数指定できないので、HttpAddRequestHeaders で一つずつ指定してゆきます。ここでは指定する文字列は"\r\n"のペアで終端する必要があります。 "Accept-Encoding: gzip, inflate\r\n" はデバイスの”¥Windows”の下に zlib1.dll がある場合、gzip、inflate のフォーマットで圧縮して送るよう指示するための指定です。 zlib を使った解凍が今朝4:00前に動くようになったので別トピックに書きます。 ”POST” method を指示した場合のパラメータは HttpSendRequest の lpOptional に "Symbol=Value" で記述して”&”でつないで一つの文字列にして渡します。ここでもurlencodeが必要です。 一つのリクエストが終わって結果をすべて受け取ると次のリクエストを投げます。ただ次のリクエストを投げる前に一旦 hRequest をクローズしないとサーバーの応答がなかったのでクローズを毎回挟んでいます。 正常にリクエストを出して正常に結果を受け取っている間はリクエストを投げてクローズの繰り返しですが、エラーを検出した場合や回線の切断を行った場合 "InternetOpen" から実行するようにしています。 ”POST”の場合に必要なパラメータは Fiddler2 を使ってIEの実際のページからデータを取得して見つけています。 ソースです。 PR |
|
2008 12,10 00:41 |
|
ここで使っているCallBackのソースを掲載しておきます。オリジナル(ほとんど変えていませんが)ではコンソールアプリのためデバッグ・メッセージをコンソール出力していますが、それをはずしたものを使っています。
BUG: Error 12019 When Calling InternetWriteFileというトピックのマイクロソフト・サポートオンラインからダウンロードしてきたものです。 dwContext で渡ってきた1、2で見るステータスや、シグナルするイベントを変えています。 それにしてもWInInetのAPIを使ったAsync/POSTのサンプルや解説が少ないです。 |
|
2008 12,09 00:25 |
|
StockPrice 2.1.2をリリースします。
Bug Fix と機能追加です。 WinInet APIを使ったサイトデータの取得をSyncからAsyncに全面書き直しを行ったのと、POST METHODを使い3ヶ月分の時系列データの取り込み・表示・エキスポートが出来るようになっています。 また5つのタイムアウト(ConnMgrEstablishConnection、InternetConnect、HttpOpenRequest、HttpSendRequest、InternetReadFile)をレジストリで設定できるようにしています。 ConnMgrEstablishConnectionが300秒、それ以外は30秒を設定していますが、場合によってはHttpSendRequestはもっと長い方が良いかもしれません。レジストリ・ファイルに5つのタイムアウトも入れておきましたので、タイムアウトが頻発するようであれば長めに設定してみて下さい。 設定単位はミリ秒です。30秒は30000ms。16進で設定しますから 00007530 になります。 Windowsの電卓で10進/16進変換が出来ます。 また引き続きTouch Diamondのユーザーからご連絡頂いたStockChart起動時の「お詫び」画面(Exception)が発生しないように修正してみました。直っていると良いのですが。。。 今回3ヶ月分のデータをグラフで表示してみたら、iPAQ hx4700 のVGAですらLANDSCAPEでの全画面表示でないと全データの表示が出来ませんでした。 仕方が無いので過去のデータは見える範囲で表示、直近のデータは必ず表示するようにしています。 全部を一度で見たい場合にはVGAのLANDSCAPE全画面表示かCSVにエキスポートしてPCのExcelか何かで見てください。 スクロール・バーを置くことも検討していますが、あまり見やすくはならないかもしれません。 *** 注意 *** 今回レジストリを幾つか変更しましたので、必ず以前のバージョンをアプリケーションの追加と削除のメニューで削除してからインストールするようにしてください。添付しているReadMe.txtを参照してください。 変更点は ■ バージョンアップ履歴 V2.1.2 - WinInet APIを使ったサイトデータの取得を全面的に書き直した。 ・ SyncからAsync ・ POST METHODによる3ヶ月時系列データの取得と表示 ・ タイムアウトをレジストリで設定出来るようにした。 - 編集メニュー(新規追加、修正)での株式名検索時にプログレスバーを表示 - StockChart起動時のパラメータの渡し方を修正した。 LPARAMとして渡されたlParamを直接変更してStockChartに渡すのではなく、NULLかどうか確認後 自動変数にコピーしてStockChartのパラメータとするように変更。 メニューから起動時、NULLポインターが渡ってくるケースがあるようです。 「お詫び」画面の原因がこれだと直っている事が期待できます。 - StockChartのグラフがオプションを起動、終了すると消えているバグを修正。 - チャートの軸と刻みの計算方法を修正。(まだまだ改善が必要ですが一旦これでリリースします) ・ 株式の出来高が全部 0 の時系列データが存在します。(私にその理由はわかりません) そういった場合に、何もグラフを描かないバグがあったのを修正。 ・ 海外の株式ですが、出来高以外の時系列データが全て 1.0 未満の場合、ゼロDivideエラーを 起こしていたのを修正。 Symantec EndPoint でウイルス定義ファイル(2008/12/7-r20)を使ってチェック済みのzipファイルをアップロードしていますが、ダウンロード後再度ご確認をお勧めしておきます。 ダウンロードはここから (2008/12/20 配信終了) Enjoy! |
|
2008 12,07 22:10 |
|
InternetOpenで返ってきたハンドルでそこにどんなプロトコル(HTTPなのかFTPなのか)を流すかここで定義します。ここでは認証のためのユーザー名パスワードも指定できるようになっていますが、StockPrice&Chartでは不要なのでNULLを指定しています。
dwFlagはFTPを使うときに必要な引数なのでここではNULLです。 dwContextはCallBackルーティンに渡すポインタです。現在ポインタで渡さなければならないほど沢山の情報がないので、ここではCallBackルーティンにInternetConnectで起こったCallBackである事を伝える(1)という値を設定しています。 InnternetConnectを非同期に抜けてきた後 WaitForSingleObject では hConnectedEvent がシグナルされるのを待っているのでCallBack の中ではdwContextポインタが1の場合、Connected の状態になると hConnectedEvent をセットするようになっています。 ソースです。 |
|
2008 12,07 01:22 |
|
忍者ブログ [PR] |