Skip to content

Instantly share code, notes, and snippets.

@whiteleaf7
Last active December 14, 2015 21:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save whiteleaf7/5152583 to your computer and use it in GitHub Desktop.
Save whiteleaf7/5152583 to your computer and use it in GitHub Desktop.
JBOOKで買おうとしている本がコミックダッシュに登録してあるかどうかチェック
// ==UserScript==
// @name jbook_exists_checker
// @namespace jbook_exists_checker
// @description JBOOK ですでに所蔵している本かどうかチェック
// @include http://www.jbook.co.jp/p/p.aspx*
// @version 1
// @grant GM_xmlhttpRequest
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==
(function () {
var csv_url = "http://ckworks.jp/usr/USERNAME/comicdash/owncomic.csv";
var csv_refresh_interval = 60 * 60 * 1000; // csvデータの生存時間
/*
* コミックダッシュのCSVデータからASINだけの文字列作る
*/
function create_asin_list_by_csv(csv) {
var data = csv.split("\n");
var result = "";
for (var i in data) {
result += data[i].split(",")[0] + "\t"
}
return result;
}
/*
* 所持状況をページに表示する
*/
function display_book_status(book_owner) {
if (!book_owner) return;
var kago = document.getElementsByClassName("kago")[0];
kago.style.backgroundColor = "#ccc";
kago.style.borderColor = "black";
var warn_element = document.createElement("span");
warn_element.appendChild(document.createTextNode("所有書籍です"));
warn_element.style.margin = "0 5px 0 5px";
warn_element.style.padding = "2px 3px 2px 3px"
warn_element.style.backgroundColor = "yellow";
kago.parentNode.insertBefore(warn_element, kago.nextSibling);
}
/*
* コミックダッシュからCSVデータを取得
*/
function get_comickdash_csv(url, callback) {
GM_xmlhttpRequest({
method: "GET",
url: url,
onload: function(res) {
callback(create_asin_list_by_csv(res.responseText));
},
});
}
/*
* 今見てるJBOOKの書籍ページからASIN取得
*/
function get_asin_by_watch_page() {
var prodisbn = document.getElementsByClassName("prodisbn")[0].innerHTML;
if (prodisbn.match(/<span class="prodisbn">((.+?))<\/span>/)) {
asin = RegExp.$1;
return asin;
}
return null;
}
/*
* ASINリストをGreasemonkeyに保存する
*/
function save_asin_list(asin_list) {
GM_setValue("comicdash_asin_list_save_time", (new Date).getTime().toString());
GM_setValue("comicdash_asin_list", asin_list);
}
/*
* ASINのリストの鮮度判定
*/
function check_freshness_of_asin_list() {
var fresh = false;
var save_time = GM_getValue("comicdash_asin_list_save_time");
if (save_time) {
var now = (new Date).getTime();
if (now - parseInt(save_time) <= csv_refresh_interval) {
fresh = true;
}
}
return fresh;
}
/*
* 保存しているASINのリストを取得
*/
function get_asin_list(callback) {
var refresh = true;
var asin_list = GM_getValue("comicdash_asin_list");
if (asin_list) {
refresh = !check_freshness_of_asin_list();
}
if (refresh) {
get_comickdash_csv(csv_url, function(list) {
save_asin_list(list);
callback(list);
});
}
else {
callback(asin_list);
}
}
/*
* メイン処理
*/
function main() {
var asin = get_asin_by_watch_page();
if (!asin) return;
get_asin_list(function(asin_list) {
var book_owner = false
if (asin_list.indexOf(asin) != -1) {
book_owner = true
}
display_book_status(book_owner);
});
}
main();
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment