You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在POST请求Payload中根据CSV条件过滤BIM 360项目Services

解决方案

首先,你需要先定义CSV列名和BIM 360服务名称的映射(如果CSV列名和serviceName完全一致,可以直接复用列名,否则按需调整映射关系),然后在循环中根据当前项目的服务激活状态动态生成services列表。

修改后的代码示例

import pandas as pd
import json
import requests

start = "https://developer.api.autodesk.com/bim360/admin/v1/projects/"
end = "/users"

# 定义服务映射:键是CSV中的列名,值是对应的serviceName和权限
service_mapping = {
    "documentManagement": {"serviceName": "documentManagement", "access": "administrator"},
    "projectAdministration": {"serviceName": "projectAdministration", "access": "administrator"},
    "projectManagement": {"serviceName": "projectManagement", "access": "administrator"},
    "costManagement": {"serviceName": "costManagement", "access": "administrator"},
    "fieldManagement": {"serviceName": "fieldManagement", "access": "administrator"},
    "modelCoordination": {"serviceName": "modelCoordination", "access": "administrator"},
    "insight": {"serviceName": "insight", "access": "administrator"}
}

# 初始化结果DataFrame
post_user = pd.DataFrame()

for idx, row in projects_df.iterrows():
    # 动态构建services列表:仅保留CSV中值为1的激活服务
    services = []
    for col_name, service_info in service_mapping.items():
        if row[col_name] == 1:
            services.append(service_info)
    
    # 构造请求Payload
    payload = json.dumps({
        "email": "dummy@lalaland.com",
        "companyId": "0000",
        "roleIds": ["0000"],
        "services": services
    })
    
    headers = {
        'Authorization': 'Bearer ' + access_token_beta,
        'Content-Type': 'application/json',
        'User-Id': 'XXXXX'
    }
    
    project_id = row.iloc[0]  # 假设DataFrame第一列是项目ID
    url = f"{start}{project_id}{end}"
    
    response = requests.post(url, headers=headers, data=payload)
    jsonAsPythonValue = json.loads(response.text)
    
    # 合并返回结果
    current_df = pd.DataFrame.from_dict(pd.json_normalize(jsonAsPythonValue))
    post_user = pd.concat([post_user, current_df], ignore_index=True)

# 可选:保存结果到CSV
# post_user.to_csv("post_user_results.csv", index=False)

关键修改说明

  • 用iterrows()遍历DataFrame,替代原有的range(len())写法,无需手动维护索引变量
  • 新增service_mapping统一管理服务信息,后续调整权限或新增服务只需修改此处
  • 循环检查当前项目的服务激活状态,仅将值为1的服务加入请求的services列表
  • 用pd.concat()替代已弃用的append()方法,符合pandas最新最佳实践
  • 使用f-string拼接URL,提升代码可读性

内容的提问来源于stack exchange,提问作者Lazy_bud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:46:06