VBA で kintone ユーザー情報を取得し json 変換する例です。
json 変換に、cJobject ライブラリを使用します。
VBA で kintone レコードを取得し json 変換 とほとんど同じ手順です。
環境
Windows 10 Pro
Excel 2016
cjobject ライブラリの準備
cJobject の機能を使うには、下記からexcel ファイルをダウンロードします。
ダウンロードページ で、Data Manipulation を展開すると、最後にvanillacJobject.xlsm があります。
今回は、ダウンロードしたファイルに、VBA IDE で、Module を追加して処理を記述します。
ユーザーエクスポートAPI 取得
ユーザーエクスポートAPI で、codes を指定して、ユーザー情報を取得します。
S001, S002 の codes を指定した例
strQuery = "codes[0]=S001&codes[1]=S002"
strURL = "https://<サブドメイン>.cybozu.com/v1/users.json?" & strQuery
※ query をエンコードするとエラーになります。
ログイン認証のBase64変換
cJobject ライブラリに、Base64Encode関数があるので、それを使います。
Dim strAuthorization As String ' Authorization
strAuthorization = Base64Encode("USER:PASS")
レスポンス情報を json 変換
JSONParse 関数でレスポンス情報を、cjobject に変換できます。
Dim resp As cJobject ' json data
Dim users As cJobject ' json data
...
Set resp = JSONParse(strJSON)
Set users = resp.child("users")
ユーザー情報内の項目値を取り出す
ユーザー情報の配列からからユーザー情報を取り出します。
user.stringify は、cjobject を文字列に変換します。
For Each user In users.children
If users.children.Count > 0 Then
' ユーザーの情報
Debug.Print "ユーザー情報: " & user.stringify
Dim info As cJobject
' 全情報
For Each info In user.children
Debug.Print info.stringify
Next info
Debug.Print vbCrLf
End If
Next user
VBA コード全体
Sub kintoneGetTest2()
'--------------------------------------------------------------------
' 変数定義
'--------------------------------------------------------------------
Dim objHttpReq As XMLHTTP60 ' XMLHTTP オブジェクト
Dim strJSON As String ' レスポンスで受け取るJSONデータ
Dim strURL As String ' アクセス先URL
Dim strQuery As String ' 検索文字列
Dim strAuthorization As String ' Authorization
strAuthorization = Base64Encode("USER:PASS")
'------------------------------------------------------------------
' 検索文字付きURLを作成する
'------------------------------------------------------------------
strQuery = "codes[0]=S001&codes[1]=S002"
strURL = "https://<サブドメイン>.cybozu.com/v1/users.json?" & strQuery
'------------------------------------------------------------------
' XMLHTTP オブジェクトを生成する
'------------------------------------------------------------------
Set objHttpReq = CreateObject("MSXML2.XMLHTTP")
objHttpReq.Open "GET", strURL, False
'------------------------------------------------------------------
' XMLHTTP のリクエストヘッダーを指定する
'------------------------------------------------------------------
' ログイン認証
objHttpReq.setRequestHeader "X-Cybozu-Authorization", strAuthorization
' Basic 認証
'objHttpReq.setRequestHeader "Authorization", "Basic " & <ベーシック認証情報>
'ドメイン名:ポート番号
objHttpReq.setRequestHeader "Host", "<サブドメイン>.cybozu.com" + ":443"
'キャッシュ対策(常にレスポンスが取得できる状態にする)
objHttpReq.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT"
'------------------------------------------------------------------
' リクエストを送信する
'------------------------------------------------------------------
objHttpReq.send (Null)
'------------------------------------------------------------------
' レスポンスを取得する
'------------------------------------------------------------------
'レスポンス情報を変数に格納する
Dim resp As cJobject ' json data
Dim users As cJobject ' json data
Dim user As cJobject ' json data
strJSON = objHttpReq.responseText
'Debug.Print "resp: " & strJSON
Set resp = JSONParse(strJSON)
Set users = resp.child("users")
For Each user In users.children
If user.children.Count > 0 Then
' ユーザーの情報
Debug.Print "ユーザー情報: " & user.stringify
Dim info As cJobject
' 全情報
For Each info In user.children
Debug.Print info.stringify
Next info
Debug.Print vbCrLf
End If
Next user
End Sub
実行結果
イミディエイトウィンドウ
ユーザー情報: {"id":"11","code":"S001","ctime":"2017-02-18T03:46:47Z","mtime":"2017-02-18T03:46:47Z","valid":false,"name":"早乙女太一","surName":"","givenName":"","surNameReading":"","givenNameReading":"","localName":"","localNameLocale":"ja","timezone":"Asia/Tokyo","locale":null,"description":"","phone":"","mobilePhone":"","extensionNumber":"","email":"","callto":"","url":"","employeeNumber":"","birthDate":null,"joinDate":null,"primaryOrganization":null,"sortOrder":null,"customItemValues":[ ]}
{"id":"11"}
{"code":"S001"}
{"ctime":"2017-02-18T03:46:47Z"}
{"mtime":"2017-02-18T03:46:47Z"}
{"valid":false}
{"name":"早乙女太一"}
{"surName":""}
{"givenName":""}
{"surNameReading":""}
{"givenNameReading":""}
{"localName":""}
{"localNameLocale":"ja"}
{"timezone":"Asia/Tokyo"}
{"locale":null}
{"description":""}
{"phone":""}
{"mobilePhone":""}
{"extensionNumber":""}
{"email":""}
{"callto":""}
{"url":""}
{"employeeNumber":""}
{"birthDate":null}
{"joinDate":null}
{"primaryOrganization":null}
{"sortOrder":null}
{"customItemValues":[ ]}
ユーザー情報: {"id":"12","code":"S002","ctime":"2017-02-18T03:46:47Z","mtime":"2017-02-18T03:46:47Z","valid":false,"name":"高橋一生","surName":"","givenName":"","surNameReading":"","givenNameReading":"","localName":"","localNameLocale":"ja","timezone":"Asia/Tokyo","locale":null,"description":"","phone":"","mobilePhone":"","extensionNumber":"","email":"","callto":"","url":"","employeeNumber":"","birthDate":null,"joinDate":null,"primaryOrganization":null,"sortOrder":null,"customItemValues":[ ]}
{"id":"12"}
{"code":"S002"}
{"ctime":"2017-02-18T03:46:47Z"}
{"mtime":"2017-02-18T03:46:47Z"}
{"valid":false}
{"name":"高橋一生"}
{"surName":""}
{"givenName":""}
{"surNameReading":""}
{"givenNameReading":""}
{"localName":""}
{"localNameLocale":"ja"}
{"timezone":"Asia/Tokyo"}
{"locale":null}
{"description":""}
{"phone":""}
{"mobilePhone":""}
{"extensionNumber":""}
{"email":""}
{"callto":""}
{"url":""}
{"employeeNumber":""}
{"birthDate":null}
{"joinDate":null}
{"primaryOrganization":null}
{"sortOrder":null}
{"customItemValues":[ ]}
関連
VBA で kintone レコードを取得し json 変換
VBA で kintone ユーザー情報を取得し json 変換
VBA で kintone 新規レコード作成、json 文字列変換