-
-
Save hubgit/d6ae523f74f515ecd05d to your computer and use it in GitHub Desktop.
<!doctype html> | |
<meta charset="utf-8"> | |
<title>PubMed Search</title> | |
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css"> | |
<ul id="output"></ul> | |
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script> | |
<script src="pubmed-search.js"></script> |
searchPubMed('FOXP3 AND 2013/01:2014/01[Publication Date]') | |
.then(fetchResults) | |
.then(parseResults) | |
.then(displayResults); | |
function searchPubMed(term) { | |
return $.ajax({ | |
url: 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi', | |
data: { | |
db: 'pubmed', | |
usehistory: 'y', | |
term: term, | |
retmode: 'json', | |
retmax: 0 | |
} | |
}); | |
} | |
function fetchResults(response) { | |
return $.ajax({ | |
url: 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi', | |
data: { | |
db: 'pubmed', | |
usehistory: 'y', | |
webenv: response.esearchresult.webenv, | |
query_key: response.esearchresult.querykey, | |
retmode: 'xml', | |
retmax: 10 // how many items to return | |
} | |
}); | |
} | |
function parseResults(response) { | |
var nodes = response.querySelectorAll('DocSum'); | |
return $.map(nodes, function(node) { | |
var pmidNode = node.querySelector('Id'); | |
var doiNode = node.querySelector('Item[Name=DOI]'); | |
var titleNode = node.querySelector('Item[Name=Title]'); | |
var sourceNode = node.querySelector('Item[Name=Source]'); | |
var epubDateNode = node.querySelector('Item[Name=EPubDate]'); | |
var pubDateNode = node.querySelector('Item[Name=PubDate]'); | |
var authorNodes = node.querySelectorAll('Item[Name=AuthorList] > Item[Name=Author]'); | |
return { | |
title: titleNode ? titleNode.textContent : null, | |
source: sourceNode ? sourceNode.textContent : null, | |
authors: $.map(authorNodes, function(authorNode) { | |
return authorNode.textContent; | |
}), | |
url: doiNode ? 'http://dx.doi.org/' + encodeURIComponent(doiNode.textContent) : 'http://pubmed.gov/' + pmidNode.textContent, | |
date: epubDateNode && epubDateNode.textContent ? epubDateNode.textContent : pubDateNode.textContent, | |
}; | |
}); | |
} | |
function displayResults(articles) { | |
var output = $('#output'); | |
$.each(articles, function (i, article) { | |
var item = $('<li/>').appendTo(output); | |
var container = $('<div/>').appendTo(item); | |
$('<a/>', { | |
href: article.url, | |
text: article.title | |
}).appendTo(container); | |
$('<div/>', { | |
text: article.authors.join(', ') | |
}).appendTo(item); | |
$('<div/>', { | |
text: article.date + ' · ' + article.source | |
}).appendTo(item); | |
}); | |
} |
I try to search blood pressure but an exception thrown
Returned JSON
{"header":{"type":"esearch","version":"0.3"},"esearchresult":{"count":"593071","retmax":"0","retstart":"0","querykey":"1","webenv":"NCID_1_265393899_130.14.22.76_9001_1556770035_288546446_0MetA0_S_MegaStore","idlist":[],"translationset":[{"from":"blood pressure","to":""blood pressure"[MeSH Terms] OR ("blood"[All Fields] AND "pressure"[All Fields]) OR "blood pressure"[All Fields] OR "blood pressure determination"[MeSH Terms] OR ("blood"[All Fields] AND "pressure"[All Fields] AND "determination"[All Fields]) OR "blood pressure determination"[All Fields] OR ("blood"[All Fields] AND "pressure"[All Fields]) OR "blood pressure"[All Fields] OR "arterial pressure"[MeSH Terms] OR ("arterial"[All Fields] AND "pressure"[All Fields]) OR "arterial pressure"[All Fields] OR ("blood"[All Fields] AND "pressure"[All Fields])"}],"translationstack":[{"term":""blood pressure"[MeSH Terms]","field":"MeSH Terms","count":"281483","explode":"Y"},{"term":""blood"[All Fields]","field":"All Fields","count":"3686199","explode":"N"},{"term":""pressure"[All Fields]","field":"All Fields","count":"1124535","explode":"N"},"AND","GROUP","OR",{"term":""blood pressure"[All Fields]","field":"All Fields","count":"428474","explode":"N"},"OR",{"term":""blood pressure determination"[MeSH Terms]","field":"MeSH Terms","count":"37604","explode":"Y"},"OR",{"term":""blood"[All Fields]","field":"All Fields","count":"3686199","explode":"N"},{"term":""pressure"[All Fields]","field":"All Fields","count":"1124535","explode":"N"},"AND",{"term":""determination"[All Fields]","field":"All Fields","count":"505774","explode":"N"},"AND","GROUP","OR",{"term":""blood pressure determination"[All Fields]","field":"All Fields","count":"26732","explode":"N"},"OR",{"term":""blood"[All Fields]","field":"All Fields","count":"3686199","explode":"N"},{"term":""pressure"[All Fields]","field":"All Fields","count":"1124535","explode":"N"},"AND","GROUP","OR",{"term":""blood pressure"[All Fields]","field":"All Fields","count":"428474","explode":"N"},"OR",{"term":""arterial pressure"[MeSH Terms]","field":"MeSH Terms","count":"4646","explode":"Y"},"OR",{"term":""arterial"[All Fields]","field":"All Fields","count":"391797","explode":"N"},{"term":""pressure"[All Fields]","field":"All Fields","count":"1124535","explode":"N"},"AND","GROUP","OR",{"term":""arterial pressure"[All Fields]","field":"All Fields","count":"60038","explode":"N"},"OR",{"term":""blood"[All Fields]","field":"All Fields","count":"3686199","explode":"N"},{"term":""pressure"[All Fields]","field":"All Fields","count":"1124535","explode":"N"},"AND","GROUP","OR","GROUP"],"querytranslation":""blood pressure"[MeSH Terms] OR ("blood"[All Fields] AND "pressure"[All Fields]) OR "blood pressure"[All Fields] OR "blood pressure determination"[MeSH Terms] OR ("blood"[All Fields] AND "pressure"[All Fields] AND "determination"[All Fields]) OR "blood pressure determination"[All Fields] OR ("blood"[All Fields] AND "pressure"[All Fields]) OR "blood pressure"[All Fields] OR "arterial pressure"[MeSH Terms] OR ("arterial"[All Fields] AND "pressure"[All Fields]) OR "arterial pressure"[All Fields] OR ("blood"[All Fields] AND "pressure"[All Fields])"}}
Error Thrown: response.querySelectorAll is not a function
Error caused by this line
var nodes = response.querySelectorAll('DocSum');
thanks in advance for any advise
Thanks a lot! This is great!