Permalink
Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.
Sign up
translators/National Diet Library Catalogue.js
Find file
Copy path
Fetching contributors…
Cannot retrieve contributors at this time
{ | |
"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 **/ |