333 lines
8.9 KiB
JavaScript
333 lines
8.9 KiB
JavaScript
|
{
|
||
|
"translatorID": "5978580d-c58c-46c8-9755-9481a3e20f3f",
|
||
|
"label": "National Diet Library Catalogue",
|
||
|
"creator": "Philipp Zumstein",
|
||
|
"target": "^https?://iss\\.ndl\\.go\\.jp/",
|
||
|
"minVersion": "3.0",
|
||
|
"maxVersion": "",
|
||
|
"priority": 100,
|
||
|
"inRepository": true,
|
||
|
"translatorType": 4,
|
||
|
"browserSupport": "gcsibv",
|
||
|
"lastUpdated": "2015-08-15 16:07:22"
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
***** BEGIN LICENSE BLOCK *****
|
||
|
|
||
|
Copyright © 2015 Philipp Zumstein
|
||
|
|
||
|
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.indexOf('/books/')>-1) {
|
||
|
var type = ZU.xpathText(doc, '//div[@id="thumbnail"]');
|
||
|
return getItemType(type);
|
||
|
} else if (url.indexOf('books?')>-1 && getSearchResults(doc, true)) {
|
||
|
return "multiple";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function getItemType(type) {
|
||
|
//http://www.ndl.go.jp/jp/aboutus/standards/meta/2011/12/ndl-type.rdf
|
||
|
if (type) {
|
||
|
switch (type.trim()) {
|
||
|
case "録音図書": //Audio Book
|
||
|
case "録音図書(CD・DVD)": //Audio Book In Sound Disc
|
||
|
case "録音図書(カセットテープ)": //Audio Book In Sound Tape
|
||
|
case "カセットテープ": //Cassette Tape
|
||
|
case "CD": //CD
|
||
|
case "視覚障害者向け資料": //Materials For Visually Handicapped People
|
||
|
case "音楽": //Music
|
||
|
case "レコード": //Record
|
||
|
case "音声再生用ディスク": //Sound Disc
|
||
|
case "音声再生用テープ": //Sound Tape
|
||
|
return "audioRecording";
|
||
|
break;
|
||
|
case "雑誌記事": //Article
|
||
|
case "記事・論文":
|
||
|
return "journalArticle";
|
||
|
break;
|
||
|
case "人工物": //Artifact
|
||
|
case "博物資料": //Museum Material
|
||
|
case "自然物": //Naturally Occurring Object
|
||
|
case "絵画": //Painting
|
||
|
case "写真": //Photograph
|
||
|
case "絵葉書": //Picture Postcard
|
||
|
case "ポスター": //Poster
|
||
|
return "artwork";
|
||
|
break;
|
||
|
case "CD-ROM": //CD-ROM
|
||
|
case "コンピュータディスク": //Computer Disc
|
||
|
case "コンピュータ・プログラム": //Computer Program
|
||
|
case "フォント": //Font
|
||
|
case "ゲーム": //Game
|
||
|
case "磁気ディスク": //Magnetic Disk
|
||
|
return "computerProgram";
|
||
|
break;
|
||
|
case "文書データ": //Document
|
||
|
case "手稿および書写資料": //Manuscript
|
||
|
return "manuscript";
|
||
|
break;
|
||
|
case "地図": //Map
|
||
|
return "map";
|
||
|
break;
|
||
|
case "スライド": //Slide
|
||
|
return "presentation";
|
||
|
break;
|
||
|
case "書誌データ": //Bibliographic Data
|
||
|
case "カード式資料": //Card Form
|
||
|
case "政府刊行物": //Government Publication
|
||
|
case "地方公共団体刊行物": //Local Publication
|
||
|
case "官公庁刊行物": //National Publication
|
||
|
case "国立国会図書館刊行物": //NDL Publication
|
||
|
case "数値データ": //Numeric Data
|
||
|
case "テクニカルリポート": //Technical Report
|
||
|
return "report";
|
||
|
break;
|
||
|
case "立法情報": //Legislative Information
|
||
|
case "レーザーディスク" : //LD
|
||
|
return "statute";
|
||
|
break;
|
||
|
case "博士論文": //Doctoral Dissertation
|
||
|
return "thesis";
|
||
|
break;
|
||
|
case "ブルーレイディスク": //Blu-ray Disc
|
||
|
case "DVD": //DVD
|
||
|
case "ビデオカセット": //Video Cassette
|
||
|
case "ビデオディスク": //Video Disc
|
||
|
return "videoRecording";
|
||
|
break;
|
||
|
case "パッケージ系電子資料": //Electronic Resource
|
||
|
case "オンライン資料": //Online Resource
|
||
|
case "オンラインジャーナル": //Online Journal
|
||
|
return "webpage";
|
||
|
break;
|
||
|
default:
|
||
|
return "book";
|
||
|
}
|
||
|
} else {
|
||
|
return "book";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function getSearchResults(doc, checkOnly) {
|
||
|
var items = {};
|
||
|
var found = false;
|
||
|
var rows = ZU.xpath(doc, '//li[contains(@class, "item_result")]//h3/a');
|
||
|
for (var i=0; i<rows.length; i++) {
|
||
|
var href = rows[i].href;
|
||
|
var title = ZU.trimInternal(rows[i].textContent);
|
||
|
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) {
|
||
|
return true;
|
||
|
}
|
||
|
var articles = new Array();
|
||
|
for (var i in items) {
|
||
|
articles.push(i);
|
||
|
}
|
||
|
ZU.processDocuments(articles, scrape);
|
||
|
});
|
||
|
} else {
|
||
|
scrape(doc, url);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function scrape(doc, url) {
|
||
|
// e.g. url = http://iss.ndl.go.jp/books/R100000039-I001424605-00?locale=en&ar=4e1f
|
||
|
// urlJSON = http://iss.ndl.go.jp/books/R100000039-I001424605-00.json
|
||
|
var m = url.match(/\/books\/([A-Z\d\-]+)/);
|
||
|
var urlJSON = m[0] + ".json";
|
||
|
ZU.doGet(urlJSON, function(text) {
|
||
|
var json = JSON.parse(text);
|
||
|
//Z.debug(json);
|
||
|
var type = getItemType( json.materialType[0] );
|
||
|
var newItem = new Zotero.Item(type);
|
||
|
newItem.title = json.title[0].value;
|
||
|
|
||
|
if (json.issued) {
|
||
|
newItem.date = json.issued[0];
|
||
|
}
|
||
|
if (json.publisher) {
|
||
|
newItem.publisher = json.publisher[0].name;
|
||
|
newItem.place = json.publisher[0].location;
|
||
|
}
|
||
|
if (json.extent && /\d+/.test( json.extent[0] )) {
|
||
|
newItem.numPages = json.extent[0].match(/\d+/)[0];
|
||
|
}
|
||
|
|
||
|
if (json.publicationName) {
|
||
|
newItem.publicationTitle = json.publicationName.value;
|
||
|
newItem.volume = json.publicationName.number;
|
||
|
newItem.pages = json.publicationName.pageRange;
|
||
|
}
|
||
|
|
||
|
//language is not in the json output
|
||
|
var lang = ZU.xpathText(doc, '//tr[ th[contains(text(), "ISO639-2")] ]/td');
|
||
|
if (lang) {
|
||
|
newItem.language = lang.replace(/[^a-z]/g, "");
|
||
|
}
|
||
|
|
||
|
if (json.identifier && json.identifier.DOI) {
|
||
|
newItem.DOI = json.identifier.DOI;
|
||
|
}
|
||
|
|
||
|
var creatorList = json.creator || json.dc_creator;
|
||
|
if (creatorList) {
|
||
|
for (var i=0; i<creatorList.length; i++) {
|
||
|
var name = creatorList[i].name.replace(/,\s*\d{4}-\d{4}\s*$/, "");
|
||
|
newItem.creators.push( ZU.cleanAuthor(name, "author") );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (json.subject && json.subject.value) {
|
||
|
var tagList = json.subject.value;
|
||
|
for (var i=0; i<tagList.length; i++) {
|
||
|
newItem.tags.push( tagList[i] );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
newItem.attachments.push({
|
||
|
title: "NDL Catalogue",
|
||
|
url: json.link,
|
||
|
mimeType: "text/html",
|
||
|
snapshot: false
|
||
|
});
|
||
|
|
||
|
newItem.complete();
|
||
|
});
|
||
|
}
|
||
|
|
||
|
/** BEGIN TEST CASES **/
|
||
|
var testCases = [
|
||
|
{
|
||
|
"type": "web",
|
||
|
"url": "http://iss.ndl.go.jp/books/R000000004-I023161505-00",
|
||
|
"items": [
|
||
|
{
|
||
|
"itemType": "journalArticle",
|
||
|
"title": "21年度社会保障給付費 過去最高の99.9兆円 : 国民所得割合は29.4%に上昇",
|
||
|
"creators": [],
|
||
|
"date": "2011-11-00",
|
||
|
"language": "jpn",
|
||
|
"libraryCatalog": "National Diet Library Catalogue",
|
||
|
"pages": "25-27",
|
||
|
"publicationTitle": "健保ニュース",
|
||
|
"shortTitle": "21年度社会保障給付費 過去最高の99.9兆円",
|
||
|
"volume": "1950",
|
||
|
"attachments": [
|
||
|
{
|
||
|
"title": "NDL Catalogue",
|
||
|
"mimeType": "text/html",
|
||
|
"snapshot": false
|
||
|
}
|
||
|
],
|
||
|
"tags": [],
|
||
|
"notes": [],
|
||
|
"seeAlso": []
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"type": "web",
|
||
|
"url": "http://iss.ndl.go.jp/books/R100000039-I001424605-00?locale=en&ar=4e1f",
|
||
|
"items": [
|
||
|
{
|
||
|
"itemType": "book",
|
||
|
"title": "栄養之合理化",
|
||
|
"creators": [
|
||
|
{
|
||
|
"firstName": "佐伯",
|
||
|
"lastName": "矩",
|
||
|
"creatorType": "author"
|
||
|
},
|
||
|
{
|
||
|
"firstName": "佐伯矩",
|
||
|
"lastName": "[述",
|
||
|
"creatorType": "author"
|
||
|
}
|
||
|
],
|
||
|
"date": "1930",
|
||
|
"language": "jpn",
|
||
|
"libraryCatalog": "National Diet Library Catalogue",
|
||
|
"numPages": "26",
|
||
|
"place": "名古屋",
|
||
|
"publisher": "愛知標準精米普及期成会",
|
||
|
"attachments": [
|
||
|
{
|
||
|
"title": "NDL Catalogue",
|
||
|
"mimeType": "text/html",
|
||
|
"snapshot": false
|
||
|
}
|
||
|
],
|
||
|
"tags": [],
|
||
|
"notes": [],
|
||
|
"seeAlso": []
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"type": "web",
|
||
|
"url": "http://iss.ndl.go.jp/books/R100000002-I000006426972-00",
|
||
|
"items": [
|
||
|
{
|
||
|
"itemType": "book",
|
||
|
"title": "Die Bildungsfrage als sociales Problem. Von Prof. Dr. Mannheimer ..",
|
||
|
"creators": [
|
||
|
{
|
||
|
"firstName": "Mannheimer",
|
||
|
"lastName": "Adolf",
|
||
|
"creatorType": "author"
|
||
|
}
|
||
|
],
|
||
|
"date": "1901",
|
||
|
"language": "ger",
|
||
|
"libraryCatalog": "National Diet Library Catalogue",
|
||
|
"numPages": "156",
|
||
|
"place": "Jena",
|
||
|
"publisher": "G. Fischer",
|
||
|
"attachments": [
|
||
|
{
|
||
|
"title": "NDL Catalogue",
|
||
|
"mimeType": "text/html",
|
||
|
"snapshot": false
|
||
|
}
|
||
|
],
|
||
|
"tags": [
|
||
|
"Education",
|
||
|
"University extension"
|
||
|
],
|
||
|
"notes": [],
|
||
|
"seeAlso": []
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
/** END TEST CASES **/
|