Как заставить Ensembl API работать на python?

#python

#python

Вопрос:

Я пытаюсь получить полную структуру списка транскриптов, то есть геномные координаты их 5’UTR, экзонов, интронов и 3 ‘UTR. Я могу сделать это вручную, например, в Ensembl для ENST00000515408.5: http://jan2020.archive.ensembl.org/Homo_sapiens/Transcript/Exons?db=core;g=ENSG00000172795;r=5:112976702-113020123;t=ENST00000515408

Что я хотел бы сделать, так это сделать это в масштабе программно. Я понимаю, что это можно легко сделать в perl с помощью REST API Ensembl. Однако у меня возникли проблемы с установкой DBI (который требуется для perl) на моем компьютере (macOS). Я также попытался установить локальную копию perl через perlbrew, но это тоже проблематично. Пока я пытаюсь устранить эти проблемы, я попытался заставить это работать на python со следующим тестовым кодом:

 import requests, sys, json
from pprint import pprint

server = "http://e99.rest.ensembl.org"
ext = "/lookup/id/ENSG00000157764"
 
r = requests.get(server ext, headers={ "Content-Type" : "application/json"})

if not r.ok:
    r.raise_for_status()

decoded = r.json()

pprint (decoded)
 

Однако это возвращает ошибку:

 ---------------------------------------------------------------------------
JSONDecodeError                           Traceback (most recent call last)
<ipython-input-42-493d32b7b032> in <module>
     10     r.raise_for_status()
     11 
---> 12 decoded = r.json()
     13 
     14 pprint (decoded)

~/opt/miniconda3/lib/python3.9/site-packages/requests/models.py in json(self, **kwargs)
    908                     # used.
    909                     pass
--> 910         return complexjson.loads(self.text, **kwargs)
    911 
    912     @property

~/opt/miniconda3/lib/python3.9/site-packages/simplejson/__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, use_decimal, **kw)
    523             parse_constant is None and object_pairs_hook is None
    524             and not use_decimal and not kw):
--> 525         return _default_decoder.decode(s)
    526     if cls is None:
    527         cls = JSONDecoder

~/opt/miniconda3/lib/python3.9/site-packages/simplejson/decoder.py in decode(self, s, _w, _PY3)
    368         if _PY3 and isinstance(s, bytes):
    369             s = str(s, self.encoding)
--> 370         obj, end = self.raw_decode(s)
    371         end = _w(s, end).end()
    372         if end != len(s):

~/opt/miniconda3/lib/python3.9/site-packages/simplejson/decoder.py in raw_decode(self, s, idx, _w, _PY3)
    398             elif ord0 == 0xef and s[idx:idx   3] == 'xefxbbxbf':
    399                 idx  = 3
--> 400         return self.scan_once(s, idx=_w(s, idx).end())

JSONDecodeError: Expecting value: line 1 column 1 (char 0)
 

Это потому, что я пытаюсь получить доступ к архивной версии Ensembl? Был бы признателен за любую помощь в этом.