Trans: Fixed translator for Project MUSE

This commit is contained in:
Avram Lyon 2010-11-05 22:47:53 +00:00
parent fb91854601
commit f724949d83

View file

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