Техническая документация на запрос информации о статьях из БД Health Heuristics (BioMedSciHub API)
REST API для поиска и получения научных статей из PubMed, PMC, Europe PMC и OpenAlex
https://biomedscihub.healthheuristics.org
Возможности API
Множество источников
Единый доступ к PubMed, PMC, Europe PMC и OpenAlex через унифицированные эндпоинты
Полные тексты
Получение полных текстов статей из PMC с разбивкой по секциям
Гибкий поиск
Фильтрация по годам, поиск по заголовкам и полнотекстовый поиск
Богатые метаданные
Авторы, журналы, DOI, квартили, сниппеты с подсветкой найденного
Лимиты запросов
Рекомендуемая частота: не более 3 запросов в секунду. При массовом сборе данных добавляйте задержку 0.4 сек между запросами.
HH OpenAlex API
Поиск статей в базе OpenAlex — крупнейшем открытом каталоге научных публикаций. Возвращает метаданные, сниппеты с подсветкой и информацию о доступности полного текста.
Параметры
| Параметр | Тип | Описание |
|---|---|---|
| search_text required | string | Поисковый запрос (в URL path) |
| year_from optional | integer | Начальный год публикации (1900-2030) |
| year_to optional | integer | Конечный год публикации (1900-2030) |
| max_results optional | integer | Максимум результатов (1-100, по умолчанию 20) |
Структура ответа
Попробовать
Примеры кода
curl -X GET "https://biomedscihub.healthheuristics.org/hhopenalex/articles/machine%20learning?year_from=2024&max_results=5"
import requests
response = requests.get(
"https://biomedscihub.healthheuristics.org/hhopenalex/articles/machine learning",
params={
"year_from": 2024,
"max_results": 10
}
)
data = response.json()
print(f"Найдено: {data['count']} статей")
for article in data["articles"]:
print(f"{article['title']}")
print(f" Authors: {', '.join(article['authors'][:3])}")
print(f" Journal: {article['journal']}, {article['year']}")
print(f" DOI: {article['doi']}")
print(f" Full text: {'Да' if article['has_fulltext'] else 'Нет'}")
print()
const params = new URLSearchParams({
year_from: 2024,
max_results: 10
});
fetch(`https://biomedscihub.healthheuristics.org/hhopenalex/articles/machine learning?${params}`)
.then(res => res.json())
.then(data => {
console.log(`Найдено: ${data.count} статей`);
data.articles.forEach(article => {
console.log(article.title);
console.log(` DOI: ${article.doi}`);
console.log(` Has fulltext: ${article.has_fulltext}`);
});
});
HH PubMed API
Поиск статей в PubMed по ключевым словам. Возвращает метаданные и абстракты.
Параметры
| Параметр | Тип | Описание |
|---|---|---|
| search_text required | string | Поисковый запрос (в URL path) |
| year_from optional | integer | Начальный год публикации (1900-2030) |
| year_to optional | integer | Конечный год публикации (1900-2030) |
| max_results optional | integer | Максимум результатов (1-100, по умолчанию 20) |
Структура ответа
Попробовать
Примеры кода
curl -X GET "https://biomedscihub.healthheuristics.org/hhpubmed/articles/covid%20vaccine?year_from=2023&max_results=5"
import requests
response = requests.get(
"https://biomedscihub.healthheuristics.org/hhpubmed/articles/covid vaccine",
params={
"year_from": 2023,
"max_results": 10
}
)
data = response.json()
print(f"Найдено: {data['count']} статей")
for article in data["articles"]:
print(f"{article['title']}")
print(f" Authors: {', '.join(article['authors'][:3])}")
print(f" Journal: {article['journal']}, {article['year']}")
print(f" PMID: {article['pmid']}")
print()
const params = new URLSearchParams({
year_from: 2023,
max_results: 10
});
fetch(`https://biomedscihub.healthheuristics.org/hhpubmed/articles/covid vaccine?${params}`)
.then(res => res.json())
.then(data => {
console.log(`Найдено: ${data.count} статей`);
data.articles.forEach(article => {
console.log(article.title);
console.log(` PMID: ${article.pmid}`);
});
});
Получение полной информации о статье по её PubMed ID, включая абстракт и метаданные.
| Параметр | Тип | Описание |
|---|---|---|
| pmid required | string | PubMed ID статьи (например: 37123456) |
Попробовать
Поиск по полным текстам статей в PubMed Central. Возвращает сниппеты с выделением найденных фрагментов.
| Параметр | Тип | Описание |
|---|---|---|
| search_text required | string | Поисковый запрос |
| max_results optional | integer | Максимум результатов (1-50) |
Попробовать
HH PMC API (Полные тексты)
Получение полного текста статьи из PMC с разбивкой по секциям (Introduction, Methods, Results, Discussion и др.).
| Параметр | Тип | Описание |
|---|---|---|
| pmc_id required | string | PMC ID без префикса PMC (например: 7654321) |
Структура ответа
Попробовать
Поиск статей в PubMed Central с метаданными.
Попробовать
HH Europe PMC API
Поиск статей в европейском архиве биомедицинской литературы. Включает данные о цитированиях.
Попробовать
Руководство по интеграции
Базовый URL
Все запросы выполняются к базовому URL API. Авторизация не требуется.
BASE_URL="https://biomedscihub.healthheuristics.org"
Формат ответов
API возвращает данные в формате JSON. Все успешные ответы имеют HTTP статус 200. При ошибках возвращается статус 404 или 500 с описанием ошибки.
{
"query": "covid vaccine",
"count": 5,
"source": "pubmed",
"articles": [
{
"title": "...",
"authors": ["Author One", "Author Two"],
"abstract": "...",
"pmid": "12345678",
"doi": "10.1000/xyz123",
"journal": "Nature Medicine",
"year": 2024,
"has_fulltext": true,
"quartile": "Q1",
"snippet": "...relevant <mark>text</mark>...",
"url": "https://..."
}
]
}
Обработка ошибок
Рекомендуется обрабатывать ошибки и таймауты. API может вернуть 404 если статья не найдена, или 500 при проблемах с внешними источниками.
import requests
from requests.exceptions import RequestException
def search_articles(query, max_retries=3):
for attempt in range(max_retries):
try:
response = requests.get(
f"{BASE_URL}/hhpubmed/articles/{query}",
timeout=30
)
response.raise_for_status()
return response.json()
except RequestException as e:
if attempt == max_retries - 1:
raise
time.sleep(1) # Ожидание перед повтором
Пагинация и лимиты
Используйте параметр max_results для ограничения количества результатов. Для получения большего количества статей выполняйте несколько запросов с разными фильтрами (например, по годам).
# Сбор статей по годам
all_articles = []
for year in range(2020, 2025):
response = requests.get(
f"{BASE_URL}/hhpubmed/articles/cancer immunotherapy",
params={
"year_from": year,
"year_to": year,
"max_results": 100
}
)
all_articles.extend(response.json()["articles"])
time.sleep(0.5) # Соблюдение rate limit
Получение полных текстов
Для получения полного текста статьи сначала найдите её PMC ID через поиск, затем запросите полный текст через эндпоинт /hhpmc/article/{pmc_id}.
# 1. Поиск статьи
search = requests.get(f"{BASE_URL}/hhpubmed/articles/CRISPR").json()
# 2. Проверка доступности полного текста
for article in search["articles"]:
if article.get("has_fulltext"):
# Полный текст доступен
print(f"Full text available: {article['title']}")
# 3. Запрос полного текста (если есть pmc_id)
if article.get("pmc_id"):
pmc_id = article["pmc_id"].replace("PMC", "")
fulltext = requests.get(f"{BASE_URL}/hhpmc/article/{pmc_id}").json()
# 4. Доступ к секциям
intro = fulltext.get("fulltext_sections", {}).get("Introduction", "")
methods = fulltext.get("fulltext_sections", {}).get("Methods", "")