zotero/translators/Heise.js

201 lines
4.9 KiB
JavaScript

{
"translatorID": "54c3bec7-c1bc-4ffa-b103-53759845b6c4",
"label": "Heise",
"creator": "optiprime, ApoB-100",
"target": "^https?://www\\.heise\\.de/(suche|select)/",
"minVersion": "3.0",
"maxVersion": "",
"priority": 100,
"inRepository": true,
"translatorType": 4,
"browserSupport": "gcsv",
"lastUpdated": "2021-05-27 00:40:31"
}
/*
***** BEGIN LICENSE BLOCK *****
Heise Translator
Copyright © 2021 optiprime, ApoB-100
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 *****
*/
const magazines = {
"c't": { ISSN: '0724-8679' },
iX: { ISSN: '0935-9680' },
"Technology Review": { ISSN: '1613-0138' },
"Make Magazin": { ISSN: '2364-2548' },
"Mac & i": { ISSN: '2193-8938' },
"c't Fotografie": { ISSN: '2196-3878' },
"Heise Magazine": { ISSN: '2196-3878' }
};
function detectWeb(doc, url) {
if (url.includes('/select')) {
return 'magazineArticle';
}
else if (url.includes('/suche')) {
if (getSearchResults(doc, true)) {
return 'multiple';
}
}
return false;
}
function doWeb(doc, url) {
if (detectWeb(doc, url) == 'multiple') {
Zotero.selectItems(getSearchResults(doc, false), function (selected) {
if (selected) {
ZU.processDocuments(Object.keys(selected), scrape);
}
});
}
else {
scrape(doc);
}
}
function getSearchResults(doc, checkOnly) {
let items = {};
let articles = ZU.xpath(doc, '//article[contains(@class, "search-result__teaser")]');
for (let i = 0; i < articles.length; ++i) {
let link = ZU.xpath(articles[i], './/a[contains(@class, "a-article-teaser__link")]')[0];
let title = ZU.xpath(articles[i], './/h1[contains(@class, "a-article-teaser__title")]')[0];
if (!link || !title) {
continue;
}
let href = link.href;
let text = ZU.trimInternal(title.textContent);
if (!href || !text) {
continue;
}
if (checkOnly) {
return true;
}
items[href] = text;
}
return (Object.keys(items).length != 0) ? items : false;
}
function scrape(doc) {
let elements = ZU.xpath(doc, '//script[@type="application/ld+json"]');
if (Array.isArray(elements)) {
let data = JSON.parse(elements[0].textContent)[0];
let item = new Zotero.Item('magazineArticle');
item.publisher = data.publisher.name;
item.publicationTitle = data.isPartOf.isPartOf.isPartOf.name;
item.ISSN = magazines[item.publicationTitle].ISSN;
item.volume = data.isPartOf.isPartOf.volumeNumber;
item.issue = data.isPartOf.issueNumber;
item.title = data.headline;
if (item.title) {
if (data.alternativeHeadline) {
item.title += ': ' + data.alternativeHeadline;
}
}
else {
item.title = data.alternativeHeadline;
if (!item.title) {
item.title = '[Untitled]';
}
}
item.shortTitle = data.headline;
item.attachments = [{
url: data.mainEntityOfPage,
title: 'Snapshot',
mimeType: 'text/html',
snapshot: true
}];
item.creators = [];
if (data.author.name) {
item.creators.push(ZU.cleanAuthor(data.author.name, 'author'));
}
item.abstractNote = data.description;
if (data.pageStart) {
item.pages = data.pageStart;
if (data.pageEnd) {
item.pages += '-' + data.pageEnd;
}
}
if (data.datePublished) {
item.date = data.datePublished.split('T')[0];
}
item.language = data.inLanguage;
if (data.keywords) {
item.tags = data.keywords.split(',');
}
item.url = data.mainEntityOfPage;
item.complete();
}
}
/** BEGIN TEST CASES **/
var testCases = [
{
"type": "web",
"url": "https://www.heise.de/suche/?q=raspberry&sort_by=date&make=ct&provider=magazine",
"items": "multiple"
},
{
"type": "web",
"url": "https://www.heise.de/select/ct/2021/7/2031014484690149069",
"items": [
{
"itemType": "magazineArticle",
"title": "Impressum",
"creators": [
{
"firstName": "",
"lastName": "c't",
"creatorType": "author"
}
],
"date": "2021-03-12",
"ISSN": "0724-8679",
"issue": 7,
"language": "de",
"libraryCatalog": "Heise",
"pages": 193,
"publicationTitle": "c't",
"url": "https://www.heise.de/select/ct/2021/7/2031014484690149069",
"volume": 2021,
"attachments": [
{
"title": "Snapshot",
"mimeType": "text/html",
"snapshot": true
}
],
"tags": [
{
"tag": "Impressum"
}
],
"notes": [],
"seeAlso": []
}
]
}
]
/** END TEST CASES **/