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

如何通过AWS Data Exchange API或Python获取AWS Marketplace免费开放数据集

获取AWS Marketplace无需订阅的开放数据集

问题分析

你调用list_data_sets接口返回空结果,核心原因是这个接口默认仅返回当前AWS账户已订阅的数据集。要获取AWS Marketplace中无需订阅的公开开放数据集,需要调整API调用参数并筛选符合条件的条目。

解决方案:Python调用AWS Data Exchange API实现

通过指定Origin参数为AWS_MARKETPLACE,并筛选SubscriptionRequired=False的数据集,同时处理API的分页返回(单次调用最多返回100条),即可获取目标数据集及其详情。

修正后的Python代码如下:

import boto3

# 初始化Data Exchange客户端(建议通过AWS凭证文件/环境变量/IAM角色管理密钥,避免硬编码)
client = boto3.client('dataexchange', region_name='us-east-1')

def list_public_open_datasets():
    public_datasets = []
    next_token = None
    
    # 处理分页,遍历所有结果
    while True:
        request_params = {'Origin': 'AWS_MARKETPLACE'}
        if next_token:
            request_params['NextToken'] = next_token
        
        response = client.list_data_sets(**request_params)
        
        # 筛选无需订阅的数据集
        for dataset in response['DataSets']:
            if not dataset.get('SubscriptionRequired', True):
                public_datasets.append(dataset)
        
        next_token = response.get('NextToken')
        if not next_token:
            break
    
    return public_datasets

# 获取并打印数据集核心信息
if __name__ == '__main__':
    datasets = list_public_open_datasets()
    print(f"找到{len(datasets)}个无需订阅的开放数据集:")
    for idx, ds in enumerate(datasets, 1):
        print(f"\n--- 数据集{idx} ---")
        print(f"名称: {ds['Name']}")
        print(f"ID: {ds['Id']}")
        print(f"描述: {ds.get('Description', '无描述')}")
        print(f"数据类型: {ds['AssetType']}")

关键说明

  • Origin='AWS_MARKETPLACE'参数:限定只返回AWS Marketplace中的数据集,排除自定义或其他来源的数据集。
  • SubscriptionRequired=False筛选:精准过滤出无需订阅即可访问的开放数据集。
  • 分页处理:list_data_sets接口单次最多返回100条数据,通过NextToken循环迭代获取全量结果。

补充:获取数据集的具体资产信息

如果需要查看数据集内的具体资源(如文件、API端点等),可调用list_data_set_assets接口,传入目标数据集的Id:

def get_dataset_assets(dataset_id):
    assets = []
    next_token = None
    while True:
        request_params = {'DataSetId': dataset_id}
        if next_token:
            request_params['NextToken'] = next_token
        
        response = client.list_data_set_assets(**request_params)
        assets.extend(response['Assets'])
        
        next_token = response.get('NextToken')
        if not next_token:
            break
    return assets

# 示例:获取第一个数据集的资产列表
if datasets:
    first_ds_id = datasets[0]['Id']
    assets = get_dataset_assets(first_ds_id)
    print(f"\n{datasets[0]['Name']}的资产列表:")
    for asset in assets:
        print(f"- 名称: {asset['Name']}, 类型: {asset['AssetType']}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:05:20