Ribbit works
記事のトップ画像

ExcelからChatworkのユーザ一覧を取得する

VBA

last modified date2021-9-3

publish date2021-9-3

ソースコード

' 送信先URI
Private Const END_POINT As String = "https://api.chatwork.com/v2/"

' 使用するAPIトークン
Private Const API_TOKEN As String = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Public Function Api(ByRef method As String, ByRef url As String, ByRef param As String) As String

    Dim httpRequest As Object
    Set httpRequest = CreateObject("MSXML2.XMLHTTP")

    With httpRequest
        Call .Open(method, END_POINT & url, False)
        If method = "POST" Or method = "PUT" Then
            Call .setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
        End If
        Call .setRequestHeader("X-ChatWorkToken", API_TOKEN)
        Call .send(param)

        Api = .responseText
    End With
End Function

API_TOKENの部分に利用するユーザのAPIトークンを貼り付けてください。APIトークン(使用ユーザ)も動的にしたい場合は、ファンクションを以下のようにすると良いかと思います。

Public Function Api( _
	ByRef method As String, _
	ByRef url As String, _
	ByRef param As String, _
	Optional ByRef apiToken As String = API_TOKEN) As String

後は、上記のファンクションを以下のように呼び出すだけで取得できます。

Dim contacts As String
contacts = Api("GET", "contacts", "")

呼び出しを更に簡易化させたい場合は、もう一つファンクションをかませましょう。

Public Function GetContacts() As String
    GetContacts = Api("GET", "contacts", "")
End Function

レスポンスの整形

 取得は完了しましたが、取得されるデータはString形式のjsonファイルです。ExcelはXMLのパースはできますが、jsonとは相性が悪いので、受け取ったファイルを自力で解析しないといけません。オススメの対処法は、GitHubに公開されている、JSON Converterを使う方法がいいかと思います。

VBA-tools/VBA-JSON

上記のサイトから.basファイルをダウンロードし、VBEからインポートしましょう。後はモジュールを利用し、データをイテレータで取得するだけです。

Dim records As Object, record As Object
Set records = JsonConverter.ParseJson(response)

For Each record In records
    record("account_id") ' → 対象アカウントID
    record("room_id") ' → 対象アカウントとのルームID
    record("name") ' → 対象アカウントの表示名
    record("avatar_image_url") ' → 対象アカウントのアイコン
Next

よく使うパラメータは上記ぐらいでしょうか。他に取得されるパラメータが知りたい方は、Chatworkが公開しているドキュメントを参照してください。

Chatwork APIドキュメント - エンドポイント: /contacts