fc2ブログ

05 « 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 07

不労所得で生活できるのか?

主にMT4関連のツールやEAを作ってます。 夢の自動集金マシン(?)は存在するのか・・・。

【GetHtmlSrc】EAからサイトのHTMLソースを取得するDLL 

久々のブログ更新なので、どんなテンションで書いていたか忘れてしまいました( ´,_ゝ`)プッ

そんな事はさておき、掲題の様な機能を持つDLLを公開します。

WebGet等既存のDLLもあるみたいですが、自分的に使いやすいように作ってみました。

このDLLを使って様々なFXの情報サイトに公開されているエントリー情報を

EAから取得して自動化しようという算段です・・・あい変わらず他力本願ヾ(--;)

なお、HTMLの漢字コードの変換にnkfwinを使用しています(GetHtmlSrcアーカイブ内にも同梱)。

【ファイル構成】
GetHtmlSrc100.zip
│ nkfwin.zip・・・ネットワーク用漢字コード変換フィルタのアーカイブ
│ ReadMe.txt・・・このファイル

└─MetaTrader4
    │ nkf32.dll・・・nkfwin.zip内の(NT,2000,XP,Vista,7)用dllを抜き出した物
    │
    └─experts
      │ sample.mq4・・・使い方のサンプルEA
      │
      ├─include
      │ GetHtmlSrc.mqh・・・GetHtmlSrc.dll使用時のインクルードファイル
      │
      └─libraries
        GetHtmlSrc.dll・・・dll本体

【EAコーディング及び実行時のファイル配置】
・nkf32.dll
 MT4フォルダ(Terminal.exeと同じフォルダ)またはWindowsのSystem32フォルダへ配置してください。
 MT4フォルダ\experts\librariesフォルダでありません。

・GetHtmlSrc.mqh
 MT4フォルダ\experts\includeへ配置してください。

・GetHtmlSrc.dll
 MT4フォルダ\experts\librariesへ配置してください。

【関数一覧】
int LockBuffer();
 GetHtmlSrcの使用宣言。最初に必ず実行する必要があります。
 GetHtmlSrc.dll内のHTMLバッファをロックします。
 返値は以後の関数で使用するハンドルです。
 成功すると0以外の値が返ります。

bool SetBufferSize(int handle, int Size);
 GetHtmlSrc.dll内のHTML取得バッファのサイズをバイト単位で指定します。
 GetHtmlSrc.dllではデフォルトで128KBのバッファを確保するので、
 通常は特に使用する必要はありません。
 引数handleにはLockBuffer()の返値を、Sizeにはバッファのサイズを
 バイト単位で指定します。
 返値trueが成功、falseなら失敗です。

int GetHtmlSrcAll(int handle, string url);
 指定urlのHTMLを一気にGetHtmlSrc.dll内バッファに読み込み、nkf32.dllを使用して
 漢字コードをShift-JISに変換します。
 引数handleにはLockBuffer()の返値を、urlには取得したいサイトのurlを指定します。
 返値は取得変換後のバイト数です。

int ReadRow(int handle, string Buff, int MaxSize);
 HTMLを行単位(0x0d-0x0aまたは0x0aまで)で取得します。
 引数handleにはLockBuffer()の返値を指定します。Buffに取得されたHTMLが
 返ります。MaxSizeにはBuffのサイズを指定します。
 返値は取得したバイト数です。
 BuffはEA側での宣言時に十分な長さの文字列で初期化しておく必要があります。
 行の長さがMaxSize-1より長い場合、行の残りは次回のReadRow()実行時に持ち越されます。
 取得データは0x00でターミネートされます。

bool UnLockBuffer(int handle);
 GetHtmlSrc内のHTMLバッファ占有を終了宣言する関数です。一連のHTML取得が終わったら
 速やかに実行してください。
 引数handleにはLockBuffer()の返値を指定します。
 GetHtmlSrcはHTMLバッファを一つだけ保有する仕様なので
 一度に1つのプロセスしか処理できません。
 特に複数のチャートにセットしたEAから使用される場合、ロック期間を
 できるだけ短くする必要があります。

【使用法】


//行読み取りバッファ・・・できるだけ長い文字列で初期化する
static string ReadBuff = "****************... "; //実際には256文字埋める

//ReadBuffの長さを定義
#define READ_BUFF_SIZE 256

int handle = LockBuffer(); //バッファをこのEA用にロック
if(handle != 0){
int bytes = GetHtmlSrcAll(handle, "http://yukipro.net/"); //全HTML読み込み
while(true){
bytes = ReadRow(handle, ReadBuff, READ_BUFF_SIZE); //1行取得
if(bytes < 0)
break; //eof
Print(ReadBuff); //試しにExpertsログに出力
}
UnLockBuffer(handle); //ロック解除
}


より詳細で具体的な使用法についてはGetHtmlSrc100.zip内のsample.mq4をご覧ください。
日本語でコメントを記述しているのでMeta Editorのフォントを
MSゴシック等の日本語にしてご覧ください。

【その他】
nkfwin.zipの問合せ、取扱いについてはnkfwin.zip内のドキュメントを参照してください。

★次回の記事で実際に自動エントリーするEAをソースで公開!★

※2012/11/20追記
InternetOpenUrl()呼び出し時のフラグにINTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHEを
指定するように変更し、バージョンを1.01としました。

「GetHtmlSrc1.01」のダウンロードは→こちら←をクリック。

いつも応援ありがとうございます。m(__)m

スポンサーサイト



2012/11/18 Sun. 11:20 | trackback: -- | comment: -- | edit