スポンサーリンク

【VBA】Web APIを使ってLINE通知を行う(LINE Notify)3 全コード

VBAスクレイピング

こんにちは、blueです。

前回はHTTPリクエストのGETとPOSTについて説明をしました。

前回の記事はこちら

今回はいよいよ全コードについて説明します。

これが使えるようになると

  • VBAの進行状況を通知で受け取る
  • VBAでエラーが出たときに通知を受け取る
  • スクレイピングの結果を通知で受け取る

ことなどができるとても便利な機能です。

非常に便利ですのでぜひ勉強していってください。

スポンサーリンク

全コード

今回のコードは以下です。

“access_token”にはLINE Notifyで取得したトークンを入れてください。

トークンの取得に関する記事はこちら

Sub TestMessage()

 Dim LINEMessage As String '通知させたいメッセージ
 
 LINEMessage = "処理が終了しました"
 
 Call SendMessageToLINE(LINEMessage)
 
End Sub

Sub SendMessageToLINE(LINEMessage As String)
   
   'LINE Notifyで取得したトークン
   Const token As String = "access_token"
   
   Dim http As MSXML2.XMLHTTP60
   Set http = New MSXML2.XMLHTTP60
   
   
    With http
        'HTTPリクエスト(POSTメソッド)
        Call .Open("POST", "https://notify-api.line.me/api/notify", False)
        Call .setRequestHeader("Authorization", "Bearer " & token)
        Call .setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
        Call .send("message=" & LINEMessage)
        

        Do
            If .readyState = 4 Then Exit Do
            DoEvents
        Loop
        
        'HTTPレスポンス
        '*成功時:{Res="status":200, "message":"ok"}
        Debug.Print .responseText
    
    End With
End Sub

各コードの説明

今回は以下の3つに分けて説明します

  • メッセージ
  • HTTPリクエスト
  • HTTPレスポンス

以下で説明していきます。

メッセージ

Sub TestMessage()

 Dim LINEMessage As String '通知させたいメッセージ
 
 LINEMessage = "処理が終了しました"
 
 Call SendMessageToLINE(LINEMessage)
 
End Sub

LINEMessageという変数が今回表示させたい文字列となります。

LINE通知の為のコードはメインコードとは別としたほうが見やすく、汎用性も高いのでSendMessageToLINEというプロシージャ名ででサブルーチン化しています。

HTTPリクエスト

IXMLHTTPRequestオブジェクトの生成

   Dim http As MSXML2.XMLHTTP60
   Set http = New MSXML2.XMLHTTP60

HTTPリクエストを行う為にはIXMLHTTPRequestオブジェクトを生成させる必要があります。

ただこのオブジェクトをVBAで使用するにはMicrosoft XML, v6.0を参照設定する必要があるので注意ください。

HTTPRequestオブジェクト生成に関する記事はこちら

Openメソッド

    With http
        'HTTPリクエスト(POSTメソッド)
        Call .Open("POST", "https://notify-api.line.me/api/notify", False)

指定されたURLとメソッドでリクエストを行う準備をします(Openメソッドについてはこちら

LINE Notify API Documentには以下のように書かれています。

クリックすると拡大します

このことから”method“には”POST”,”URL“には”https://https://notify-api.line.me/api/notify”を記載します。3つ目の引数はasynFlagでHTTPリクエストが失敗した場合でも次の処理は行いたいのでFalseとしています。

setRequestHeaderメソッド

        Call .setRequestHeader("Authorization", "Bearer " & token)
        Call .setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
        Call .send("message=" & LINEMessage)

HTTP要求時に送られるヘッダーを追加します。(setRequestHeaderメソッドについてはこちら

LINE Notify API Documentには以下のように書かれています。

クリックすると拡大します

少しわかりにくいですがヘッダーに”Content-Type”と”Authorization”を入れないといけないことがわかります。

setRequestHeader内は(ヘッダー名,値)で記載する為上記のようなコードになります。

なおsetRequestHeaderは複数書いてもOKです。

sendメソッド

        Call .send("message=" & LINEMessage)

サーバに HTTP リクエストを送信します。(Sendメソッドについてはこちら

LINE Notify API Documentには以下のように書かれています。

クリックすると拡大します

今回はメッセージの送信の為パラメーター名は”message”となります。

なおSend内のリクエストパラメーターは”パラメーター名=値”で記載しますので上記のようなコードになります。

readyStateプロパティ

        Do
            If .readyState = 4 Then Exit Do
            DoEvents
        Loop

readyStateプロパティはリクエストの状態を表すプロパティです。

リクエスト後のレスポンスには時間を要します。

その為以下のコードで読み込み完了まで待つことにします。

ReadyStateプロパティの値が4になれば読み込みは完了しループを抜けます。

HTTPレスポンス

responseTextプロパティ

        'HTTPレスポンス
        '*成功時:{Res="status":200, "message":"ok"}
        Debug.Print .responseText

responseTextプロパティは応答した内容を文字列として表します。

構文は以下になります。

IXMLHTTP Requestオブジェクト.responseText

今回は応答した内容をイミディエイトウィンドウに示すようにしています。

LINE Notify API Documentには以下のように書かれています。

クリックすると拡大します

今回のレスポンスは「通知がうまくいったかどうか」になるので、成功すればイミディエイトウィンドウには以下のように表示されます。

  • {“status”:200,”message”:”ok”}

コードがうまく書けていなかった場合は以下のように表示されるので修正ください。

例 Sendメソッド内で”message”パラメーター名を記載しなかった場合(必須の為)

  • {“status”:400,”message”:”message: 空要素は許可されていません”}

例 setRequestHeaderメソッド内で”Bearer”の表記がおかしかった場合

  • {“status”:401,”message”:”Missing Bearer”}

このstatusが200になれば以下のようなメッセージが届きます(3回テストしてます)。

クリックすると拡大します

これでLINE Notifyでの通知コードは完成です。

今回のまとめ

今回はVBAを使ったLINE Notifyの通知用コードについて説明しました。

このコードを使えるようになってからは通常のコードにLINEの通知を組み込んだりすることができるようになりました。

使用範囲は無限大ですのでぜひ色々な場面に利用してください。

Selenium-VBAでのWebスクレイピングに関する記事はこちらをどうぞ

【ExcelVBA‐Selenium】【永久保存版】スクレイピングに必要なSeleniumのインストール方法教えます
【Selenium-VBA】Yahooメールへのログイン方法をわかりやすく説明する
ChromeでのWebスレイピングをできる限りわかりやすく説明する(Excel VBA)
【ExcelVBA‐Selenium】Chrome driverのバージョンエラーが出た時の対処法(2021/10/7更新)
【Selenium-VBA】Seleniumを用いたスクレイピングでテーブル情報を取得する1
【Selenium-VBA】スクレイピングをするのに必要なHTMLについて説明します1
【Selenim-VBA】起動済みのChromeを用いてSeleniumによるスクレイピングを行う
【Selenium-VBA】JavaScriptを使ってスクレイピングをしてみる1
【VBA】SeleniumBasicにおけるクラス、メソッド、プロパティ一覧(日本語版)

Web-APIを用いたデータ取得に関する記事はこちらをどうぞ

【VBA】Web APIを使ってデータを取得する(OpenWeatherMap)1
【VBA】Web APIを使って時間別天気予報を取得する(気象庁API)
【VBA】Web APIを使ってLINE通知を行う(LINE Notify)1

コメント

タイトルとURLをコピーしました