Spaces:
Sleeping
Sleeping
import requests | |
import json | |
from bs4 import BeautifulSoup | |
import logging | |
# Setup logging | |
logging.basicConfig(level=logging.INFO) | |
logger = logging.getLogger(__name__) | |
def test_pubmed_search(): | |
"""Test PubMed search API""" | |
base_url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/" | |
search_url = f"{base_url}esearch.fcgi" | |
# Test query | |
query = "clinical notes" | |
search_params = { | |
"db": "pubmed", | |
"term": query, | |
"retmax": 10, # Just get 10 results for testing | |
"retmode": "json", | |
"sort": "relevance" | |
} | |
logger.info(f"Testing PubMed search with query: {query}") | |
logger.info(f"Search URL: {search_url}") | |
logger.info(f"Search params: {search_params}") | |
try: | |
response = requests.get(search_url, params=search_params) | |
response.raise_for_status() | |
search_results = response.json() | |
logger.info(f"Response status code: {response.status_code}") | |
logger.info(f"Response headers: {dict(response.headers)}") | |
logger.info(f"Search results: {json.dumps(search_results, indent=2)}") | |
if "esearchresult" in search_results: | |
id_list = search_results["esearchresult"]["idlist"] | |
logger.info(f"Found {len(id_list)} article IDs") | |
# Test fetching one article | |
if id_list: | |
test_id = id_list[0] | |
fetch_url = f"{base_url}efetch.fcgi" | |
fetch_params = { | |
"db": "pubmed", | |
"id": test_id, | |
"retmode": "xml" | |
} | |
logger.info(f"\nTesting article fetch for ID: {test_id}") | |
logger.info(f"Fetch URL: {fetch_url}") | |
logger.info(f"Fetch params: {fetch_params}") | |
response = requests.get(fetch_url, params=fetch_params) | |
response.raise_for_status() | |
logger.info(f"Fetch response status code: {response.status_code}") | |
logger.info(f"Fetch response headers: {dict(response.headers)}") | |
logger.info(f"First 500 chars of response: {response.text[:500]}") | |
soup = BeautifulSoup(response.text, 'lxml') | |
article = soup.find('PubmedArticle') | |
if article: | |
logger.info("\nArticle structure:") | |
logger.info(f"Title: {article.find('ArticleTitle').get_text() if article.find('ArticleTitle') else 'Not found'}") | |
logger.info(f"Abstract: {article.find('Abstract').get_text()[:200] + '...' if article.find('Abstract') else 'Not found'}") | |
else: | |
logger.error("No PubmedArticle found in response") | |
except Exception as e: | |
logger.error(f"Error during test: {str(e)}", exc_info=True) | |
if __name__ == "__main__": | |
test_pubmed_search() |