使用REST API批量下载ENCODE数据

玩转ENCODE项目的数据资源(二)(附示例代码)
本篇主要内容

本篇主要介绍两种方法,搜索并批量下载ENCODE数据。

方法一:在页面中搜索并获取下载地址
  1. 进入ENCODE portal主页:https://www.encodeproject.org/。


  2. 点击matrix,在搜索框搜索。比如“ctcf chip-seq k562” 。同时可以点击页面左方导航栏进行过滤。


  3. 点击切换到列表模式。

      4.  点击页面中的Download,下载一个名为files.txt的文件。这个文件的第一行是页面中所有文件的metadata。从第二行开始就是下载链接了。使用wget或者curl可以直接下载。

 


方法二:写代码搜索后批量下载

可以发现方法一中的files.txt的URL有相同的模式(BASE_URL + QUERY)。
BASE_URL= ‘https://www.encodeproject.org
QUERY = ‘/files/[accession number]/@@download/[accession number].[format]’

那么对于一个Experiment,我们如何获取所有原始文件和结果文件(fastq,bam,bed等)的下载地址(QUERY)呢?
举例来说,我们点击方法一中搜索得到第一个实验(Experiment),accession number为ENCSR000BNK,
可以通过在URL后面加上?format=json查看这个实验的所有metadata(JSON格式),页面地址为
https://www.encodeproject.org/experiments/ENCSR000BNK/?format=json

我们需要的下载链接(QUERY),就是其中的一个名为href的metadata。

写代码搜索下载的实质就是通过RESTful API同ENCODE的metadata数据库交互,取得我们需要的metadata(以JSON的格式),然后获取文件下载地址“href”。

直接上代码,使用上述的ENCSR000BNK为例:

import requests, json

# 要求服务器返回JSON格式数据
HEADERS = {'accept': 'application/json'}

# BASE_URL是通用前缀,QUERY是定制的查询
# type=file 查询的是file类型的对象
# file_format=bed 指定下载文件内容
# dataset=/experiments/ENCSR000BNK/ 指定下载的Experiment accession number
# limit=all 不加这个参数只能返回前25个结果
# frame=object 获取object的全部metadata
BASE_URL = 'https://www.encodedcc.org/search/?'
QUERY ='type=file&dataset=/experiments/ENCSR000BNK/&file_format=bed&limit=all&frame=object'

# 用GET命令向服务器请求结果
response = requests.get(BASE_URL+QUERY, headers=HEADERS)

# 将JSON格式转换成python的字典dict格式。response_json_dict储存所有的metadata
response_json_dict = response.json()

# 打印查看结果
print(json.dumps(response_json_dict, indent=4, separators=(',', ': ')))

# 定义下载函数
def download_file(url):
    local_filename = url.split('/')[-1]
    r = requests.get(url, stream=True)
    with open(local_filename, 'wb') as f:
        for chunk in r.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)
                f.flush()
    return local_filename

# 返回href信息并下载
for file_dict in response_json_dict['@graph']:
    print(file_dict['href'])
    fn = download_file(FILE_URL+file_dict['href'])
# /files/ENCFF002CLT/@@download/ENCFF002CLT.bed.gz
# /files/ENCFF653WEF/@@download/ENCFF653WEF.bed.gz
# /files/ENCFF678TFE/@@download/ENCFF678TFE.bed.gz
# /files/ENCFF001UJN/@@download/ENCFF001UJN.bed.gz
# /files/ENCFF001UJO/@@download/ENCFF001UJO.bed.gz
# /files/ENCFF081QMM/@@download/ENCFF081QMM.bed.gz
# /files/ENCFF036DBK/@@download/ENCFF036DBK.bed.gz
# /files/ENCFF943BRX/@@download/ENCFF943BRX.bed.gz

这样文件就下载到本地了。


参考信息:
ENCODE REST API:https://www.encodeproject.org/help/rest-api/
ENCODE DCC github:https://github.com/ENCODE-DCC


注:

这是一个包含四篇文章的小专栏,内容分别为:

  1. 介绍ENCODE计划的数据体系(data model)
  2. 批量下载ENCODE portal的数据(附示例代码)
  3. 学习ENCODE的官方数据处理流程(pipeline)(附代码仓库列表)
  4. ENCODE项目数据分析培训课程的资源(附下载链接)


获取更多更新资源,请关注微信公众号“生物信息学小站” :)


  • 发表于 2017-11-26 11:26
  • 阅读 ( 5370 )
  • 分类:软件工具

0 条评论

请先 登录 后评论
不写代码的码农
Bryce

3 篇文章

作家榜 »

  1. 祝让飞 118 文章
  2. 柚子 91 文章
  3. 刘永鑫 64 文章
  4. admin 57 文章
  5. 生信分析流 55 文章
  6. SXR 44 文章
  7. 张海伦 31 文章
  8. 爽儿 25 文章