Source code for tooluniverse.europe_pmc_tool
import requests
from .base_tool import BaseTool
from .tool_registry import register_tool
[docs]
@register_tool("EuropePMCTool")
class EuropePMCTool(BaseTool):
"""
Tool to search for articles on Europe PMC including abstracts.
"""
[docs]
def __init__(
self,
tool_config,
base_url="https://www.ebi.ac.uk/europepmc/webservices/rest/search",
):
super().__init__(tool_config)
self.base_url = base_url
[docs]
def run(self, arguments):
query = arguments.get("query")
limit = arguments.get("limit", 5)
if not query:
return {"error": "`query` parameter is required."}
return self._search(query, limit)
def _search(self, query, limit):
params = {
"query": query,
"resultType": "core", # 'core' includes abstractText
"pageSize": limit,
"format": "json",
}
response = requests.get(self.base_url, params=params, timeout=20)
if response.status_code != 200:
return {
"error": f"Europe PMC API error {response.status_code}",
"reason": response.reason,
}
results = response.json().get("resultList", {}).get("result", [])
articles = [
{
"title": rec.get("title"),
"abstract": rec.get("abstractText"),
"journal": rec.get("journalTitle"),
"year": rec.get("pubYear"),
"url": f"https://europepmc.org/article/{rec.get('source')}/{rec.get('id')}",
}
for rec in results
]
return articles