Skip to content

Instantly share code, notes, and snippets.

@zarigani
Forked from moroya/aitter.js
Last active December 18, 2015 03:29
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 zarigani/5718444 to your computer and use it in GitHub Desktop.
Save zarigani/5718444 to your computer and use it in GitHub Desktop.
(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