メロンブックスから書誌情報を取得するUserScript
メロンブックスから書誌情報を取得するUserScript
とらのあなから書誌情報を取得するUserScriptのMelonbooks版
電子書籍は未対応
code:melonbook.user.js
// ==UserScript==
// @name DISC_melonbooks
// @namespace https://scrapbox.io/motoso
// @version 0.1
// @description Get a bibliography from Melonbooks
// @author Motoso Inami
// @require https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.18.2/babel.js
// @require https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.16.0/polyfill.js
// @match https://www.melonbooks.co.jp/detail/detail.php*
// ==/UserScript==
var inline_src = (<><![CDATA[
var results = [];
const title = document.getElementById('title').querySelector('.str').innerText;
const circleName = document.getElementById('title').querySelector('.circle').innerText;
const table = document.getElementById('description').querySelector('.stripe');
// optionals
// Get elements from table if string of left side is equal to "match"
const getElemIfExists = (leftHeaderStr) => {
const filtered = ...table.rows.filter((row) => row.cells0.innerText === leftHeaderStr)
if(filtered.length > 0){
return filtered0.cells1.innerText;
}else {
return null;
}
};
const author = getElemIfExists("作家名").replace(/\nお気に入り作家に登録する/i,'');
// foo, bar => foo bar
const genre = getElemIfExists("ジャンル").split(',').map((item) => [${item.trim()}]).join(' ');
const event = getElemIfExists("イベント");
const publishedAt = new Date(getElemIfExists("発行日"));
const year = publishedAt.getFullYear();
const month = publishedAt.getMonth() + 1;
const day = publishedAt.getDate();
results.push(title);
results.push([[作家名]]:[${author}]);
results.push([[サークル名]]:[${circleName}]);
results.push([[原作]]:${genre});
results.push([[概要]]:);
results.push([[イベント]]:[${event}]);
results.push([[発行年]]:[${year}]/${month}/${day});
results.push([[印刷所]]:);
// テキストエリアを設置して描画
let textarea = document.createElement('textarea'); textarea.id = 'textarea'; textarea.rows = 11;
let header = document.getElementById('header'); header.appendChild(textarea);
let t = document.getElementById('textarea'); t.value = results.join('\n');
]]></>).toString();
var c = Babel.transform(inline_src, { presets: "es2015", "es2016" });
eval(c.code);
更新履歴
2020/3/15
複数ジャンルに対応
作家名に「お気に入りの作家に登録する」が入ってくるのを除去