提问人:alexraio 提问时间:11/12/2023 最后编辑:Brian Tompsett - 汤莱恩alexraio 更新时间:11/12/2023 访问量:31
使用 python 递归迭代 API,直到找到所有值
Recursively Iterate an API with python until all value are found
问:
我正在使用 SAP Business Object Rest API 来查找组的所有子组。
我想找到一个组,如果该组有子组,我想找到它们,如果一个子组有一个子子组,我想得到它们,依此类推,直到我找到所有有子组的组。(我需要一个组的所有嵌套组,只要有一个组有一个子组)
例:
mygroup
---group_1
---group_2
---group_3
------group_3_a
------group_3_b
---------group_3_a_a
---group_4
最后我想要的是“我的组,group_3,group_3_b”
以下是 postman 的 API 查询输出:
* https://{{STAGE}}/biprws/v1/usergroups/19791/usergroups
{
"entries": [
{
"__metadata": {
"uri": "https://{{STAGE}}/biprws/v1/usergroups/19791/usergroups"
},
"cuid": "AVULJ1f4xTJJkSt.N33vH0w",
"keywords": "",
"created": "",
"name": "SUPERVISOR",
"description": "",
"id": "7467291",
"parentid": "20"
},
{
"__metadata": {
"uri": "https://{{STAGE}}/biprws/v1/usergroups/19791/usergroups"
},
"cuid": "Q1hAIaoABJhzAYIAkgAAW9cLRkE1NzY1NEM",
"keywords": "",
"created": "",
"name": "Support",
"description": "",
"id": "891887",
"parentid": "20"
}
]
}
现在我想遍历两个 id:7467291 / 891887 具有相同的查询但不同的 id:
https://{{STAGE}}/biprws/v1/usergroups/7467291/usergroups
现在,如果查询没有条目,请继续...
https://{{STAGE}}/biprws/v1/usergroups/891887/usergroups
如果查询有条目,则循环访问组 ID,并查找它们是否有其他子组。
这是我试图做的:
# my group
my_group = '19786'
# Show related group of my choosen group
the_page_url = f"{base_url}/v1/usergroups/{my_group}/usergroups"
payload = {}
headers = {
'content-type': "application/json",
'accept': "application/json",
'x-sap-logontoken': sap_logon_token
}
response = requests.request("GET", the_page_url, json=payload, headers=headers, verify=False)
j_response = response.json()
print('ZZZ--- ', j_response['entries'])
# Now I loop through the subgroup of my choosen group recursively. So long that j_response['entries'] is not empty the loop go on.
while j_response['entries']:
try:
for entry in j_response['entries']:
si_name = entry['name']
si_id = entry['id']
si_parent_id = entry['parentid']
the_page_url = f"{base_url}/v1/usergroups/{si_id}/usergroups"
response = requests.request("GET", the_page_url, json=payload, headers=headers, verify=False)
j_response = response.json()
print('XXX---',si_name, "\n", j_response['entries'])
# print(si_id, si_name, si_parent_id)
except Exception as e:
print(f"There was an error! Exiting Loop: {e}")
break
问题是,通过这种方式,我只能向下迭代一个级别,但我想递归获取包含子组的所有组。
你能帮我解决问题吗?
答: 暂无答案
评论