WebRequest 関数
この関数は、指定したサーバーにHTTPリクエストを送信します。これにより、ネット上にある他のページを参照して情報を抽出することができます。FXでの用途としては、経済指標の情報などを取得するのに使われます。
データ型と構成・戻り値
この関数には 2つの型があります。
int WebRequest(①, ②, ③, ④, ⑥, ⑦, ⑧, ⑨, ⑩); // 1.ヘッダー Content-Type:application/x-www-form-urlencoded を使用して「key=value」タイプの単純なリクエスト送信
int WebRequest(①, ②, ⑤, ⑥, ⑦, ⑨, ⑩); // 2.様々な Webサービスとのより柔軟な相互作用のヘッダーのカスタムセットを指定する任意のタイプのリクエスト送信
戻り値は、処理が成功した場合は HTTPサーバーの応答コード、エラーの場合は -1を返します。
引数 [9]
WebRequest関数は最大 9個の引数で構成されます。
番 号 | 引数名 | データ型 | 単位 | 初期値 | 説明 |
---|---|---|---|---|---|
① | method | const string | - | - | HTTPメソッド。 |
② | url | const string | - | - | URL。 |
③ | cookie | const string | - | - | Cookie 値。 (パターン 1専用) |
④ | referer | const string | - | - | HTTPリクエストの Refererヘッダーの値。 (パターン 1専用) |
⑤ | headers | const string | - | - | 改行「\r\n」で区切られたタイプ「キー:値」のリクエストヘッダー。 (パターン 2専用) |
⑥ | timeout | int | - | - | タイムアウト時間(ミリ秒単位)。 |
⑦ | &data[] | const char | - | - | HTTPメッセージ本文のデータ配列。 |
⑧ | data_size | int | - | - | 引数⑦のデータサイズ。 (パターン 1専用) |
⑨ | &result[] | char | - | - | サーバー応答データを含む配列。 |
⑩ | &result_headers | string | - | - | サーバー応答ヘッダー。 |
使用例
WebRequest関数によるネット情報の取得
WebRequest関数を使って他のサイトの文字情報を取得します。今回は、本サイトのトップページの文字情報を取得します。
文字情報を取得するにあたり、ページのソースコード中の「<p>」タブにある文字を 10文字分だけ取得して MT4の画面上にコメントとして表示させます。
MT4では本サイトのトップページの情報を取得するにあたり、「エキスパートアドバイザ」タブの設定が必要になります。
「エキスパートアドバイザ」タブの設定画面は、MT4のメニューバーの「メニュー」→「ツール」→「オプション」から「エキスパートアドバイザ」タブを選択すると表示されるので、その設定画面の「WebRequestを許可するURLリスト」にチェックを入れて、アクセス先のURLを登録します。今回は本サイトのトップページにアクセスするので、「https://naruhodo-mt4.com/」を追加して「OK」をクリックしてください。
コード
// WebRequest関数によるネット情報の取得
#property strict
void OnInit()
{
// 引数①は「GET」
string url = "https://naruhodo-mt4.com/"; // 引数②
string cookie = NULL; // 引数③
// 引数④は「NULL」
int timeout = 5000; // 引数⑥
char post[]; // 引数⑦
// 引数⑧は「0」
char result[]; // 引数⑨
string headers; // 引数⑩
ResetLastError();
int res = WebRequest("GET", url, cookie, NULL, timeout, post, 0, result, headers); // ①②③④⑥⑦⑧⑨⑩
if(res == -1) {
Print("WebRequestエラー。 エラーコード =", GetLastError());
} else {
string text = CharArrayToString(result, 0, WHOLE_ARRAY, CP_UTF8);
string str = NULL;
for (int i = 0; i < StringLen(text); i++) {
if (StringSubstr(text, i, 3) == "<p>") {
string strP = StringSubstr(text, i + 3, 10);
str = str + strP + "\n";
}
}
Comment(str);
}
}
コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)
結果
トップページの内容が変われば取得される情報も違ってきますのでご注意ください。