LINE Notifyを活用してLINEに通知を送るEA
LINE Notifyとは、外部のwebサービスと連携させて、
LINEのトークルームで受信できる通信機能になります。
LINE NotifyのURLにメッセージを投げる(POSTする)ことで、
自分のLINEのトークルームにそのメッセージを送ることができるので、見逃すことが少なくなります。
LINE Notifyの設定
LINE Notifyにアクセスしましょう。
ログイン画面からLINEのアカウントでログインします。LINEのアカウントがあれば、新規登録などは不要です。
LINEログインした後の画面で、右上のニックネームをクリックしてマイページに移動します。
マイページ内のトークンを発行するボタンをクリックすると、
トークン名と通知の送信先を選択するページになります。
発行したトークンは後で必要なのでコピーしておきましょう。
MT4の設定
MT4画面上部のツール→オプションを選択します。
表示されたウィンドウにてエキスパートアドバイザタブを選択します。
WebRequestを許可するURLリストにチェックを入れます。
新しいURLを追加にをクリックし以下のURLを入力しましょう。
https://notify-api.line.me/api/notify
メタエディタ(MetaEditor)を立ち上げる
メタエディタ(MetaEditor)を立ち上げましょう。今回は名前を「LINE-EA」で作成します。
LINE Notify API Documentは以下に記載しておきます。
パラメーターを記述する
パラメーターを記述しましょう。
Line_tokenには取得したURLを貼り、Send_MassageにはLINEに送りたいメッセージを記載します。
input string Line_token = "";//LINEのアクセストークン input string Send_Massage ="";//LINEに送りたいメッセージ
OnInit()関数の記述する
OnInit()関数の記述するしましょう。LineNotify関数はユーザー定義関数になります。
LineNotify()の関数を呼び出して引数をLine_tokenとSend_Massageを送ります。
これでOnInit()関数は完了です。
LineNotify(Line_token,Send_Massage);//LineNotifyを呼び出し
LineNotify関数の記述する
LineNotify関数の記述しましょう。変数をまず設定します。
string headers; char data[], result[];
headersの変数にコンテンツタイプを使用した単純なフォームを入れます。
- Authorization: Bearer
- Token
- \r\n application/x-www-form-urlencoded\r\n
をheadersに代入します。
headers="Authorization: Bearer "+Token+"\r\n application/x-www-form-urlencoded\r\n";
ArrayResize()は最初の次元のサイズを新しく設定します。
StringToCharArray()は文字列をchar型配列にコピーする関数です。
StringToCharArray()は以下の引数になっています。
int StringToCharArray( string text_string, // コピー元の文字列 uchar &array[], // コピー先配列 ※参照渡し int start = 0, // コピー開始する配列インデックス int count = -1, // コピーする文字数 uint codepage = CP_ACP // コードページ );
それらの情報を以下のように記載していきます。
ArrayResize(data,StringToCharArray("message="+Massage,data,0,WHOLE_ARRAY,CP_UTF8)-1);
WebRequest()関数は指定したサーバーにHTTPリクエストを送ります。
WebRequest()関数は以下の記事を参照してください。
int res = WebRequest("POST", "https://notify-api.line.me/api/notify", headers, 0, data, data, headers);
resの値が-1であれば、
if(res==-1)
エラーコードを出します。
Print("Error in WebRequest. Error code =",GetLastError()); MessageBox("Add the address 'https://notify-api.line.me' in the list of allowed URLs on tab 'Expert Advisors'","Error",MB_ICONINFORMATION);
LineNotify関数の記述は完了です。
void LineNotify(string Token,string Massage) { string headers;//ヘッダー char data[], result[];//データ、結果 headers="Authorization: Bearer "+Token+"\r\n application/x-www-form-urlencoded\r\n"; ArrayResize(data,StringToCharArray("message="+Massage,data,0,WHOLE_ARRAY,CP_UTF8)-1); int res = WebRequest("POST", "https://notify-api.line.me/api/notify", headers, 0, data, data, headers); if(res==-1) //エラーの場合 { Print("Error in WebRequest. Error code =",GetLastError()); MessageBox("Add the address 'https://notify-api.line.me' in the list of allowed URLs on tab 'Expert Advisors'","Error",MB_ICONINFORMATION); } }
コンパイルする
コンパイルしてMT4で起動してLINEに通知が飛んできたら完了です。
ソースコード全体
//+------------------------------------------------------------------+ //| LINE-EA.mq4 | //| Copyright 2020, FX-EA System Project Creator | //| https://creator.fx-ea-system-project.com/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, FX-EA System Project Creator" #property link "https://creator.fx-ea-system-project.com/" #property version "1.00" #property strict /*パラメーター*/ input string Line_token = "";//LINEのアクセストークン input string Send_Massage ="";//LINEに送りたいメッセージ //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- LineNotify(Line_token,Send_Massage);//LineNotifyを呼び出し //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ void LineNotify(string Token,string Massage) { string headers;//ヘッダー char data[], result[];//データ、結果 headers="Authorization: Bearer "+Token+"\r\n application/x-www-form-urlencoded\r\n"; ArrayResize(data,StringToCharArray("message="+Massage,data,0,WHOLE_ARRAY,CP_UTF8)-1); int res = WebRequest("POST", "https://notify-api.line.me/api/notify", headers, 0, data, data, headers); if(res==-1) //エラーの場合 { Print("Error in WebRequest. Error code =",GetLastError()); MessageBox("Add the address 'https://notify-api.line.me' in the list of allowed URLs on tab 'Expert Advisors'","Error",MB_ICONINFORMATION); } }
まとめ
今回はOnInit()関数内で初期時に送るようにしましたが、OnTick()関数で決められた条件内で
LineNotify()を呼び出せば条件時に通知が来るようになります。
これはぜひ自分でチャレンジして見てくださいね。
コメント