MT4のWebRequestでLINEにメッセを送る1

スポンサーリンク

指定したURLにHTTP(S)リクエストを送る、MetaTraderのWebRequest関数というものがあります。

これを使ってスマホのLINEアプリへプッシュ通知を送れないか研究してみたいと思います。

LINEアプリへのプッシュ通知

過去の記事で、MetaTraderのインジケーターからLINEアプリへプッシュ通知を送る試みをしました。

MT4からスマホのLINEアプリにプッシュ通知 予告編

MT4からスマホのLINEアプリにプッシュ通知 準備1

MT4からスマホのLINEアプリにプッシュ通知 準備2

MT4からスマホのLINEアプリにプッシュ通知 本編1

 

これは、MetaTraderの開発言語であるMQLだけで実現しているのではなく、Windowsの実行モジュールであるDLLとの合わせ技で実現しました。

しかしながら、DLLの開発にC#というプログラミング言語を使用しているため、動作させるには.NET Framework(私が作ったものはVer3.5以降)が必要になります。最近のWindowsは.NET Frameworkは普通にサポート・インストールされているので問題ないと思うのですが、すべての人の環境で問題なく動作するかがイマイチ不安でした。

そこでよくよく調べると、WebRequest関数というHTTP(S)リクエストを送る関数があるのを発見しました。

 

この関数を使ってLINEアプリへプッシュ通知・メッセージ送信にトライしてみます。

 

WebRequest関数

まず、WebRequest関数の引数、戻り値を確認しましょう。

1.シンプルなリクエストを送るタイプ

 

2.ヘッダをカスタムしてリクエストを送るタイプ

参照:MQL4 Reference

引数も多いし、同じ名前で2種類あるし、どっちを使っていいかよくわかりませんね。

どちらの関数を使って、どのように実装すればLINEのメッセージを送ることができるのでしょうか。

 

 

LINE Notifyのリクエストを見てみる

LINEでメッセージを送るためには、どのようなHTTPリクエストを送ればよいのかを解析してみます。

LINE Engineering Blogには、以下のように記載されています。

LINE Notifyで発行できる「パーソナルアクセストークン」を使い、

APIのエンドポイントにHTTP POSTリクエストを送るだけで

メッセージを送ることができます。

HTTPリクエストができればどんな方法でも使うことができますが、

ここではコマンドラインで使えるHTTPクライアントである

curlを使ってみることにします。

 

そして、実際にcurlコマンドを呼び出すことでメッセージを送ることができます。

(macをお使いの方はcurlが最初から入っていますが、Windowsをお使いの方は入っていません)

 

[access_token]に、自分のLINE Notifyのトークンを入れ、foobarにメッセージを入れて実行してください。そうすると、自分のLINE Notifyのトークルームにメッセージが送信されます。

この状態で、どのようなHTTPリクエストが送られているかを詳細にみるために、curlへ”–trace-ascii”オプションをつけて実行します。

 

log.txtには、次のようなHTTPリクエストが出力されます。

※見やすくするために、改行の挿入・削除をしています。

 

LINE NotifyのAPIを叩くには、HTTPリクエストのヘッダを14行目、17行目のようにカスタマイズし、データ本体を25〜29行目のテキストを設定して送る必要があります。

したがって、WebRequset関数は、ヘッダをカスタムして送る方を使うことになります。

 

2.ヘッダをカスタムしてリクエストを送るタイプ

参照:MQL4 Reference

この第3引数のheadersに14行目、17行目、第5引数のdataに25〜29行目のテキストを設定して、WebRequest関数を呼び出します。

なお、行頭の”005b:”などは、curlがログを読みやすくするために挿入しているものなので、”Authorization: Bearer [access_token]”といったテキストを設定します。

 

さいごに

WebRequest関数はプロトタイプが2種類あり、かつ引数がたくさんあるので一瞬ひるんでしまいます。

しかし、どの引数に、何を設定すればよいかがわかれば、あとは文字列をセットして呼び出すだけです。

ぜひ、チャレンジしてみてください。

質問はコメント欄で受け付けておりますので、お気軽にどうぞ。

 

 

 

コメント

  1. 田中たけし より:

    YOUさん初めまして。
    私もLINEに通知しようとして検索していたらこのページにたどり着きました。
    その後の調子はどうですか?

    1. YOU YOU より:

      田中たけしさん、コメントありがとうございます。

      WebRequestを使ったLINE通知ですが、
      一応実装できていますが、まだ動作検証中です。

      ちなみに、どのようなシーンでLINE通知を
      使おうとしてるのでしょうか?

      1. 田中たけし より:

        シグナルをLINE@に登録したメンバーに通知しようとしています。
        LINE Messaging API、herokuを使って実装しようとしています。

        1. YOU YOU より:

          田中たけしさん
          ご返信が遅くなりました。

          LINE@へのメッセージ送信プログラムを作ってみました。
          herokuではなく、導入の手間がかからないGoogle Apps Scriptで実装したのでご要望にかなってないかもしれないですが、参考にしてください。
          https://fx-shakariki.com/lineat_auto1/

          あと、LINE@にご登録のメンバーさんにも、ぜひ本ブログを宣伝してください(笑!

          また、何かあったらコメントしてくださいね。

  2. 須賀 より:

    はじめまして。
    25〜29行目のテキスト設定に関して質問です。
    最終的にStringToCharArrayでchar[]にするとおもうんですが、その前に25〜29行目をstringにした形がわからなかったです。改行コードやname=”message”の”はエスケープしないといけないでしょうか。
    いきなりですが、ご回答いただけると幸いです。

コメントを残す

*