UNPKG

node-ncbi

Version:

Access and parse the NCBI eUtils API in Node or the Browser

98 lines (85 loc) 2.43 kB
'use strict'; const gateways = require('./gateways'); const queries = require('./queries'); module.exports = { search: function(query, page, resultsPerPage) { let count; page = page || 0; resultsPerPage = resultsPerPage || 10; return gateways.pubmedSearch(query, page, resultsPerPage).resolve(data => { count = queries.count(data); const pmids = queries.ids(data); if (!pmids.length) { return { count: 0, papers: [] }; } return new Promise((resolve, reject) => { this.summaries(pmids).then(summaries => { resolve({ count: count, papers: summaries }); }).catch(err => reject(err)); }); }); }, summaries: function(pmids) { return gateways.pubmedSummary(pmids).resolve(queries.summaries); }, summary: function(pmid) { return gateways.pubmedSummary(pmid).resolve(data => { const summaries = queries.summaries(data); if (summaries.length) { return summaries[0]; } else { return null; } }); }, citedBy: function(pmid) { return gateways.pubmedLinks(pmid).resolve(data => { var pmids = queries.findLinks('pubmed_pubmed_citedin', data); if (!pmids.length) return []; return this.summaries(pmids); }); }, cites: function(pmid) { return gateways.pubmedLinks(pmid).resolve(data => { var pmids = queries.findLinks('pubmed_pubmed_refs', data); if (!pmids.length) return []; return this.summaries(pmids); }); }, similar: function(pmid) { return gateways.pubmedLinks(pmid).resolve(data => { var pmids = queries.findLinks('pubmed_pubmed', data); if (!pmids.length) return []; return this.summaries(pmids); }); }, abstract: function(pmid) { return gateways.pubmedRecord(pmid).resolve(queries.abstract); }, isOa: function(pmid) { return this.summary(pmid).then(summary => { if (!summary) { return null; } else { const pmcid = summary.pmc; return gateways.pmcFullText(pmcid).resolve(queries.isOa); } }); }, fulltext: function(pmid) { return this.summary(pmid).then(summary => { if (!summary) { return null; } else { const pmcid = summary.pmc; return gateways.pmcFullText(pmcid).send().then(res => res.body); } }); } }