Published
Edited
Nov 4, 2020
Insert cell
fetch_badge(altm.images.small)
Insert cell
function fetch_badge(url) {
return new Promise((resolve, reject) => {
const image = new Image();
image.crossOrigin = "anonymous";
image.src = url;
image.onload = () => resolve(image);
image.onerror = reject;
});
}
Insert cell
altm = d3.json("https://api.altmetric.com/v1/doi/" + dois[0])
Insert cell
d3.json(icite_term)
Insert cell
icite_term = {
let icite = "https://icite.od.nih.gov/api/pubs?pmids=";
return icite + pmid;
}
Insert cell
d3.text(
"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&rettype=abstract&retmode=text&id=16239182"
)
Insert cell
{
let pubmed_abstract =
"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&rettype=abstract&retmode=text&id=";
d3.json(pubmed_abstract + pmid);
}
Insert cell
pmids = pmid_result.flat()
Insert cell
pmid_result = {
let pmids = [];
uris.forEach(function(d) {
pmids.push(get_pmid(d));
});
return pmids;
}
Insert cell
uris = {
let uris = [];
search_terms.forEach(function(d) {
uris.push(construct_pubmed_uri(d));
});
return uris;
}
Insert cell
search_terms = {
let search_terms = [];
messages.forEach(function(d) {
search_terms.push(make_search_term(d));
});
return search_terms;
}
Insert cell
messages = {
let messages = [];
crossrefs.forEach(function(d) {
messages.push(get_crossref_message(d));
});
return messages;
}
Insert cell
crossrefs = {
let crossrefs = [];
dois.forEach(function(d) {
get_crossref(d).then(d => crossrefs.push(d));
});
return crossrefs;
}
Insert cell
dois = extract_dois_from_data(data)
Insert cell
function construct_pubmed_uri(pubmed_terms) {
let pub_med_base_url =
"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&retmode=json&term=";
let and = "+AND+";
let uri =
pub_med_base_url +
pubmed_terms.title +
"[title]" +
and +
pubmed_terms.author +
"[author+-+first]" +
and +
pubmed_terms.journal +
"[journal]";
return uri;
}
Insert cell
function get_crossref_message(crossref_result) {
let message;
message = crossref_result.message;
return message;
}
Insert cell
typeof test
Insert cell
test = d3.json(uris[0]).then(d => d.esearchresult.idlist[0])
Insert cell
function get_pmid(uri) {
let pmid = [];
d3.json(uri).then(function(d) {
pmid.push(d.esearchresult.idlist[0]);
});
return pmid;
}
Insert cell
function make_search_term(crossref) {
let search_term = {};
search_term.title = encodeURI(crossref.title[0]);
search_term.author = encodeURI(crossref.author[0].family);
search_term.journal = encodeURI(crossref["container-title"][0]);
return search_term;
}
Insert cell
//Retrieve metadata from crossref

async function get_crossref(doi) {
let crossref_base = "https://api.crossref.org/works/";
let result = await d3.json(crossref_base.concat(doi));
return result;
}
Insert cell
function extract_dois_from_data(data) {
// Make array of DOIs from google sheet
let dois = [];
data.forEach(d => dois.push(d.doi));
return dois;
}
Insert cell
data = {
// URL for cors and google-docs spreadsheet, crossref and pubmed!

let cors = "https://cors-anywhere.herokuapp.com/";
let google_sheet_base = "https://docs.oogle.com/spreadsheets/d/e/";
let google_key =
"2PACX-1vT37fqbA5WV6eecRPONprlL_AMoEqAuywkvOhN2gZsBGHE65_1r_aUvml6ljmfOtPGGesOJCmd7zS8z";
let google_output = "/pub?output=csv";
let crossref_base = "https://api.crossref.org/works/";

// csv file as backup in case of corse failure! (Almost always)

let data = d3.csvParse(
await FileAttachment("reference_data - Sheet1.csv").text()
);

// Get csv from google docs!

//let data = d3.csv(cors + google_sheet_base + google_key + google_output);

return data;
}
Insert cell
d3 = require("d3@v5")
Insert cell

One platform to build and deploy the best data apps

Experiment and prototype by building visualizations in live JavaScript notebooks. Collaborate with your team and decide which concepts to build out.
Use Observable Framework to build data apps locally. Use data loaders to build in any language or library, including Python, SQL, and R.
Seamlessly deploy to Observable. Test before you ship, use automatic deploy-on-commit, and ensure your projects are always up-to-date.
Learn more