ツタヤ在庫一括表示
by
hotokediary
2018-11-29 [2018/11/29 12:40:03]
TSUTAYAの店頭在庫検索結果でこれを使うと表示されてる店舗の在庫を一括で取得し結果を表示します 連続取得は巡回速度1/(1+res)[page/s]にしてあるので取得に1秒かかる場合は20件40秒かかります 詳しい使い方の説明は https://1mu.info/texts/tsutayalet/
@@ -7,49 +7,71 @@
*/
var wait = 500;
-var url;
-if (url = location.href.match(/^http:\/\/as\.chizumaru\.com(\/tsutaya\/articleList\?.*)$/)) {
- document.body.innerHTML = "<P>3秒後移動します。移動先でもう一度実行してください";
+
+if (!location.href.indexOf('http://as.chizumaru.com/tsutaya/articleList?')) {
+
+ document.body.innerHTML = '<P>3秒後移動します。移動先でもう一度実行してください';
setTimeout(function() {
- location.href = "http://store-tsutaya.tsite.jp" + url[1];
+ location.href = 'http://store-tsutaya.tsite.jp' + location.href.substr(23);
}, 3000);
+
} else if (!/^http:\/\/(?:store-tsutaya\.tsite\.jp|store\.tsutaya\.co\.jp)\/tsutaya\/articleList\?/.test(location.href)) {
- if (confirm("TSUTAYAのページに移動しますか"))
- location.href = "http://store.tsutaya.co.jp/";
+ if (confirm('TSUTAYAのページに移動しますか'))
+ location.href = 'http://store.tsutaya.co.jp/';
-} else if (window.isGetting) {
+} else if (window.tsutayaletIsProcessing) {
- if (confirm("取得を中止しますか"))
- window.isGetting = false;
+ window.tsutayaletIsProcessing = !confirm('取得を中止しますか');
} else {
- var links = document.links, storeLinks = [];
+ var dispListArticle = document.getElementById('DispListArticle');
+ var storeLinks = [], getStockInfo = function () {
+
+ if (!window.tsutayaletIsProcessing)
+ return;
+
+ if (!(
+ (storeLinks.length && dispListArticle.contains(storeLinks[0])) ||
+ (storeLinks = $('#DispListArticle table a.zaiko_btn').get())[0]
+ )) {
+ var nextPage = $('#DispListArticle span.next.last').get(0)
+ if (nextPage) {
+ dispListArticle.parentNode.insertBefore($('#DispListArticle table').get(0), dispListArticle);
+ nextPage.parentNode.onclick();
+ } else {
+ document.title = '取得完了 - ツタヤ在庫一括表示';
+ window.tsutayaletIsProcessing = false;
+ }
+ return;
+ }
+
+ var link = storeLinks.shift(), t = link.parentNode.insertBefore(document.createTextNode('取得中...'), link);
+ link.className = '';
+ setTimeout(function () {
+ $.ajax({
+ type: 'GET',
+ url: link,
+ dataType: 'text',
+ success: function(data){ t.nodeValue = (data.match(/在庫状況:<span>([^<]+)<\/span>/)||{1:'抽出失敗'})[1];},
+ error: function () { t.nodeValue = '取得失敗';},
+ complete: getStockInfo
+ });
+ }, wait);
+ };
+
+ if (window.tsutayaletIsProcessing === undefined) {
+ var originalElementUpdate = Element_update;
+ window.Element_update = function (element) {
+ if (element && element.id === 'DispListArticle')
+ setTimeout(getStockInfo, 0);
+ return originalElementUpdate.apply(this, arguments);
+ };
+ }
+
+ window.tsutayaletIsProcessing = true;
+ getStockInfo();
+
+}
- for (var i = 0, link; link = links[i]; ++i)
- if (/^http:\/\/(?:store-tsutaya\.tsite\.jp|store\.tsutaya\.co\.jp)\/item\/[^\/]+\/\d+\.html\?storeId/.test(link.href))
- storeLinks.push(link);
-
- window.isGetting = true;
- (function getStockInfo() {
- if (window.isGetting && (window.isGetting = storeLinks.length))
- (function (link) {
- var t = link.parentNode.insertBefore(document.createTextNode("取得中..."), link.nextSibling);
- setTimeout(function () {
- $.ajax({
- type: "GET",
- url: link,
- dataType: "text",
- success: function(data){
- var m = data.match(/在庫状況:<span>([^<]+)<\/span>/);
- if (m)
- t.nodeValue = m[1];
- },
- error: function () { t.nodeValue = "取得失敗";},
- complete: getStockInfo
- });
- }, wait);
- })(storeLinks.shift());
- })();
-}
/*
* @title ツタヤ在庫一括表示
* @description TSUTAYAの店頭在庫検索結果でこれを使うと表示されてる店舗の在庫を一括で取得し結果を表示します 巡回速度1/(0.5+res)[page/s]にしてあるので最短10秒かかります 詳しい使い方の説明は http://1mu.info/texts/tsutayalet/
* @include
* @license
* @require jQuery
*/
var wait = 500;
if (!location.href.indexOf('http://as.chizumaru.com/tsutaya/articleList?')) {
document.body.innerHTML = '<P>3秒後移動します。移動先でもう一度実行してください';
setTimeout(function() {
location.href = 'http://store-tsutaya.tsite.jp' + location.href.substr(23);
}, 3000);
} else if (!/^http:\/\/(?:store-tsutaya\.tsite\.jp|store\.tsutaya\.co\.jp)\/tsutaya\/articleList\?/.test(location.href)) {
if (confirm('TSUTAYAのページに移動しますか'))
location.href = 'http://store.tsutaya.co.jp/';
} else if (window.tsutayaletIsProcessing) {
window.tsutayaletIsProcessing = !confirm('取得を中止しますか');
} else {
var dispListArticle = document.getElementById('DispListArticle');
var storeLinks = [], getStockInfo = function () {
if (!window.tsutayaletIsProcessing)
return;
if (!(
(storeLinks.length && dispListArticle.contains(storeLinks[0])) ||
(storeLinks = $('#DispListArticle table a.zaiko_btn').get())[0]
)) {
var nextPage = $('#DispListArticle span.next.last').get(0)
if (nextPage) {
dispListArticle.parentNode.insertBefore($('#DispListArticle table').get(0), dispListArticle);
nextPage.parentNode.onclick();
} else {
document.title = '取得完了 - ツタヤ在庫一括表示';
window.tsutayaletIsProcessing = false;
}
return;
}
var link = storeLinks.shift(), t = link.parentNode.insertBefore(document.createTextNode('取得中...'), link);
link.className = '';
setTimeout(function () {
$.ajax({
type: 'GET',
url: link,
dataType: 'text',
success: function(data){ t.nodeValue = (data.match(/在庫状況:<span>([^<]+)<\/span>/)||{1:'抽出失敗'})[1];},
error: function () { t.nodeValue = '取得失敗';},
complete: getStockInfo
});
}, wait);
};
if (window.tsutayaletIsProcessing === undefined) {
var originalElementUpdate = Element_update;
window.Element_update = function (element) {
if (element && element.id === 'DispListArticle')
setTimeout(getStockInfo, 0);
return originalElementUpdate.apply(this, arguments);
};
}
window.tsutayaletIsProcessing = true;
getStockInfo();
}
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。