192 lines
6.5 KiB
JavaScript
192 lines
6.5 KiB
JavaScript
|
{
|
||
|
"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 **/
|