Synthetic_Biology / genesis /literature.py
mgbam's picture
Update genesis/literature.py
82ea511 verified
# genesis/literature.py
"""
Literature intelligence for GENESIS-AI
Fetches biomedical, biotech, and synthetic biology publications.
"""
import os
import requests
NCBI_EMAIL = os.getenv("NCBI_EMAIL")
PUBMED_SEARCH_URL = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi"
PUBMED_FETCH_URL = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi"
CHEMBL_API = "https://www.ebi.ac.uk/chembl/api/data/molecule"
def search_pubmed(query, max_results=10):
"""Search PubMed and return article IDs."""
try:
params = {
"db": "pubmed",
"term": query,
"retmax": max_results,
"retmode": "json",
"email": NCBI_EMAIL
}
r = requests.get(PUBMED_SEARCH_URL, params=params)
r.raise_for_status()
return r.json()
except Exception as e:
return {"error": str(e)}
def fetch_pubmed_details(id_list):
"""Fetch details for a list of PubMed IDs."""
try:
ids = ",".join(id_list)
params = {"db": "pubmed", "id": ids, "retmode": "xml"}
r = requests.get(PUBMED_FETCH_URL, params=params)
r.raise_for_status()
return r.text # XML response
except Exception as e:
return {"error": str(e)}
def search_chembl(query):
"""Search ChEMBL molecules by name."""
try:
r = requests.get(f"{CHEMBL_API}?molecule_synonyms__icontains={query}")
r.raise_for_status()
return r.json()
except Exception as e:
return {"error": str(e)}