はじめに
以前の記事で、/v2.0/Usersで一度に取得できるユーザー情報の上限が2500件であるとご紹介しました。
IBM Security Verify API ユーザー検索(/v2.0/Users)利用上の注意点について
2500件を超えるユーザーを取得する方法として、javascript / nodejsを使った手法の情報がありました。
javascript / nodejsを使った方法
https://docs.verify.ibm.com/verify/docs/looking-up-users
こちらの概念を参考にPythonでユーザー一覧を取得してみました。
#1.出力結果イメージ
約10000ユーザー登録してエクスポートの確認を行いました。
1列目にユーザー名、2列目にユーザーID(Verify内で採番されているユニーク値)をエクスポートしました。
#2.Pythonのサンプルコード
url/clientid/clientsecretは、環境にあわせて見直しください。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json
url= "https://<テナント名>.verify.ibm.com"
clientid = "クライアントID"
clientsecret = "クライアント秘密鍵"
block = "2021-01-01T00:00:00Z"
# トークンを取得する
headers = {
"Accept": "application/json",
"Content-Type": "application/x-www-form-urlencoded"
}
payload = {
"grant_type": "client_credentials",
"scope": "openid",
"client_id": clientid,
"client_secret": clientsecret
}
#print(payload)
response = requests.request("POST", url+"/v1.0/endpoint/default/token", data=payload, headers=headers)
#print(response.text)
output = response.json()
access_token = output["access_token"]
print(access_token)
masterlist = []
# ユーザー情報を取得する(2000件)
headers = {
"Authorization": "Bearer " +access_token
}
#ループ処理判定フラグ
flag = True
while flag:
response = requests.request("GET", url+"/v2.0/Users?filter="+"meta.created ge \"" + block + "\"&sortBy=meta.created&sortOrder=ascending&count=2000", headers=headers)
print(url+"/v2.0/Users?filter="+"meta.created ge '" + block + "'&sortBy=meta.created&sortOrder=ascending&count=2000")
#print(response.text)
output = response.json()
if output["totalResults"] < 2000:
print("yes <2000")
output = output["Resources"]
#検索結果を配列に設定
masterlist.extend(output)
print (len(masterlist))
flag = False
else:
print("no >2000")
output = output["Resources"]
#配列の最後の2つのmeta.created が等しい場合は、最後の配列を削除する
while output[len(output)-1]["meta"]["created"] == output[len(output)-2]["meta"]["created"]:
#末尾の配列を削除する
output.pop()
#末尾の配列のmeta.createdを変数に指定
block = output[len(output)-1]["meta"]["created"]
print(block)
output.pop()
#検索結果を配列に設定
masterlist.extend(output)
print (len(masterlist))
#結果出力
for i in masterlist:
print(i["userName"]+","+i["id"])
#3.IBM Security Verify Developer PortalのAPIリファレンスについて
APIリファレンスページに、cURL/Node/Puby/PHP/Pythonのサンプルコードが公開されています。
https://docs.verify.ibm.com/verify/reference/handletoken
言語を切り替えることで各言語に対応したサンプルコードが表示されます。
#最後に
2500件を超えるユーザー情報を取り扱うためのサンプルコードをご紹介しました。