如何通过DOI从FigShare获取出版物的全部关联文件下载链接?
针对你提到的埃及果蝠发声数据集(DOI对应FigShare集合),核心问题是调用了错误的API端点——这个DOI指向的是FigShare集合(Collection),而非单篇文章(Article)或单个文件(File),所以需要用集合相关的API接口来处理:
步骤1:解析DOI中的集合ID
你的DOI 10.6084/m9.figshare.c.3666502.v2 里的 c.3666502 表示这是一个集合,核心ID是 3666502。
步骤2:调用集合API获取所有子条目
使用FigShare的集合详情接口获取该集合下的所有子集合/文章:
import requests # 集合ID collection_id = 3666502 base_url = "https://api.figshare.com/v2" # 获取集合基本信息及子条目 response = requests.get(f"{base_url}/collections/{collection_id}") collection_data = response.json() # 提取所有子文章ID(集合里的每个item都是一篇article) article_ids = [item['id'] for item in collection_data['items']]
步骤3:遍历子文章,提取所有文件下载URL
每个子条目都是一篇FigShare文章,调用文章详情接口获取该文章下的所有文件信息,从中提取下载URL:
all_file_urls = [] for article_id in article_ids: # 获取文章详情 article_response = requests.get(f"{base_url}/articles/{article_id}") article_data = article_response.json() # 提取该文章下所有文件的下载URL file_urls = [file['download_url'] for file in article_data['files']] all_file_urls.extend(file_urls) # 打印所有URL(或保存到文件) for url in all_file_urls: print(url)
注意事项
- 分页处理:如果集合里的子条目超过100个(FigShare API默认分页大小),需要添加分页参数,比如:
requests.get(f"{base_url}/collections/{collection_id}?page=2&page_size=100") - 权限验证:如果数据集是私有,需要在请求头里添加认证token:
headers = {'Authorization': 'Token YOUR_TOKEN'},公开数据集无需此步骤 - API版本:确保使用v2版本的FigShare API,旧版本接口结构不同
内容的提问来源于stack exchange,提问作者user305883
相关产品推荐
相关产品推荐

