zotero/translators/Library Catalog (BiblioComm...

250 lines
6.3 KiB
JavaScript

{
"translatorID": "5d506fe3-dbde-4424-90e8-d219c63faf72",
"label": "Library Catalog (BiblioCommons)",
"creator": "Avram Lyon and Abe Jellinek",
"target": "^https?://[^/]+\\.bibliocommons\\.com/",
"minVersion": "2.1",
"maxVersion": "",
"priority": 250,
"inRepository": true,
"translatorType": 4,
"browserSupport": "gcsibv",
"lastUpdated": "2021-05-19 21:14:05"
}
/*
***** BEGIN LICENSE BLOCK *****
BiblioCommons Translator
Copyright © 2021 Avram Lyon <ajlyon@gmail.com> and Abe Jellinek
This file is part of Zotero.
Zotero is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Zotero is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with Zotero. If not, see <http://www.gnu.org/licenses/>.
***** END LICENSE BLOCK *****
*/
function detectWeb(doc, url) {
if (url.match(/\/v2\/record\//)) {
return "book";
}
if (url.match(/\/v2\/search\?[^/]*query=/)) {
return "multiple";
}
return false;
}
function getSearchResults(doc, checkOnly) {
var items = {};
var found = false;
var rows = doc.querySelectorAll('h2.cp-title > a[href*="/item/show"]');
for (let row of rows) {
let href = row.href;
let title = ZU.trimInternal(text(row, '.title-content'));
if (!href || !title) continue;
if (checkOnly) return true;
found = true;
items[href] = title;
}
return found ? items : false;
}
function doWeb(doc, url) {
if (detectWeb(doc, url) == "multiple") {
Zotero.selectItems(getSearchResults(doc, false), function (items) {
if (items) ZU.processDocuments(Object.keys(items), scrape);
});
}
else {
scrape(doc, url);
}
}
function scrape(doc, url) {
let item = new Zotero.Item();
item.libraryCatalog = attr(doc, 'meta[property="og:site_name"]', 'content');
let recordUrl = url.endsWith('/originalrecord') ? url : url + '/originalrecord';
ZU.processDocuments(recordUrl, function (marcDoc) {
if (!marcDoc.querySelector('.bib-item-row')) {
// a small number of items don't have MARC data
// in that case, we just do our best
Z.debug("No MARC data");
item.itemType = 'book';
item.title = text(doc, '.cp-bib-title span[aria-hidden]');
let subtitle = text(doc, '.cp-bib-subtitle');
if (subtitle) {
item.title += ": " + subtitle;
}
let authors = doc.querySelectorAll('.main-info .cp-bib-authors span[aria-hidden]');
for (let author of authors) {
item.creators.push(ZU.cleanAuthor(author.innerText, "author", true));
}
let bibFields = doc.querySelectorAll('.cp-bib-field');
for (let bibField of bibFields) {
if (text(bibField, '.cp-bib-field-label').includes("Publication")) {
let value = text(bibField, '.main-content').split(', ');
item.publisher = value[0];
item.date = value[1];
}
}
let isbnMatches = text(doc, 'script[data-iso-key="_0"]')
.match(/"values":\["([0-9]{10}|[0-9]{13})"\]/);
let isbn = isbnMatches && isbnMatches[1];
if (isbn) {
item.ISBN = ZU.cleanISBN(isbn);
}
item.complete();
return;
}
// Load MARC
let translator = Z.loadTranslator("import");
translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973");
translator.getTranslatorObject(function (marc) {
let record = new marc.record();
for (let row of marcDoc.querySelectorAll('.bib-item-row')) {
record.addField(text(row, '.tag'), text(row, '.indicator'), row.lastChild.innerText.replace(/\$/g, '\x1F'));
}
record.translate(item);
item.complete();
});
});
}
/** BEGIN TEST CASES **/
var testCases = [
{
"type": "web",
"url": "https://bostonpl.bibliocommons.com/v2/record/S75C2051015",
"items": [
{
"itemType": "book",
"title": "Labor",
"creators": [
{
"firstName": "Marcia McKenna",
"lastName": "Biddle",
"creatorType": "author"
}
],
"date": "1979",
"ISBN": "9780875181677",
"abstractNote": "Brief biographies of five women prominently involved in the labor movement in the United States: Mother Jones, Mary Heaton Vorse, Frances Perkins, Addie Wyatt, and Dolores Huerta. Also includes 11 other women who have made outstanding contributions",
"callNumber": "HD6079.2.U5 B52",
"libraryCatalog": "Boston Public Library",
"numPages": "126",
"place": "Minneapolis",
"publisher": "Dillon Press",
"series": "Contributions of women",
"attachments": [],
"tags": [
{
"tag": "Biography Juvenile literature"
},
{
"tag": "Biography Juvenile literature"
},
{
"tag": "Juvenile biography"
},
{
"tag": "Juvenile literature"
},
{
"tag": "United States"
},
{
"tag": "United States"
},
{
"tag": "Women"
},
{
"tag": "Women labor union members"
},
{
"tag": "Women labor union members"
},
{
"tag": "Working class"
}
],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "web",
"url": "https://bostonpl.bibliocommons.com/v2/search?query=labor&searchType=smart",
"items": "multiple"
},
{
"type": "web",
"url": "https://markham.bibliocommons.com/v2/record/S34C297846",
"items": [
{
"itemType": "book",
"title": "The raven",
"creators": [
{
"firstName": "Edgar Allan",
"lastName": "Poe",
"creatorType": "author"
},
{
"firstName": "Ryan",
"lastName": "Price",
"creatorType": "author"
}
],
"date": "2006",
"ISBN": "9781553374732",
"abstractNote": "An illustrated version of Edgar Allan Poe's poem",
"callNumber": "J 811.3 Poe 9254tc",
"libraryCatalog": "Markham Public Library",
"numPages": "1",
"place": "Toronto",
"publisher": "Kids Can Press",
"series": "Visions in poetry",
"attachments": [],
"tags": [
{
"tag": "Fantasy poetry, American"
},
{
"tag": "Poetry"
},
{
"tag": "Ravens"
}
],
"notes": [
{
"note": "\"KCP Poetry.\""
}
],
"seeAlso": []
}
]
}
]
/** END TEST CASES **/