-
-
Save zarigani/5718444 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
(function(){ | |
// このブックマークレット内で共有する変数定義 | |
var total = {}; | |
var year = '2012'; | |
// 処理中のオーバーレイ表示の追加と変数の初期化 | |
function init() { | |
$('<div/>').css({ | |
position: 'fixed', | |
left: 0, | |
top: 0, | |
width: '100%', | |
height: '100%', | |
zIndex: 1000, | |
backgroundColor: 'rgba(0,0,0,.7)', | |
color: '#fff', | |
fontSize: 30, | |
textAlign: 'center', | |
paddingTop: '15em' | |
}).attr('id', '___overlay').text('Amazonいくら使った?').appendTo('body'); | |
year = $('#orderFilter option:last').val().match(/[0-9]/g).join(''); | |
year = Number(year); | |
total[year] = 0; | |
main(0); | |
} | |
// 年ごとの注文金額を集計して、最後に総合計を加えて出力する | |
function main(num) { | |
var progress = load(num); | |
$('#___overlay').text(year+'年の集計中… / '+(num+1)+'ページ目'); | |
progress.done(function(price){ | |
total[year] += price; | |
main(num+1); | |
}).fail(function(){ | |
if(new Date().getFullYear() > year) { | |
year++; | |
total[year] = 0; | |
main(0); | |
} else { | |
var txt = 'あなたは\n'; | |
var _total = 0; | |
$.each(total, function(year, yen){ | |
txt += year + '年 合計' + addFigure(yen) + '円分\n'; | |
_total += yen; | |
}); | |
txt += '総計' + addFigure(_total) + '円分\n'; | |
alert(txt + 'の買い物をAmazonでしました!'); | |
$('#___overlay').remove(); | |
} | |
}); | |
} | |
// 注文履歴ページごとのprice属性の金額を集計する | |
function load(num) { | |
var df = $.Deferred();//「処理の引き延ばしを利用するよ」 | |
var page = get(num); | |
page.done(function(data){ | |
var dom = $.parseHTML(data); | |
var _total = 0; | |
$(dom).find('.price').each(function(){ | |
_total += (Number($(this).text().match(/[0-9]/g).join(''))); | |
}); | |
if(_total === 0) df.reject();//「ごめん…ダメだった…」main関数の.fail(function(){へ | |
else df.resolve(_total);//「はい終わったぜ!」main関数のprogress.done(function(price){へ | |
}); | |
return df.promise();//「後でなんか返すからちょっと待っててよ」 | |
} | |
// year年のnumページの注文履歴を取得する | |
function get(num) { | |
var df = $.Deferred();//「処理の引き延ばしを利用するよ」 | |
$.ajax({ | |
url: 'https://www.amazon.co.jp/gp/css/order-history/?orderFilter=year-'+year+'&startIndex='+num*10, | |
success: function(data){ | |
df.resolve(data);//「はい終わったぜ!」load関数のpage.done(function(data){へ | |
} | |
}); | |
return df.promise();//「後でなんか返すからちょっと待っててよ」 | |
} | |
// 桁区切りして返す | |
// addFigure('1234567890') ---> 1,234,567,890 | |
function addFigure(str) { | |
var num = new String(str).replace(/,/g, ""); | |
while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2"))); | |
return num; | |
} | |
// jqueryライブラリを追加して、init関数から実行する | |
if(typeof $ !== 'function') { | |
var d=document; | |
var s=d.createElement('script'); | |
s.src='//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js'; | |
s.onload=init; | |
d.body.appendChild(s); | |
} else { | |
init(); | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment