Win/mac両対応のVBA用ライブラリ[VBA-Web]を使ってみよう


VBAでWebアクセスする方法を調べると、そのほとんどがWindowsAPIの「URLDownloadToFileを使って簡単にできる!」といった記事だ。まぁ間違ってはいないのだが、WindowsAPIを使うのでWindowsでのみ使える方法だ(当たり前)。mac「のみ」を使用している個人事業主も増えている昨今、mac版VBAにも対応したWebアクセスの方法を紹介している記事はいないのかと探していたところ、Win/mac両対応ライブラリ「VBA-Web」を発見した。ただ、日本語の情報がほとんど見つからなかったので、自分の備忘も兼ねてここで紹介したいと思う。

以下は公式「Readme」のGoogle翻訳。


VBA-Web

VBA-Web (formerly Excel-REST) makes working with complex webservices and APIs easy with VBA on Windows and Mac. It includes support for authentication, automatically converting and parsing JSON, working with cookies and headers, and much more.

VBA-Web(以前のExcel-REST)は、WindowsとMacのVBAで複雑なWebサービスとAPIを簡単に操作できるようにします。 認証のサポート、JSONの自動変換と解析、Cookieとヘッダーの操作などが含まれます。


Getting started

  • Download the latest release (v4.1.6)
  • To install/upgrade in an existing file, use VBA-Web - Installer.xlsm
  • To start from scratch in Excel, VBA-Web - Blank.xlsm has everything setup and ready to go

For more details see the Wiki

  • 最新リリース(v4.1.6)をダウンロードします
  • 既存のファイルにインストール/アップグレードするには、 VBA-Web-Installer.xlsmを使用します
  • Excelでゼロから始めるために、 VBA-Web-Blank.xlsmはすべてのセットアップと準備が整っています

詳細については、Wiki

Upgrading

To upgrade from Excel-REST to VBA-Web, follow the Upgrading Guide

Note: XML support has been temporarily removed from VBA-Web while parser issues for Mac are resolved.
XML support is still possible on Windows, follow these instructions to use a custom formatter.

Excel-RESTからVBA-Webにアップグレードするには、アップグレードガイドに従ってください

注:Macのパーサーの問題が解決されている間、XMLサポートはVBA-Webから一時的に削除されました。
WindowsでもXMLサポートは可能です。これらの手順に従ってカスタムフォーマッタを使用してください。

Notes

  • Authentication support is built-in, with suppory for HTTP Basic, OAuth 1.0, OAuth 2.0, Windows, Digest, Google, and more. See Authentication for more information
  • For proxy environments, Client.EnabledAutoProxy = True will automatically load proxy settings
  • Support for custom request and response formats. See RegisterConverter

  • 認証サポートが組み込まれており、HTTP Basic、OAuth 1.0、OAuth 2.0、Windows、Digest、Googleなどに対応しています。 詳細については、認証を参照してください

  • プロキシ環境の場合、 Client.EnabledAutoProxy = Trueは自動的にプロキシ設定を読み込みます

  • カスタム要求および応答フォーマットのサポート。 RegisterConverterを参照してください

Examples

The following examples demonstrate using the Google Maps API to get directions between two locations.

次の例は、Google Maps APIを使用して2つの場所間のルートを取得する方法を示しています。

GetJSON Example

Function GetDirections(Origin As String, Destination As String) As String
    ' Create a WebClient for executing requests
    ' and set a base url that all requests will be appended to
    ' リクエストを実行するためのWebClientを作成し、
    ' すべてのリクエストが追加されるベースURLを設定します
    Dim MapsClient As New WebClient
    MapsClient.BaseUrl = "https://maps.googleapis.com/maps/api/"

    ' Use GetJSON helper to execute simple request and work with response
    ' GetJSONヘルパーを使用して単純な要求を実行し、応答を処理する
    Dim Resource As String
    Dim Response As WebResponse

    Resource = "directions/json?" & _
        "origin=" & Origin & _
        "&destination=" & Destination & _
        "&sensor=false"
    Set Response = MapsClient.GetJSON(Resource)

    ' => GET https://maps.../api/directions/json?origin=...&destination=...&sensor=false

    ProcessDirections Response
End Function

Public Sub ProcessDirections(Response As WebResponse)
    If Response.StatusCode = WebStatusCode.Ok Then
        Dim Route As Dictionary
        Set Route = Response.Data("routes")(1)("legs")(1)

        Debug.Print "It will take " & Route("duration")("text") & _
            " to travel " & Route("distance")("text") & _
            " from " & Route("start_address") & _
            " to " & Route("end_address")
    Else
        Debug.Print "Error: " & Response.Content
    End If
End Sub

There are 3 primary components in VBA-Web:

  1. WebRequest for defining complex requests
  2. WebClient for executing requests
  3. WebResponse for dealing with responses.

In the above example, the request is fairly simple, so we can skip creating a WebRequest and instead use the Client.GetJSON helper to GET json from a specific url. In processing the response, we can look at the StatusCode to make sure the request succeeded and then use the parsed json in the Data parameter to extract complex information from the response.

