Last active
December 14, 2015 21:39
-
-
Save whiteleaf7/5152583 to your computer and use it in GitHub Desktop.
JBOOKで買おうとしている本がコミックダッシュに登録してあるかどうかチェック
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==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