Permalink
Join GitHub today
GitHub is home to over 36 million developers working together to host and review code, manage projects, and build software together.
Sign up
Fetching contributors…
Cannot retrieve contributors at this time
{ | |
"translatorID": "0a84a653-79ea-4c6a-8a68-da933e3b504a", | |
"translatorType": 4, | |
"label": "Alexander Street Press", | |
"creator": "John West and Michael Berkowitz", | |
"target": "^https?://(www\\.)alexanderstreet", | |
"minVersion": "1.0.0b4.r5", | |
"maxVersion": "", | |
"priority": 100, | |
"inRepository": true, | |
"lastUpdated": "2009-01-08 08:19:07" | |
} | |
function detectWeb(doc, url) { | |
if ( url.indexOf("object.details.aspx") != -1 ) { | |
var zitemtype = doc.getElementById("ctl00_ctl00_MasterContentBody_ContentPlaceHolder1_txtZType").value; | |
switch (zitemtype.toLowerCase()) { | |
case "book": | |
return "book"; | |
break; | |
case "chapter": | |
return "bookSection"; | |
break; | |
case "journal": | |
return "journalArticle"; | |
break; | |
case "manuscript": | |
return "manuscript"; | |
break; | |
case "audio": | |
return "audioRecording"; | |
break; | |
case "video": | |
return "videoRecording"; | |
break; | |
case "issue": | |
return "journalArticle"; | |
break; | |
case "article": | |
return "journalArticle"; | |
break; | |
case "series": | |
return "interview"; | |
break; | |
case "session": | |
return "interview"; | |
break; | |
default: | |
return "document"; | |
} | |
} else if (url.indexOf("results.aspx") != -1) { | |
return "multiple"; | |
} | |
} | |
function scrape(doc, url) { | |
// set prefix for serverside control | |
var p = "ctl00_ctl00_MasterContentBody_ContentPlaceHolder1_txtZ"; | |
// get values from hidden inputs | |
var ztype = GetItemType(doc.getElementById(p+"Type").value); | |
var ztitle = doc.getElementById(p+"Title").value; | |
var zbooktitle = doc.getElementById(p+"BookTitle").value; | |
var znotes = doc.getElementById(p+"Notes").value; | |
var zurl = doc.getElementById(p+"URL").value; | |
var zrights = doc.getElementById(p+"Rights").value; | |
var zseries = doc.getElementById(p+"Series").value; | |
var zvolume = doc.getElementById(p+"Volume").value; | |
var zissue = doc.getElementById(p+"Issue").value; | |
var zedition = doc.getElementById(p+"Edition").value; | |
var zplace = doc.getElementById(p+"Place").value; | |
var zpublisher = doc.getElementById(p+"Publisher").value; | |
var zpages = doc.getElementById(p+"Pages").value; | |
var zrepository = doc.getElementById(p+"Repository").value; | |
var zlabel = doc.getElementById(p+"Label").value; | |
var zrunningTime = doc.getElementById(p+"RunningTime").value; | |
var zlanguage = doc.getElementById(p+"Language").value; | |
var zauthor = doc.getElementById(p+"Author").value; | |
var zeditor = doc.getElementById(p+"Editor").value; | |
var ztranslator = doc.getElementById(p+"Translator").value; | |
var zinterviewee = doc.getElementById(p+"Interviewee").value; | |
var zinterviewer = doc.getElementById(p+"Interviewer").value; | |
var zrecipient = doc.getElementById(p+"Recipient").value; | |
var zdirector = doc.getElementById(p+"Director").value; | |
var zscriptwriter = doc.getElementById(p+"ScriptWriter").value; | |
var zproducer = doc.getElementById(p+"Producer").value; | |
var zcastMember = doc.getElementById(p+"CastMember").value; | |
var zperformer = doc.getElementById(p+"Performer").value; | |
var zcomposer = doc.getElementById(p+"Composer").value; | |
// create Zotero item | |
var newArticle = new Zotero.Item(ztype); | |
// populate Zotero item | |
newArticle.title = ztitle; | |
newArticle.bookTitle = zbooktitle; | |
newArticle.notes = znotes; | |
newArticle.url = zurl; | |
newArticle.place = zplace; | |
newArticle.publisher = zpublisher; | |
newArticle.pages = zpages; | |
newArticle.rights = zrights; | |
newArticle.series = zseries; | |
newArticle.volume = zvolume; | |
newArticle.issue = zissue; | |
newArticle.edition = zedition; | |
newArticle.repository = zrepository; | |
newArticle.label = zlabel; | |
newArticle.runningTime = zrunningTime; | |
newArticle.language = zlanguage; | |
newArticle.editor = zeditor; | |
newArticle.translator = ztranslator; | |
newArticle.interviewee = zinterviewee; | |
newArticle.interviewer = zinterviewer; | |
newArticle.recipient = zrecipient; | |
newArticle.director = zdirector; | |
newArticle.scriptwriter = zscriptwriter; | |
newArticle.producer = zproducer; | |
newArticle.castMember = zcastMember; | |
newArticle.performer = zperformer; | |
newArticle.composer = zcomposer; | |
var aus = zauthor.split(";"); | |
for (var i=0; i< aus.length ; i++) { | |
newArticle.creators.push(Zotero.Utilities.cleanAuthor(aus[i], "author", true)); | |
} | |
newArticle.attachments = [{url:doc.location.href, title:"Alexander Street Press Snapshot", mimeType:"text/html"}]; | |
if (doc.evaluate('//a[contains(@href, "get.pdf")]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { | |
var pdfurl = doc.evaluate('//a[contains(@href, "get.pdf")]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href; | |
newArticle.attachments.push({url:pdfurl, title:"Alexander Street Press PDF", mimeType:"application/pdf"}); | |
} else if (doc.evaluate('//a[contains(@href, "get.jpg")]', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { | |
var imgurl = doc.evaluate('//a[contains(@href, "get.jpg")]', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href.replace(/.{2}$/, "01"); | |
newArticle.attachments.push({url:imgurl, title:"Alexander Street Press Pg 1", mimeType:"image/jpg"}); | |
newArticle.notes = [{note:"Further page images can be found by following the URL of the 'Alexander Street Press Pg 1' attachment and iterating the final digits of the URL"}]; | |
} | |
// save Zotero item | |
newArticle.complete(); | |
} | |
function GetItemType(zitemtype) { | |
switch (zitemtype.toLowerCase()) { | |
case "book": | |
return "book"; | |
break; | |
case "chapter": | |
return "bookSection"; | |
break; | |
case "journal": | |
return "journalArticle"; | |
break; | |
case "manuscript": | |
return "manuscript"; | |
break; | |
case "audio": | |
return "audioRecording"; | |
break; | |
case "video": | |
return "videoRecording"; | |
break; | |
case "issue": | |
return "journalArticle"; | |
break; | |
case "article": | |
return "journalArticle"; | |
break; | |
case "series": | |
return "interview"; | |
break; | |
case "session": | |
return "interview"; | |
break; | |
default: | |
return "document"; | |
} | |
} | |
function doWeb(doc, url) { | |
var articles = new Array(); | |
if (detectWeb(doc, url) == "multiple") { | |
var items = new Object(); | |
var xpath = '//tbody/tr/td[2][@class="data"]/a[1]'; | |
var titles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); | |
var next_title; | |
while (next_title = titles.iterateNext()) { | |
items[next_title.href] = next_title.textContent; | |
} | |
items = Zotero.selectItems(items); | |
for (var i in items) { | |
articles.push(i); | |
} | |
} else { | |
articles = [url]; | |
} | |
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); | |
} |