VBA-Webには3つの主要コンポーネントがあります。

  1. 複雑なリクエストを定義するための WebRequest
  2. リクエストを実行するための WebClient
  3. 応答を処理するための「WebResponse」。

上記の例では、リクエストはかなり単純なので、 WebRequestの作成をスキップして、代わりにClient.GetJSONヘルパーを使用して特定のURLからjsonを取得できます。 レスポンスの処理では、 StatusCodeを見てリクエストが成功したことを確認し、解析されたjsonをDataパラメーターで使用してレスポンスから複雑な情報を抽出します。

WebRequest Example

If you wish to have more control over the request, the following example uses WebRequest to define a complex request.

リクエストをより詳細に制御したい場合は、次の例で WebRequestを使用して複雑なリクエストを定義します。

Function GetDirections(Origin As String, Destination As String) As String
    Dim MapsClient As New WebClient
    MapsClient.BaseUrl = "https://maps.googleapis.com/maps/api/"

    ' Create a WebRequest for getting directions
    ' ルートを取得するためのWebRequestを作成する
    Dim DirectionsRequest As New WebRequest
    DirectionsRequest.Resource = "directions/{format}"
    DirectionsRequest.Method = WebMethod.HttpGet

    ' Set the request format
    ' -> Sets content-type and accept headers and parses the response
    ' リクエストフォーマットを設定する
    ' -> content-typeを設定し、ヘッダーを受け入れ、応答を解析します
    DirectionsRequest.Format = WebFormat.Json

    ' Replace {format} segment
    ' {format}セグメントを置き換える
    DirectionsRequest.AddUrlSegment "format", "json"

    ' Add querystring to the request
    ' クエリ文字列をリクエストに追加する
    DirectionsRequest.AddQuerystringParam "origin", Origin
    DirectionsRequest.AddQuerystringParam "destination", Destination
    DirectionsRequest.AddQuerystringParam "sensor", "false"

    ' => GET https://maps.../api/directions/json?origin=...&destination=...&sensor=false

    ' Execute the request and work with the response
    ' リクエストを実行してレスポンスを操作する
    Dim Response As WebResponse
    Set Response = MapsClient.Execute(DirectionsRequest)

    ProcessDirections Response
End Function

Public Sub ProcessDirections(Response As WebResponse)
    ' ... Same as previous example
End Sub

The above example demonstrates some of the powerful feature available with WebRequest. Some of the features include:

  • Url segments (Replace {segment} in resource with value)
  • Method (GET, POST, PUT, PATCH, DELETE)
  • Format (json, xml, url-encoded, plain-text) for content-type and accept headers and converting/parsing request and response
  • QuerystringParams
  • Body
  • Cookies
  • Headers

For more details, see the WebRequest portion of the Docs

上記の例は、 WebRequestで利用できる強力な機能の一部を示しています。 機能の一部は次のとおりです。

  • URLセグメント(リソースの{segment}を値で置き換えます)
  • メソッド(GET、POST、PUT、PATCH、DELETE)
  • content-typeのフォーマット(json、xml、url-encoded、plain-text)、ヘッダーの受け入れ、リクエストとレスポンスの変換/解析
  • QuerystringParams
  • Body
  • クッキー
  • ヘッダー

詳細については、Docs

Authentication Example

The following example demonstrates using an authenticator with VBA-Web to query Twitter. The TwitterAuthenticator (found in the authenticators/ folder) uses Twitter's OAuth 1.0a authentication and details of how it was created can be found in the Wiki.

次の例は、VBA-Webでオーセンティケーターを使用してTwitterにクエリを実行する方法を示しています。 TwitterAuthenticatorauthenticators /folderにあります)はTwitterのOAuth 1.0a認証とその詳細を使用しています Wikiにあります。

Function QueryTwitter(Query As String) As WebResponse
    Dim TwitterClient As New WebClient
    TwitterClient.BaseUrl = "https://api.twitter.com/1.1/"

    ' Setup authenticator
    Dim TwitterAuth As New TwitterAuthenticator
    TwitterAuth.Setup _
        ConsumerKey:="Your consumer key", _
        ConsumerSecret:="Your consumer secret"
    Set TwitterClient.Authenticator = TwitterAuth

    ' Setup query request
    Dim Request As New WebRequest
    Request.Resource = "search/tweets.json"
    Request.Format = WebFormat.Json
    Request.Method = WebMethod.HttpGet
    Request.AddQuerystringParam "q", Query
    Request.AddQuerystringParam "lang", "en"
    Request.AddQuerystringParam "count", 20

    ' => GET https://api.twitter.com/1.1/search/tweets.json?q=...&lang=en&count=20
    '    Authorization Bearer Token... (received and added automatically via TwitterAuthenticator)

    Set QueryTwitter = TwitterClient.Execute(Request)
End Function

For more details, check out the Wiki, Docs, and Examples

詳細については、WikiDocsをご覧ください。

Release Notes

View the changelog for release notes

リリースノートについては、changelogをご覧ください

About

  • Author: Tim Hall
  • License: MIT

具体的な使用感などは別の機会に。