zotero/translators/NCBI Nucleotide.js

228 lines
5.7 KiB
JavaScript
Raw Normal View History

2024-08-27 21:48:20 -05:00
{
"translatorID": "5e385e77-2f51-41b4-a29b-908e23d5d3e8",
"label": "NCBI Nucleotide",
"creator": "Martin Fenner",
"target": "^https?://(www\\.)?ncbi\\.nlm\\.nih\\.gov/nuccore/",
"minVersion": "3.0",
"maxVersion": "",
"priority": 100,
"inRepository": true,
"translatorType": 4,
"browserSupport": "gcs",
"lastUpdated": "2021-06-07 11:25:19"
}
/**
Copyright (c) 2014 Martin Fenner
This program is free software: you can redistribute it and/or
modify it under the terms of the GNU Affero General Public License
as published by the Free Software Foundation, either version 3 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public
License along with this program. If not, see
<http://www.gnu.org/licenses/>.
*/
function detectWeb(doc, url) {
// use item type journalArticle until item type dataset is supported in Zotero
if (getIds(doc)) return "journalArticle";
// search results
if (url.indexOf("/?term=") != -1 && getSearchResults(doc, true)) return "multiple";
}
function doWeb(doc, url) {
if (detectWeb(doc, url) == "multiple") {
getSelectedJSON(doc);
} else {
var ids = getIds(doc);
getJSON(ids);
}
}
function getSearchResults(doc, checkOnly) {
var results = doc.getElementsByClassName('rslt');
if (!results.length) return false;
var items = {};
var found = false;
for (var i = 0; i < results.length; i++) {
var title = results[i].firstChild.textContent;
// parse the id (a number) from the second link
var links = results[i].getElementsByTagName("a");
var id = links[1].href.match(/[\d]+/);
if (id && title) {
if (checkOnly) return true;
found = true;
items["_" + id[0]] = ZU.trimInternal(title);
}
}
return found ? items : false;
}
function getSelectedJSON(doc) {
var items = getSearchResults(doc);
var ids = [];
Zotero.selectItems(items, function(selectedItems) {
if (!selectedItems) return true;
for (var i in selectedItems) {
ids.push(i.substr(1));
}
getJSON(ids);
});
}
function getIds(doc) {
var ids = ZU.xpathText(doc, '/html/head/meta[@name="ncbi_uidlist"]/@content')
if (!ids) return false;
return ids.split(",");
}
function getJSON(ids) {
var baseURL = "//eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=nucleotide&retmode=json&id=";
var jsonURL = baseURL + encodeURIComponent(ids.join(","));
Z.debug(jsonURL);
ZU.doGet(jsonURL, parseJSON);
}
function parseJSON(text) {
try {
var obj = JSON.parse(text).result;
var uids = obj.uids;
} catch (e) {
Z.debug(text.substr(0, 100));
throw e;
}
for (var i = 0; i < uids.length; i++) {
var uid = uids[i];
var data = obj[uid];
var item = new Z.Item("journalArticle");
item.title = data.title;
item.callNumber = data.accessionversion;
item.archive = "NCBI Nucleotide Database";
item.archiveLocation = uid;
// indicate that this is in fact a dataset
item.extra = "Type: dataset";
var version = data.accessionversion.match(/\.(\d{1,2})$/);
if (version && version[1] != '1') {
item.extra += "\nVersion: " + version[1];
}
item.url = "http://www.ncbi.nlm.nih.gov/nuccore/" + encodeURIComponent(data.accessionversion);
item.date = data.updatedate;
if (data.organism) item.tags.push(data.organism);
if (data.moltype) item.tags.push(data.moltype);
if (data.sourcedb) item.tags.push(data.sourcedb);
item.attachments.push({
url: "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&retmode=gb&rettype=text&id=" + encodeURIComponent(uid),
title: "Nucleotide sequence (gb)",
mimeType: "chemical/x-genbank",
snapshot: false
});
// http://www.ncbi.nlm.nih.gov/About/disclaimer.html
item.rights = "Public domain";
item.language = "en-US";
item.complete();
}
}
/** BEGIN TEST CASES **/
var testCases = [
{
"type": "web",
"url": "http://www.ncbi.nlm.nih.gov/nuccore/?term=brca1",
"items": "multiple"
},
{
"type": "web",
"url": "http://www.ncbi.nlm.nih.gov/nuccore/I01425.1",
"items": [
{
"itemType": "journalArticle",
"title": "Sequence 1 from Patent US 4849348",
"creators": [],
"date": "1993/03/05",
"archive": "NCBI Nucleotide Database",
"archiveLocation": "270186",
"callNumber": "I01425.1",
"extra": "Type: dataset",
"language": "en-US",
"libraryCatalog": "NCBI Nucleotide",
"rights": "Public domain",
"url": "http://www.ncbi.nlm.nih.gov/nuccore/I01425.1",
"attachments": [
{
"title": "Nucleotide sequence (gb)",
"mimeType": "chemical/x-genbank",
"snapshot": false
}
],
"tags": [
"dna",
"insd"
],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "web",
"url": "https://www.ncbi.nlm.nih.gov/nuccore/NM_078524.4",
"items": [
{
"itemType": "journalArticle",
"title": "Drosophila melanogaster smad on X, transcript variant A (Smox), mRNA",
"creators": [],
"date": "2016/12/13",
"archive": "NCBI Nucleotide Database",
"archiveLocation": "665390239",
"callNumber": "NM_078524.4",
"extra": "Type: dataset\nVersion: 4",
"language": "en-US",
"libraryCatalog": "NCBI Nucleotide",
"rights": "Public domain",
"url": "http://www.ncbi.nlm.nih.gov/nuccore/NM_078524.4",
"attachments": [
{
"title": "Nucleotide sequence (gb)",
"mimeType": "chemical/x-genbank",
"snapshot": false
}
],
"tags": [
"fruit fly",
"refseq",
"rna"
],
"notes": [],
"seeAlso": []
}
]
}
]
/** END TEST CASES **/