diff --git a/translators/Copernicus.js b/translators/Copernicus.js index 02ecb8c07c..4d4b9b9982 100644 --- a/translators/Copernicus.js +++ b/translators/Copernicus.js @@ -1,77 +1,60 @@ { - "translatorID":"a8df3cb0-f76c-4e2c-a11e-5fa283f8010c", - "translatorType":4, - "label":"Copernicus", - "creator":"Michael Berkowitz", - "target":"http://www.(adv-geosci|adv-radio-sci|ann-geophys).net/", - "minVersion":"1.0.0b4.r5", - "maxVersion":"", - "priority":100, - "inRepository":true, - "lastUpdated":"2009-01-08 08:19:07" + "translatorID": "8082115d-5bc6-4517-a4e8-abed1b2a784a", + "label": "Copernicus", + "creator": "Michael Berkowitz", + "target": "http://www.(adv-sci-res|adv-geosci|adv-radio-sci|ann-geophys|astrophys-space-sci-trans|atmos-chem-phys|biogeosciences(-discuss)?|clim-past|electronic-earth|hydrol-earth-syst-sci|nat-hazards-earth-syst-sci|nonlin-processes-geophys|ocean-sci|soc-geogr|surv-perspect-integr-environ-soc|the-cryosphere).net/", + "minVersion": "2.1", + "maxVersion": "", + "priority": 100, + "inRepository": true, + "translatorType": 4, + "lastUpdated": "2011-07-01 10:38:24" } function detectWeb(doc, url) { - if (doc.evaluate('//iframe', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate('//li[a[contains(text(), "Abstract")]]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { + if (doc.evaluate('//div[@id="publisher"]/iframe', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate('//td[*[a[contains(text(), "Abstract")]]]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.title.match(/Abstract/)) { return "journalArticle"; } } -function scrape(doc) { - var item = new Zotero.Item("journalArticle"); - item.url = doc.location.href; - item.title = doc.evaluate('//span[@class="inhaltueber_16f"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; - item.publicationTitle = doc.evaluate('//span[@class="ueberschrift"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(/\n/)[0]; - item.repository = item.publicationTitle; - var authors = doc.evaluate('//td/span[3]/b', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; - authors = authors.replace(/\d/g, "").replace(/,,/, ",").split(/(,|and)/); - for each (var aut in authors) { - if (!(aut == "and") && (aut.match(/\w/))) { - aut = Zotero.Utilities.trimInternal(aut); - names = aut.match(/(.*)\s([^\s]+)/); - item.creators.push({firstName:names[1], lastName:names[2], creatorType:"author"}); - } - } - var voliss = doc.evaluate('//tr[3]/td/span[@class="lib_small"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; - voliss = voliss.match(/^([^,]+),([^,]+),([^,]+),([^w]+)/); - item.journalAbbreviation = voliss[1]; - item.volume = Zotero.Utilities.trimInternal(voliss[2]); - item.pages = Zotero.Utilities.trimInternal(voliss[3]); - item.year = Zotero.Utilities.trimInternal(voliss[4]); - item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate('//tr[3]/td/span[4]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.substr(10)); - item.attachments = [ - {url:item.url, title:item.publicationTitle + " Snapshot", mimeType:"text/html"}, - {url:item.url.replace(".html", ".pdf"), title:item.publicationTitle + " PDF", mimeType:"application/pdf"} - ]; - item.complete(); +function getRIS(link) { + Zotero.Utilities.HTTP.doGet(link, function(text) { + var translator = Zotero.loadTranslator("import"); + translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); + translator.setString(text); + translator.setHandler("itemDone", function(obj, item) { + item.repository = "Copernicus Online Journals"; + item.attachments[0].title = item.publicationTitle + " Snapshot"; + item.attachments[0].mimeType = "text/html"; + item.attachments[1].title = item.publicationTitle + " PDF"; + item.complete(); + }); + translator.translate(); + }); } function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); - if (doc.evaluate('//iframe', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { - var link = doc.evaluate('//iframe', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src; + if (doc.evaluate('//div[@id="publisher"]/iframe', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { + var link = doc.evaluate('//div[@id="publisher"]/iframe', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src; Zotero.Utilities.HTTP.doGet(link, function(text) { var links = text.match(/[^<]+/g); for each (var link in links) { link = link.match(/href=\"([^"]+)\">(.*)/); - items[link[1].replace(/\.[^\.]+$/, ".html")] = Zotero.Utilities.trimInternal(link[2]) + "..."; + items[link[1].replace(/\.[^\.]+$/, ".ris")] = Zotero.Utilities.trimInternal(link[2]) + "..."; } items = Zotero.selectItems(items); for (var i in items) { - arts.push(i); + getRIS(i); } - - Zotero.Utilities.processDocuments(arts, function(doc) { - scrape(doc); - }, function() {Zotero.done();}); }); } else { - var titles = doc.evaluate('//li[a[contains(text(), "Abstract")]]/span[@class="articletitle"]', doc, null, XPathResult.ANY_TYPE, null); - var links = doc.evaluate('//li[a[contains(text(), "Abstract")]]/a[1]', doc, null, XPathResult.ANY_TYPE, null); + var titles = doc.evaluate('//td[*[a[contains(text(), "Abstract")]]]/span[@class="pb_toc_article_title"]', doc, null, XPathResult.ANY_TYPE, null); + var links = doc.evaluate('//td[*[a[contains(text(), "Abstract")]]]//a[1]', doc, null, XPathResult.ANY_TYPE, null); var title; var link; while ((title = titles.iterateNext()) && (link = links.iterateNext())) { @@ -79,14 +62,125 @@ function doWeb(doc, url) { } items = Zotero.selectItems(items); for (var i in items) { - arts.push(i); + getRIS(i.replace(".html", ".ris")); } - Zotero.Utilities.processDocuments(arts, function(doc) { scrape(doc);}, function() {Zotero.done();}); } } else { - Zotero.Utilities.processDocuments([url], function(doc) { - scrape(doc); - }, function() {Zotero.done();}); + getRIS(url.replace('.html', '.ris')); } Zotero.wait(); -} \ No newline at end of file +} + +/** BEGIN TEST CASES **/ +var testCases = [ + { + "type": "web", + "url": "http://www.adv-geosci.net/30/1/2011/adgeo-30-1-2011.html", + "items": [ + { + "itemType": "journalArticle", + "creators": [ + { + "lastName": "Michaelides", + "firstName": "S.", + "creatorType": "author" + }, + { + "lastName": "Athanasatos", + "firstName": "S.", + "creatorType": "author" + } + ], + "notes": [], + "tags": [], + "seeAlso": [], + "attachments": [ + { + "url": "http://www.adv-geosci.net/30/1/2011/", + "title": "Adv. Geosci. Snapshot", + "mimeType": "text/html" + }, + { + "url": "http://www.adv-geosci.net/30/1/2011/adgeo-30-1-2011.pdf", + "mimeType": "application/pdf", + "title": "Adv. Geosci. PDF", + "downloadable": true + } + ], + "title": "Preface ''Precipitation: Measurement, Climatology, Remote Sensing, and Modeling (EGU 2010)''", + "publicationTitle": "Adv. Geosci.", + "volume": "30", + "pages": "1-2", + "date": "May 09, 2011", + "publisher": "Copernicus Publications", + "ISBN": "1680-7359", + "ISSN": "1680-7359", + "url": "http://www.adv-geosci.net/30/1/2011/", + "DOI": "10.5194/adgeo-30-1-2011", + "libraryCatalog": "Copernicus Online Journals", + "accessDate": "CURRENT_TIMESTAMP", + "shortTitle": "Preface ''Precipitation" + } + ] + }, + { + "type": "web", + "url": "http://www.adv-radio-sci.net/6/1/2008/ars-6-1-2008.html", + "items": [ + { + "itemType": "journalArticle", + "creators": [ + { + "lastName": "Will", + "firstName": "B.", + "creatorType": "author" + }, + { + "lastName": "Gerding", + "firstName": "M.", + "creatorType": "author" + }, + { + "lastName": "Schultz", + "firstName": "S.", + "creatorType": "author" + }, + { + "lastName": "Schiek", + "firstName": "B.", + "creatorType": "author" + } + ], + "notes": [], + "tags": [], + "seeAlso": [], + "attachments": [ + { + "url": "http://www.adv-radio-sci.net/6/1/2008/", + "title": "Adv. Radio Sci. Snapshot", + "mimeType": "text/html" + }, + { + "url": "http://www.adv-radio-sci.net/6/1/2008/ars-6-1-2008.pdf", + "mimeType": "application/pdf", + "title": "Adv. Radio Sci. PDF", + "downloadable": true + } + ], + "title": "Time domain reflectrometry measurements using a movable obstacle for the determination of dielectric profiles", + "publicationTitle": "Adv. Radio Sci.", + "volume": "6", + "pages": "1-4", + "date": "May 26, 2008", + "publisher": "Copernicus Publications", + "ISBN": "1684-9965", + "ISSN": "1684-9965", + "url": "http://www.adv-radio-sci.net/6/1/2008/", + "DOI": "10.5194/ars-6-1-2008", + "libraryCatalog": "Copernicus Online Journals", + "accessDate": "CURRENT_TIMESTAMP" + } + ] + } +] +/** END TEST CASES **/ diff --git a/translators/Copernicus2.js b/translators/Copernicus2.js deleted file mode 100644 index eeb98fc869..0000000000 --- a/translators/Copernicus2.js +++ /dev/null @@ -1,72 +0,0 @@ -{ - "translatorID":"8082115d-5bc6-4517-a4e8-abed1b2a784a", - "translatorType":4, - "label":"Copernicus2", - "creator":"Michael Berkowitz", - "target":"http://www.(adv-sci-res|astrophys-space-sci-trans|atmos-chem-phys|biogeosciences(-discuss)?|clim-past|electronic-earth|hydrol-earth-syst-sci|nat-hazards-earth-syst-sci|nonlin-processes-geophys|ocean-sci|soc-geogr|surv-perspect-integr-environ-soc|the-cryosphere).net/", - "minVersion":"1.0.0b4.r5", - "maxVersion":"", - "priority":100, - "inRepository":true, - "lastUpdated":"2008-06-29 21:10:00" -} - -function detectWeb(doc, url) { - if (doc.evaluate('//div[@id="publisher"]/iframe', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate('//td[*[a[contains(text(), "Abstract")]]]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { - return "multiple"; - } else if (doc.title.match(/Abstract/)) { - return "journalArticle"; - } -} - -function getRIS(link) { - Zotero.Utilities.HTTP.doGet(link, function(text) { - var translator = Zotero.loadTranslator("import"); - translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); - translator.setString(text); - translator.setHandler("itemDone", function(obj, item) { - item.repository = "Copernicus Online Journals"; - item.attachments[0].title = item.publicationTitle + " Snapshot"; - item.attachments[0].mimeType = "text/html"; - item.attachments[1].title = item.publicationTitle + " PDF"; - item.complete(); - }); - translator.translate(); - }); -} - -function doWeb(doc, url) { - var arts = new Array(); - if (detectWeb(doc, url) == "multiple") { - var items = new Object(); - if (doc.evaluate('//div[@id="publisher"]/iframe', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { - var link = doc.evaluate('//div[@id="publisher"]/iframe', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src; - Zotero.Utilities.HTTP.doGet(link, function(text) { - var links = text.match(/[^<]+/g); - for each (var link in links) { - link = link.match(/href=\"([^"]+)\">(.*)/); - items[link[1].replace(/\.[^\.]+$/, ".ris")] = Zotero.Utilities.trimInternal(link[2]) + "..."; - } - items = Zotero.selectItems(items); - for (var i in items) { - getRIS(i); - } - }); - } else { - var titles = doc.evaluate('//td[*[a[contains(text(), "Abstract")]]]/span[@class="pb_toc_article_title"]', doc, null, XPathResult.ANY_TYPE, null); - var links = doc.evaluate('//td[*[a[contains(text(), "Abstract")]]]//a[1]', doc, null, XPathResult.ANY_TYPE, null); - var title; - var link; - while ((title = titles.iterateNext()) && (link = links.iterateNext())) { - items[link.href] = title.textContent; - } - items = Zotero.selectItems(items); - for (var i in items) { - getRIS(i.replace(".html", ".ris")); - } - } - } else { - getRIS(url.replace('.html', '.ris')); - } - Zotero.wait(); -} \ No newline at end of file