Public
Edited
Apr 1, 2023
Insert cell
Insert cell
esearchresult = {
const url = new URL(
"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi"
);
url.searchParams.set("db", "nlmcatalog");
url.searchParams.set("term", '"Medicine"[MeSH] AND currentlyindexed[All]');
url.searchParams.set("retmax", "0");
url.searchParams.set("format", "json");
url.searchParams.set("usehistory", "y");

const response = await fetch(url);
if (response.ok) {
const data = await response.json();
return data.esearchresult;
} else {
console.error(await response.text());
}
}
Insert cell
efetchresult = {
const url = new URL(
"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi"
);
url.searchParams.set("db", "nlmcatalog");
url.searchParams.set("query_key", esearchresult.querykey);
url.searchParams.set("webenv", esearchresult.webenv);
url.searchParams.set("retmax", esearchresult.count);
url.searchParams.set("format", "xml");
console.log(url.toString());

const response = await fetch(url);
if (response.ok) {
const xml = await response.text();
return new DOMParser().parseFromString(xml, "application/xml");
} else {
console.error(await response.text());
}
}
Insert cell
items = {
const items = [];
for (const recordNode of efetchresult.querySelectorAll("NLMCatalogRecord")) {
const item = {
id: recordNode.querySelector(":scope > NlmUniqueID").textContent,
title: recordNode.querySelector(":scope > MedlineTA").textContent,
issns: []
};
for (const issnNode of recordNode.querySelectorAll(
':scope > ISSN[ValidYN="Y"]'
)) {
const type = issnNode.getAttribute("IssnType");
const issn = issnNode.textContent;
item.issns.push({ issn, type });
}

items.push(item);
}
return items;
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more