zotero/translators/E-periodica Switzerland.js

348 lines
9.2 KiB
JavaScript
Raw Normal View History

2024-08-27 21:48:20 -05:00
{
"translatorID": "dbfd99e3-6925-4b71-92b8-12b02aa875fc",
"label": "E-periodica Switzerland",
"creator": "Alain Borel",
"target": "^https?://(www|news?)\\.e-periodica\\.ch",
"minVersion": "5.0",
"maxVersion": "",
"priority": 100,
"inRepository": true,
"translatorType": 4,
"browserSupport": "gcsibv",
"lastUpdated": "2023-08-15 20:15:50"
}
/*
***** BEGIN LICENSE BLOCK *****
Copyright © 2023 Alain Borel
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.includes('/digbib/view')) {
return "journalArticle";
}
else if (getSearchResults(doc, true)) {
return "multiple";
}
else {
return false;
}
}
function getSearchResults(doc, checkOnly) {
var items = {};
// Zotero.debug(items);
var found = false;
var rows = doc.querySelectorAll('h2.ep-result__title > a');
for (let row of rows) {
//Zotero.debug(row.textContent);
let href = row.href;
//Zotero.debug(href);
let title = ZU.trimInternal(row.textContent);
if (!href || !title) continue;
if (checkOnly) return true;
found = true;
items[href] = title;
// Zotero.debug(items[href]);
}
return found ? items : false;
}
async function doWeb(doc, url) {
if (detectWeb(doc, url) == 'multiple') {
let items = await Zotero.selectItems(getSearchResults(doc, false));
if (!items) return;
for (let resultUrl of Object.keys(items)) {
await scrape(resultUrl);
}
}
else {
// The journalArticle type will be applicable in general unless we find multiple refs.
await scrape(url);
}
}
async function scrape(url) {
// In general the article ID is given the pid parameter in the URL
// If the URL ends with a hash/fragment identifier,
// the final digits of the pid parameter (after a double colon) must be replaced with the hash ID
// e.g. alp-001:1907:2::332#375 => alp-001:1907:2::375
let articleURL = new URL(url);
let articleID = articleURL.searchParams.get("pid");
let articleViewFragment = articleURL.hash.replace(/^#/, ""); // trim leading #
if (/\d+/.test(articleViewFragment)) {
// Normalize article ID by replacing the last segment with the real
// page id if any
articleID = articleID.replace(/::\d+$/, "::" + articleViewFragment);
}
let pageinfoUrl = "https://www.e-periodica.ch/digbib/ajax/pageinfo?pid=" + encodeURIComponent(articleID);
//Zotero.debug('JSON URL ' + pageinfoUrl);
let epJSON = await requestJSON(pageinfoUrl);
//Zotero.debug(epJSON);
let risURL;
if (epJSON.articles.length == 0) {
// Fallback for non-article content, listed as Werbung, Sonstiges and various others:
// this information is unfortunately not included in the JSON metadata => let's add a reasonable pseudo-title
epJSON.articles = [{ title: "Untitled" }];
}
if (epJSON.articles["0"].hasRisLink) {
risURL = '/view/' + epJSON.articles["0"].risLink;
}
// Zotero.debug(risURL);
var pdfURL = null;
if (epJSON.articles["0"].hasPdfLink) {
pdfURL = epJSON.articles["0"].pdfLink;
}
// Zotero.debug(pdfURL);
if (risURL) {
let risText = await requestText(risURL);
processRIS(risText, pdfURL);
}
else {
var item = new Zotero.Item("journalArticle");
item.title = epJSON.articles["0"].title.replace(' : ', ': ');
item.publicationTitle = epJSON.journalTitle.replace(' : ', ': ');
var numyear = epJSON.volumeNumYear.split(/[ ()]/).filter(element => element);
if (numyear.length > 1) {
item.date = numyear.slice(-1);
}
if (numyear.length > 0) {
item.volume = numyear[0];
}
if (epJSON.issueNumber) {
item.issue = epJSON.issueNumber;
}
if (epJSON.viewerLink.length > 0) {
if (epJSON.viewerLink.indexOf("http") == 0) {
item.url = epJSON.viewerLink;
}
else {
item.url = "https://www.e-periodica.ch" + epJSON.viewerLink;
}
}
if (epJSON.pdfLink) {
if (epJSON.pdfLink.indexOf("http") == 0) {
pdfURL = epJSON.pdfLink;
}
else {
pdfURL = "https://www.e-periodica.ch" + epJSON.pdfLink;
}
}
if (pdfURL) {
item.attachments.push({
url: pdfURL,
title: "Full Text PDF",
type: "application/pdf"
});
}
item.complete();
}
}
function processRIS(risText, pdfURL) {
// load translator for RIS
var translator = Zotero.loadTranslator("import");
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
// Z.debug(text);
translator.setString(risText);
translator.setHandler("itemDone", function (obj, item) {
// Don't save HTML snapshot from 'UR' tag
item.attachments = [];
// change colon spacing in title and publicationTitle
item.title = item.title.replace(' : ', ': ');
if (item.publicationTitle) {
item.publicationTitle = item.publicationTitle.replace(' : ', ': ');
}
if (item.title == item.title.toUpperCase()) {
item.title = ZU.capitalizeTitle(item.title.toLowerCase(), true);
}
// Retrieve fulltext
if (pdfURL !== null) {
item.attachments.push({
url: pdfURL,
title: "Full Text PDF",
type: "application/pdf"
});
}
// DB in RIS maps to archive; we don't want that
delete item.archive;
item.complete();
});
translator.getTranslatorObject(function (trans) {
trans.doImport();
});
}/** BEGIN TEST CASES **/
var testCases = [
{
"type": "web",
"url": "https://www.e-periodica.ch/digbib/view?pid=enh-006%3A2018%3A11::121#133",
"detectedItemType": "journalArticle",
"items": [
{
"itemType": "journalArticle",
"title": "Untersuchungen zur aktuellen Verbreitung der schweizerischen Laufkäfer (Coleoptera: Carabidae): Zwischenbilanz",
"creators": [
{
"lastName": "Hoess",
"firstName": "René",
"creatorType": "author"
},
{
"lastName": "Chittaro",
"firstName": "Yannick",
"creatorType": "author"
},
{
"lastName": "Walter",
"firstName": "Thomas",
"creatorType": "author"
}
],
"date": "2018",
"DOI": "10.5169/seals-986030",
"ISSN": "1662-8500",
"libraryCatalog": "E-periodica Switzerland",
"pages": "129",
"publicationTitle": "Entomo Helvetica: entomologische Zeitschrift der Schweiz",
"shortTitle": "Untersuchungen zur aktuellen Verbreitung der schweizerischen Laufkäfer (Coleoptera",
"volume": "11",
"attachments": [
{
"title": "Full Text PDF",
"type": "application/pdf"
}
],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "web",
"url": "https://www.e-periodica.ch/digbib/view?pid=bts-004%3A2011%3A137%3A%3A254&referrer=search#251",
"detectedItemType": "journalArticle",
"items": [
{
"itemType": "journalArticle",
"title": "Décentralisation, opportunités et contraintes",
"creators": [
{
"lastName": "Fignolé",
"firstName": "Jean-Claude",
"creatorType": "author"
}
],
"date": "2011",
"DOI": "10.5169/seals-144646",
"ISSN": "0251-0979",
"issue": "05-06",
"libraryCatalog": "E-periodica Switzerland",
"pages": "14",
"publicationTitle": "Tracés: bulletin technique de la Suisse romande",
"volume": "137",
"attachments": [
{
"title": "Full Text PDF",
"type": "application/pdf"
}
],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "web",
"url": "https://www.e-periodica.ch/digbib/view?pid=alp-001%3A1907%3A2%3A%3A332#375",
"detectedItemType": "journalArticle",
"items": [
{
"itemType": "journalArticle",
"title": "Stimmen und Meinungen: schweizerisches Nationaldrama?",
"creators": [
{
"lastName": "Falke",
"firstName": "Konrad",
"creatorType": "author"
}
],
"date": "1907-1908",
"DOI": "10.5169/seals-747870",
"issue": "12",
"libraryCatalog": "E-periodica Switzerland",
"pages": "364",
"publicationTitle": "Berner Rundschau: Halbmonatsschrift für Dichtung, Theater, Musik und bildende Kunst in der Schweiz",
"shortTitle": "Stimmen und Meinungen",
"volume": "2",
"attachments": [
{
"title": "Full Text PDF",
"type": "application/pdf"
}
],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "web",
"url": "https://www.e-periodica.ch/digbib/view?pid=bts-004%3A2011%3A137%3A%3A262#262",
"detectedItemType": "journalArticle",
"items": [
{
"itemType": "journalArticle",
"title": "Untitled",
"creators": [],
"date": "2011",
"issue": "05-06",
"libraryCatalog": "E-periodica Switzerland",
"publicationTitle": "Tracés: bulletin technique de la Suisse romande",
"url": "https://www.e-periodica.ch/digbib/view?pid=bts-004%3A2011%3A137%3A%3A262",
"volume": "137",
"attachments": [
{
"title": "Full Text PDF",
"type": "application/pdf"
}
],
"tags": [],
"notes": [],
"seeAlso": []
}
]
}
]
/** END TEST CASES **/