如何使用Python获取非公开的ESRI Survey123表单数据
访问非公开ESRI Survey123调查数据的Python解决方案
问题背景
在未安装ArcGIS的设备上使用arcgis Python库时,仅能访问公开数据,无法获取非公开权限(非所有人可见)的Survey123调查结果。该调查为在线直接创建,未关联现有ESRI要素、图层等资源。
现有代码示例
from arcgis.gis import GIS # ESRI Survey123 API端点 survey123_api_url = 'https://www.arcgis.com' survey123_username = '<my_username>' survey123_password = '<my_password>' # 尝试获取非公开Survey123数据 survey_item_id = '88d7e11f82fa44c0a52db4ba435b86ff' # 示例ID gis = GIS(survey123_api_url, survey123_username, survey123_password) # 使用SurveyManager查看可用调查 survey_manager = arcgis.apps.survey123.SurveyManager(gis) print(survey_manager.surveys) # 仅返回公开调查 # 尝试获取指定非公开调查 sbi = survey_manager.get(survey_item_id) print(sbi) # 仅当调查公开时返回内容 # 搜索账户下内容 sr = gis.content.search('owner:<my account name>') print(sr) # 仅返回公开项目
解决步骤
1. 确认账户权限
确保使用的ArcGIS账户是调查的所有者,或已被授予调查的查看/编辑权限。若为团队协作调查,需联系管理员分配对应权限。
2. 调整搜索参数以包含非公开内容
默认搜索仅返回公开项目,需添加outside_org=False参数覆盖此行为:
# 搜索账户下所有Survey123表单(含非公开) user_surveys = gis.content.search( 'owner:<my account name>', item_type="Form", outside_org=False ) # 将搜索结果转换为Survey对象 from arcgis.apps.survey123 import Survey my_surveys = [Survey(gis, item.id) for item in user_surveys] # 打印所有调查标题 print([s.title for s in my_surveys])
3. 直接访问调查的要素服务
每个Survey123调查都会自动生成对应的要素服务,通过要素服务可直接提取数据:
- 在Survey123网页端打开目标调查,进入数据标签页,获取要素服务ID(可通过"查看要素服务"入口查看)。
- 使用以下代码访问数据:
# 替换为你的要素服务ID feature_service_id = "<调查对应的要素服务ID>" # 获取要素服务 fs = gis.content.get(feature_service_id) # 获取调查结果所在图层(通常为第一个图层) results_layer = fs.layers[0] # 查询所有记录(可添加where参数过滤数据) all_records = results_layer.query() # 输出数据 for feature in all_records.features: print(feature.attributes)
4. 验证认证有效性
确认当前登录账户为有权限的账户:
# 打印当前登录用户信息 print(f"当前登录账户:{gis.users.me.username}") print(f"账户角色:{gis.users.me.role}")
内容的提问来源于Stack Exchange,提问作者ChrisSc
相关产品推荐
相关产品推荐

