こんにちは、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
コメント