Permalink
Join GitHub today
GitHub is home to over 31 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": "661fc39a-2500-4710-8285-2d67ddc00a69", | |
"label": "Artefacts Canada", | |
"creator": "Adam Crymble", | |
"target": "^https?://(www\\.)?pro\\.rcip-chin\\.gc\\.ca", | |
"minVersion": "1.0", | |
"maxVersion": "", | |
"priority": 100, | |
"inRepository": true, | |
"translatorType": 4, | |
"browserSupport": "gcsibv", | |
"lastUpdated": "2013-09-16 00:25:18" | |
} | |
function detectWeb(doc, url) { | |
var multi1 = ''; | |
var single1 = ''; | |
if (doc.evaluate('//div[@id="mainContent"]/table/tbody/tr/td[1]/h1', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { | |
multi1 = doc.evaluate('//div[@id="mainContent"]/table/tbody/tr/td[1]/h1', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; | |
} | |
var xpath = '//tbody/tr[1]/td[2]/span'; | |
if (doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { | |
single1 = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; | |
} | |
if (multi1.match("Search Results") || multi1.match("Résultats de recherche")) { | |
return "multiple"; | |
} else if (single1.match("Document") || single1.match("Enregistrement")) { | |
return "artwork"; | |
} | |
} | |
function associateData (newItem, dataTags, field, zoteroField) { | |
if (dataTags[field]) { | |
newItem[zoteroField] = dataTags[field]; | |
} | |
} | |
function scrape(doc, url) { | |
var dataTags = new Object(); | |
var tagsContent = new Array(); | |
var fieldTitle; | |
var newItem = new Zotero.Item("artwork"); | |
var headers = doc.evaluate('//td[1][@class="leftResTitle"]', doc, null, XPathResult.ANY_TYPE, null); | |
var contents = doc.evaluate('//td[2][@class="pageText"]', doc, null, XPathResult.ANY_TYPE, null); | |
while (fieldTitle = headers.iterateNext()) { | |
fieldTitle = fieldTitle.textContent.replace(/\s+/g, ''); | |
if (fieldTitle == "Titre:") { | |
fieldTitle = "Title:"; | |
} else if (fieldTitle == "Nomdel'objet:") { | |
fieldTitle = "NameofObject:"; | |
} else if (fieldTitle == "Sujetouimage:") { | |
fieldTitle = "Subject/Image:"; | |
} else if (fieldTitle == "Numérod'accession:") { | |
fieldTitle = "AccessionNumber:"; | |
} else if (fieldTitle == "Artisteouartisan:") { | |
fieldTitle = "Artist/Maker:"; | |
} else if (fieldTitle == "Fabricant:") { | |
fieldTitle = "Manufacturer:"; | |
} | |
dataTags[fieldTitle] = contents.iterateNext().textContent.replace(/^\s*|\s*$/g, '') | |
} | |
Zotero.debug(dataTags); | |
if (dataTags["Artist/Maker:"]) { | |
if (dataTags["Artist/Maker:"].match(", ")) { | |
var authors = dataTags["Artist/Maker:"].split(", "); | |
authors = authors[0] + ' ' + authors[1]; | |
newItem.creators.push(authors, "creator"); | |
} else { | |
newItem.creators.push(dataTags["Artist/Make:"], "creator"); | |
} | |
} | |
if (dataTags["Manufacturer:"]) { | |
newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["Manufacturer:"], "creator")); | |
} | |
if (dataTags["AccessionNumber:"]) { | |
newItem.locInArchive = "Accession Number: " + dataTags["AccessionNumber:"]; | |
} | |
if (dataTags["Subject/Image:"]) { | |
if (dataTags["Subject/Image:"].match(/\n/)) { | |
var subjects = dataTags["Subject/Image:"].split(/\n/); | |
for (var i = 0; i < subjects.length; i++) { | |
newItem.tags[i] = subjects[i]; | |
} | |
} else { | |
newItem.tags[0] = dataTags["Subject/Image:"].match(/\n/); | |
} | |
} | |
if (dataTags["Title:"]) { | |
associateData (newItem, dataTags, "Title:", "title"); | |
associateData (newItem, dataTags, "NameofObject:", "medium"); | |
} else if (dataTags["NameofObject:"]) { | |
associateData (newItem, dataTags, "NameofObject:", "title"); | |
} else { | |
newItem.title = "No Title Found"; | |
} | |
associateData (newItem, dataTags, "LatestProductionDate:", "date"); | |
associateData (newItem, dataTags, "Datedefindeproduction:", "date"); | |
associateData (newItem, dataTags, "Institution:", "repository"); | |
associateData (newItem, dataTags, "Établissement:", "repository"); | |
associateData (newItem, dataTags, "Description:", "description"); | |
associateData (newItem, dataTags, "Medium:", "medium"); | |
associateData (newItem, dataTags, "Médium:", "medium"); | |
newItem.url = doc.location.href; | |
newItem.complete(); | |
} | |
function doWeb(doc, url) { | |
var articles = new Array(); | |
if (detectWeb(doc, url) == "multiple") { | |
var items = new Object(); | |
var titles = doc.evaluate('//tr[1]/td[2][@class="pageText"]', doc, null, XPathResult.ANY_TYPE, null); | |
var links = doc.evaluate('//td/a[contains(@class, "moreInfoink")]', doc, null, XPathResult.ANY_TYPE, null); | |
var next_title; | |
while (next_title = titles.iterateNext()) { | |
items[links.iterateNext().href] = next_title.textContent; | |
} | |
Zotero.selectItems(items, function (items) { | |
if (!items) { | |
return true; | |
} | |
for (var i in items) { | |
articles.push(i); | |
} | |
Zotero.Utilities.processDocuments(articles, scrape, function (){}); | |
}); | |
} else { | |
scrape(doc, url) | |
} | |
} | |
/** BEGIN TEST CASES **/ | |
var testCases = [ | |
{ | |
"type": "web", | |
"url": "http://www.pro.rcip-chin.gc.ca/bd-dl/artefacts-eng.jsp?emu=en.artefacts:/Proxac/ws/human/user/www/ResultSet&w=NATIVE(%27(WAT%20ph%20is%20%27%27montreal%27%27%20or%20WHAIR%20ph%20is%20%27%27montreal%27%27%20or%20WHOO%20ph%20is%20%27%27montreal%27%27%20or%20WEN%20ph%20is%20%27%27montreal%27%27%20or%20HOUU%20ph%20is%20%27%27montreal%27%27)%27)&upp=0&currLang=English", | |
"items": "multiple" | |
}, | |
{ | |
"type": "web", | |
"url": "http://www.pro.rcip-chin.gc.ca/bd-dl/artefacts-eng.jsp?emu=en.artefacts:/Proxac/ws/human/user/www/Record;jsessionid=hb7jhiecd1&upp=0&m=13&w=NATIVE%28%27%28WAT%20ph%20is%20%27%27montreal%27%27%20or%20WHAIR%20ph%20is%20%27%27montreal%27%27%20or%20WHOO%20ph%20is%20%27%27montreal%27%27%20or%20WEN%20ph%20is%20%27%27montreal%27%27%20or%20HOUU%20ph%20is%20%27%27montreal%27%27%29%27%29", | |
"items": [ | |
{ | |
"itemType": "artwork", | |
"creators": [ | |
{ | |
"firstName": "", | |
"lastName": "Bourbon", | |
"creatorType": "creator" | |
} | |
], | |
"notes": [], | |
"tags": [], | |
"seeAlso": [], | |
"attachments": [], | |
"locInArchive": "Accession Number: 2005.385", | |
"title": "Canada 1976", | |
"medium": "porte-clefs", | |
"date": "1976", | |
"description": "Porte-clefs en métal doré décoré d'un médaillon en acrylique clair présentant le logo des Jeux olympiques de Montréal.", | |
"url": "http://www.pro.rcip-chin.gc.ca/bd-dl/artefacts-eng.jsp?emu=en.artefacts:/Proxac/ws/human/user/www/Record;jsessionid=hb7jhiecd1&upp=0&m=13&w=NATIVE%28%27%28WAT%20ph%20is%20%27%27montreal%27%27%20or%20WHAIR%20ph%20is%20%27%27montreal%27%27%20or%20WHOO%20ph%20is%20%27%27montreal%27%27%20or%20WEN%20ph%20is%20%27%27montreal%27%27%20or%20HOUU%20ph%20is%20%27%27montreal%27%27%29%27%29", | |
"libraryCatalog": "Centre d'histoire de Montréal", | |
"accessDate": "CURRENT_TIMESTAMP" | |
} | |
] | |
} | |
] | |
/** END TEST CASES **/ |