Skip to content

Instantly share code, notes, and snippets.

@kassyi
Forked from l-rutong/amazon-calc.js
Last active July 19, 2019 17:14
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 kassyi/55adf99d676e550cd5946a0bc821d73b to your computer and use it in GitHub Desktop.
Save kassyi/55adf99d676e550cd5946a0bc821d73b to your computer and use it in GitHub Desktop.
Amazon購入履歴のCSVエクスポート (2017 年バージョン)
// Amazon購入履歴のCSVエクスポート
//
// 使い方:
// 1. 全部コピーする (右上の Raw をクリックした先でやるのが楽)
// 2. Amazon の注文履歴ページ ( https://www.amazon.co.jp/gp/css/order-history/ ) を開く
// 3. F12 または 右クリ→要素の検証 とかで出てくる開発者ツールのコンソール (JavaScript REPL) にペースト
// 4. エンターで実行
// (Firefox はなんか allow pasting とタイプしろみたいなことを言われるので従う)
// 5. しばらく待つと、コンソールに合計金額が表示され、CSVが保存される
//
// 2014-12-28 / 2016-05-10 時点での DOM 構造に対応, Firefox と Chrome でテスト済
// 2017-02-18 CSV保存機能の追加
javascript:(function(){(function(){var h="<br>";var g={};var f="2017";var i=false;function k(m){if(typeof m!=="number"){var m=0;f=window.prompt("何年分の注文を集計しますか?\n - 半角数字4桁で入力してください",f);f=Number(f);jQuery("body").prepend('<div id="popup"></div>')}var d=j(m,false);jQuery("#popup").append("<p>"+f+"年の集計中… / "+(m+1)+"ページ目</p>");console.log(f+"年の集計中… / "+(m+1)+"ページ目");d.done(function(n){if(typeof g[f]==="undefined"){g[f]=n}else{g[f]=g[f].concat(n)}k(m+1)}).fail(function(){if(i&&new Date().getFullYear()>f){f++;k(0)}else{var n=0;var o;jQuery.each(g,function(r,q){var p=0;jQuery.each(q,function(){p+=this.price});n+=p;o=q});jQuery("#popup").append("<p>合計 "+n+" 円</p>");console.log("合計 "+n+" 円");a("amazon_report_"+f+".csv",c(o))}})}function j(m,d){var o=jQuery.Deferred();var n=b(m,d);n.done(function(q){var r=jQuery.parseHTML(q);var p=[];jQuery(r).find("div.order").each(function(){var u=jQuery(this);var z=jQuery(u.find("div.order-info span.value")[0]).text();var s=new RegExp("(\\d{4})年(\\d{1,2})月(\\d{1,2})日");z.match(s);var A=RegExp.$1;var x=RegExp.$2;if(x.length<=1){x="0"+x}var B=RegExp.$3;if(B.length<=1){B="0"+B}var t=""+A+"/"+x+"/"+B;var w=jQuery(u.find("div.order-info span.value")[2]).text().trim();var C=jQuery(u.find("div.order-info a.a-link-normal")[0]).attr("href");if(C!=undefined){C="https://www.amazon.co.jp"+C}else{C="N/A"}var y=[];u.find("div.a-row>a.a-link-normal").each(function(){var F=jQuery(this).text().trim();var G=jQuery(this).parent().parent().find("div.a-row>span.a-color-price").text().trim().replace(",","");y.push("["+G+"] "+F)});var E=y.join(h);var D=jQuery(u.find("div.order-info span.value")[1]).text();var v=Number(D.match(/[0-9]/g).join(""));if(d){console.log(E,v)}p.push({date:t,orderNumber:w,price:v,item:E,orderDetailURL:C})});if(p.length<=0){o.reject()}else{o.resolve(p)}});return o.promise()}function b(d){var m=jQuery.Deferred();jQuery.ajax({url:"https://www.amazon.co.jp/gp/css/order-history?digitalOrders=1&unifiedOrders=1&orderFilter=year-"+f+"&startIndex="+d*10,beforeSend:function(n){n.setRequestHeader("X-Requested-With",{toString:function(){return""}})}}).success(function(n){m.resolve(n)}).fail(function(n,o){if(verbose){console.log("fail",o)}});return m.promise()}function c(q){var p="";for(var m=0;m<q.length;m++){if(p==""){var o="";for(var n in q[m]){if(o!==""){o+=","}o+='"'+n+'"'}p+="\ufeff"+o+"\r\n"}var d="";for(var n in q[m]){if(d!==""){d+=","}d+='"'+q[m][n]+'"'}p+=d+"\r\n"}return p}function a(d,o){var m=document.createElement("a");m.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(o));m.setAttribute("download",d);if(document.createEvent){var n=document.createEvent("MouseEvents");n.initEvent("click",true,true);m.dispatchEvent(n)}else{m.click()}}if(typeof jQuery!=="function"){var e=document;var l=e.createElement("script");l.src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js";l.onload=k;e.body.appendChild(l)}else{k()}})();})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment