{ "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 . */ 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 **/