www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit f724949d83c5a458ae3e4ecbb4a5beaf2ed15dff
parent fb9185460185576b1d8f40df522dd08c42d7dff9
Author: Avram Lyon <ajlyon@gmail.com>
Date:   Fri,  5 Nov 2010 22:47:53 +0000

Trans: Fixed translator for Project MUSE


Diffstat:
Mtranslators/Project MUSE.js | 140+++++++++++++++++++++++++++++++++++++++----------------------------------------
1 file changed, 69 insertions(+), 71 deletions(-)

diff --git a/translators/Project MUSE.js b/translators/Project MUSE.js @@ -1,18 +1,18 @@ { - "translatorID":"c54d1932-73ce-dfd4-a943-109380e06574", - "translatorType":4, - "label":"Project MUSE", - "creator":"Simon Kornblith", - "target":"https?://[^/]*muse\\.jhu\\.edu[^/]*/(?:journals/[^/]+/[^/]+/[^/]+\\.html|search/results)", - "minVersion":"1.0.0b4.r1", - "maxVersion":"", - "priority":100, - "inRepository":true, - "lastUpdated":"2008-12-22 19:50:00" + "translatorID":"c54d1932-73ce-dfd4-a943-109380e06574", + "label":"Project MUSE", + "creator":"Simon Kornblith, Avram Lyon", + "target":"https?://[^/]*muse\\.jhu\\.edu[^/]*/(?:journals/[^/]+/[^/]+/[^/]+\\.html|search/results)", + "minVersion":"1.0.0b4.r1", + "maxVersion":"", + "priority":100, + "inRepository":"1", + "translatorType":4, + "lastUpdated":"2010-11-05 22:03:33" } function detectWeb(doc, url) { - var searchRe = new RegExp("^https?://[^/]+/search/results"); + var searchRe = new RegExp("(^https?://[^/]+/search/results|/toc/)"); if(searchRe.test(url)) { return "multiple"; } else { @@ -32,33 +32,32 @@ function doWeb(doc, url) { var attachments = new Array(); var pdfRe = /PDF/; var htmlRe = /HTML/; - - var tableRows = doc.evaluate('//div[@id="advancedsearch"]/save_form/table//tr', + if (searchRe.test(url)) { + // Search results + var tableRows = doc.evaluate('//div[@id="advancedsearch"]/save_form/table//tr', + doc, nsResolver, XPathResult.ANY_TYPE, null); + var tableRow; + // Go through table rows + while(tableRow = tableRows.iterateNext()) { + var input = doc.evaluate('.//input[@name="aid"]', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); + var title = doc.evaluate('.//div[@class="title"]', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); + if(input && input.value && title && title.textContent) { + items[input.value] = title.textContent; + } + } + } else if (url.match(/\/toc\//)) { + //Zotero.debug("here"); + var results = doc.evaluate('//div[@class="article"]', doc, nsResolver, XPathResult.ANY_TYPE, null); - var tableRow; - // Go through table rows - while(tableRow = tableRows.iterateNext()) { - // aid (article id) is what we need to get it all as one file - var input = doc.evaluate('.//input[@name="aid"]', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); - var title = doc.evaluate('.//div[@class="title"]', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); - if(input && input.value && title && title.textContent) { - items[input.value] = title.textContent; - - var aTags = tableRow.getElementsByTagName("a"); - - // get attachments - attachments[input.value] = new Array(); - for(var i=0; i<aTags.length; i++) { - var linkText = aTags[i].textContent; - if(pdfRe.test(linkText)) { - attachments[input.value].push({url:aTags[i].href, - title:"Project MUSE Full Text PDF", - mimeType:"application/pdf"}); - } else if(htmlRe.test(linkText)) { - attachments[input.value].push({url:aTags[i].href, - title:"Project MUSE Snapshot", - mimeType:"text/html"}); - } + var result; + while(result = results.iterateNext()) { + //Zotero.debug(result.textContent); + var link = doc.evaluate('.//div[@class="links"]/p//a[3]', result, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); + var title = doc.evaluate('.//div[@class="title"]', result, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); + //Zotero.debug(link.textContent); + if(link && link.href && title && title.textContent) { + items[link.href] = title.textContent; + //Zotero.debug(link.href); } } } @@ -66,47 +65,43 @@ function doWeb(doc, url) { if(!items) { return true; } + var i; + var urls = []; + for (i in items) urls.push(i); - var articleString = ""; - var newAttachments = new Array(); - for(var i in items) { - articleString += "&aid="+i; - newAttachments.push(attachments[i]); - } - - Zotero.Utilities.HTTP.doGet("http://muse.jhu.edu/search/export.cgi?exporttype=endnote"+articleString, function(text) { - // load translator for RIS - var translator = Zotero.loadTranslator("import"); - translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); - translator.setString(text); - translator.setHandler("itemDone", function(obj, item) { - if(item.notes && item.notes[0]) { - item.extra = item.notes[0].note; - delete item.notes; - item.notes = undefined; - } - item.attachments = newAttachments.shift(); - item.complete(); - }); - translator.translate(); - Zotero.done(); - }, function() {}); - - Zotero.wait(); - } else { - var hostRe = new RegExp("^(http://[^/]+)/"); + Zotero.Utilities.processDocuments(urls, scrapeOne); + } else scrapeOne(doc); + Zotero.wait(); +} + +// Given an article page, get the RIS and open it +function scrapeOne(doc) { + var url = doc.location.href; + var namespace = doc.documentElement.namespaceURI; + var nsResolver = namespace ? function(prefix) { + if (prefix == 'x') return namespace; else return null; + } : null; + + var hostRe = new RegExp("^(http://[^/]+)/"); var m = hostRe.exec(url); var host = m[1]; var getPDF = doc.evaluate('//a[text() = "PDF Version"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); - - var newUrl = url.replace(host, host+"/metadata/zotero"); + var DOI = doc.evaluate('//div[@class="doi"]', doc, + nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); + var abstract = doc.evaluate('//abstract', doc, + nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); + + + var newUrl = url.replace(host, host+"/metadata/zotero").replace("/summary/","/");; + //Zotero.debug(newUrl); Zotero.Utilities.HTTP.doGet(newUrl, function(text) { var translator = Zotero.loadTranslator("import"); //set RIS translator translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); + Zotero.debug(text); translator.setHandler("itemDone", function(obj, item) { if(item.notes && item.notes[0]) { item.extra = item.notes[0].note; @@ -119,10 +114,14 @@ function doWeb(doc, url) { item.attachments.push({title:"Project MUSE Full Text PDF", mimeType:"application/pdf", url:getPDF.href}); } - + if(DOI) { + item.DOI = DOI.textContent.replace(/^DOI: /,""); + } + if(abstract) { + item.abstract = abstract.textContent; + } item.complete(); }); translator.translate(); }); - } -} -\ No newline at end of file +}