Webservice access using a Python script
The following Python example scripts retrieve SABIO-RK data in table format (thanks to Robert Stanley).Wrong SMILES, InChI and InChI keys
A substantial fraction (about 10 percent) of SMILES, InChI and InChI keys are wrong in SABIO-RK database.This should be taken into consideration for mapping of compounds and using those identifiers.
# Example SABIO-RK script 1
# ------------------------------------------------------------------------------
import requests
ENTRYID_QUERY_URL = 'https://sabiork.h-its.org/sabioRestWebServices/searchKineticLaws/entryIDs'
PARAM_QUERY_URL = 'https://sabiork.h-its.org/entry/exportToExcelCustomizable'
entryIDs = []
# ask SABIO-RK for all EntryIDs matching a query
query_dict = {"Organism":'"Homo sapiens"',"ECNumber":"1.1.1.1"}
query_string = ' AND '.join(['%s:%s' % (k,v) for k,v in query_dict.items()])
query = {'format':'txt', 'q':query_string}
# make GET request
request = requests.get(ENTRYID_QUERY_URL, params = query)
request.raise_for_status() # raise if 404 error
# each entry is reported on a new line
entryIDs = [int(x) for x in request.text.strip().split('\n')]
print('%d matching entries found.' % len(entryIDs))
# encode next request, for parameter data given entry IDs
data_field = {'entryIDs[]': entryIDs}
query = {'format':'tsv', 'fields[]':['EntryID', 'Organism', 'UniprotID','ECNumber', 'Parameter','ReactomeReactionID']}
# make POST request
request = requests.post(PARAM_QUERY_URL, params=query, data=data_field)
request.raise_for_status()
# results
print(request.text)
# ------------------------------------------------------------------------------
# Example SABIO-RK script 2
# This single-step method is especially recommended for large result sets (> 10000)
# ------------------------------------------------------------------------------
import requests
QUERY_URL = 'https://sabiork.h-its.org/sabioRestWebServices/kineticlawsExportTsv'
# specify search fields and search terms
query_dict = {"Organism":'"lactococcus lactis subsp. lactis bv. diacetylactis"', "Product":'"Tyrosine"'}
query_string = ' AND '.join(['%s:%s' % (k,v) for k,v in query_dict.items()])
# specify output fields and send request
query = {'fields[]':['EntryID', 'Organism', 'UniprotID','ECNumber', 'Parameter'], 'q':query_string}
request = requests.post(QUERY_URL, params = query)
request.raise_for_status()
# results
print(request.text)
# ------------------------------------------------------------------------------
# Example SABIO-RK script 3 - returns compound details
# ------------------------------------------------------------------------------
import requests
QUERY_URL = 'https://sabiork.h-its.org/sabioRestWebServices/searchCompoundDetails'
# input: SabioCompoundID
# valid output fields: "fields[]":["Name","ChebiID","PubChemID","InChI","SabioCompoundID","KeggCompoundID","Smiles"]
# example
query = {"SabioCompoundID":"36", "fields[]":["Name","ChebiID","PubChemID"]}
request = requests.post(QUERY_URL, params = query)
request.raise_for_status()
# results
print(request.text)
# note that you can also retrieve the data for ALL compounds by performing a wildcard search
# eg: query = {"SabioCompoundID":"*", "fields[]":["SabioCompoundID","Name","PubChemID"]}
# ------------------------------------------------------------------------------
# Example SABIO-RK script 4 - returns reaction details
# ------------------------------------------------------------------------------
import requests
QUERY_URL = 'https://sabiork.h-its.org/sabioRestWebServices/searchReactionDetails'
# input: SabioReactionID
#valid output fields: "fields[]":["KeggReactionID","SabioReactionID","Enzymename","ECNumber", "UniProtKB_AC","ReactionEquation","TransportReaction","RheaReactionID"]
#example
query = {"SabioReactionID":"128", "fields[]":["KeggReactionID","ReactionEquation"]}
# make GET request
request = requests.get(QUERY_URL, params = query)
request.raise_for_status()
# results
print(request.text)
# note that you can also retrieve the data for ALL reactions by performing a wildcard search
# eg: query = {"SabioReactionID":"*", "fields[]":["SabioReactionID","KeggReactionID"]}
# ------------------------------------------------------------------------------
# Example SABIO-RK script 5 - returns reaction participant details
# ------------------------------------------------------------------------------
import requests
QUERY_URL = 'https://sabiork.h-its.org/sabioRestWebServices/searchReactionParticipants'
# input: SabioReactionID
# valid output fields: "fields[]":["Name","Role","SabioCompoundID","ChebiID","PubChemID","KeggCompoundID", "InChI","Smiles"]
# example
query = {"SabioReactionID":"128", "fields[]":["Name","Role"]}
# note that you can also retrieve the data for ALL reaction participants by performing a wildcard search
# for this wildcard query, the output field 'SabioReactionID' is added by default
# query = {"SabioReactionID":"*", "fields[]":["SabioCompoundID","Name","Role"]}
request = requests.get(QUERY_URL, params = query)
request.raise_for_status()
# results
print(request.text)
# ------------------------------------------------------------------------------
# Example SABIO-RK script 6 - returns reaction modifier details
# ------------------------------------------------------------------------------
import requests
QUERY_URL = 'https://sabiork.h-its.org/sabioRestWebServices/searchReactionModifiers'
# input: SabioReactionID
# valid output fields: "fields[]":["EntryID","Name","Role","SabioCompoundID","ChebiID","PubChemID","KeggCompoundID","InChI","Smiles"]
# example
query = {"SabioReactionID":"128", "fields[]":["EntryID","Name","Role"]}
# note that you can also retrieve the data for ALL reaction modifiers by performing a wildcard search
# for this wildcard query, the output field 'SabioReactionID' is added by default
# query = {"SabioReactionID":"*", "fields[]":["EntryID","Name","Role"]}
request = requests.get(QUERY_URL, params = query)
request.raise_for_status()
# results
print(request.text)
# ------------------------------------------------------------------------------
# Example SABIO-RK script 7 - returns compound id and compound synonym names
# ------------------------------------------------------------------------------
import requests
QUERY_URL = 'https://sabiork.h-its.org/sabioRestWebServices/searchCompoundSynonyms'
# input: SabioCompoundID or compound name (recommended name or synonymous name)
# valid output fields: "fields[]":["SabioCompoundID","Name","NameType"]
# example 1
query = {"SabioCompoundID":"36", "fields[]":["Name","NameType"]}
# example 2
# query = {"CompoundName":"Adenosine triphosphate", "fields[]":["SabioCompoundID","Name","NameType"]}
# example 3 - wildcard search returns all compounds
# query = {"SabioCompoundID":"*", "fields[]":["SabioCompoundID","Name","NameType"]}
request = requests.post(QUERY_URL, params = query)
request.raise_for_status()
# results
print(request.text)
# ------------------------------------------------------------------------------
# Example SABIO-RK script 8 - returns EC number and enzyme synonym names
# ------------------------------------------------------------------------------
import requests
QUERY_URL = 'https://sabiork.h-its.org/sabioRestWebServices/searchEnzymeSynonyms'
# input: EC number or enzyme name (recommended name or synonymous name)
# valid output fields: "fields[]":["ECNumber","Name","NameType"]
# example 1
query = {"ECNumber":"5.1.99.6", "fields[]":["Name","NameType"]}
# example 2
# query = {"EnzymeName":"isocitrate dehydrogenase (NAD+)", "fields[]":["ECNumber","Name","NameType"]}
# example 3 - wildcard search returns ALL EC numbers, enzyme names and their synomymous names
# query = {"ECNumber":"*", "fields[]":["ECNumber","Name","NameType"]}
request = requests.post(QUERY_URL, params = query)
request.raise_for_status()
# results
print(request.text)
# ------------------------------------------------------------------------------
# Example SABIO-RK script 9 - returns recommended and synonym names of pathways
# ------------------------------------------------------------------------------
import requests
QUERY_URL = 'https://sabiork.h-its.org/sabioRestWebServices/searchPathwaySynonyms'
# input: KEGG pathway id or pathway name (recommended name or synonymous name)
# valid output fields: "fields[]":["KeggPathwayID","Name","NameType"]
# example 1
query = {"KeggPathwayID":"00010", "fields[]":["Name","NameType"]}
# example 2
# query = {"PathwayName":"Glycolysis/Gluconeogenesis", "fields[]":["KeggPathwayID","Name","NameType"]}
# example 3 - wildcard search returns ALL pathway data
# query = {"PathwayName":"*", "fields[]":["KeggPathwayID","Name","NameType"]}
request = requests.post(QUERY_URL, params = query)
request.raise_for_status()
# results
print(request.text)
# ------------------------------------------------------------------------------
# Example SABIO-RK script 10 - returns entry data in SBML format
# ------------------------------------------------------------------------------
import requests
# specify SBML as output format
SBML_URL='https://sabiork.h-its.org/sabioRestWebServices/searchKineticLaws/sbml'
# input: search fields and search terms eg
query_dict = {"Organism":'"Haemophilus influenzae"',"ECNumber":"2.7.7.1"}
query_string = ' AND '.join(['%s:%s' % (k,v) for k,v in query_dict.items()])
query = {'q':query_string}
request = requests.post(SBML_URL, params = query)
request.raise_for_status()
# results
print(request.text)
# ------------------------------------------------------------------------------
# Search for data inserted into SABIO-RK between two dates
# ------------------------------------------------------------------------------
In 'Example SABIO-RK script 1 and 2' the query can be extended by the 'InsertDate' search term eg:
query_dict = {"Organism":'"Homo sapiens"',"InsertDate":"[2021-12-14T00:00:00Z TO 2022-02-14T00:00:00Z]"}
Similarly for the output fields the 'InsertDate' field can be defined:
query = {'format':'tsv', 'fields[]':['EntryID', 'Organism', 'UniprotID','InsertDate']}