1. 程式人生 > 實用技巧 >電商 谷歌外掛 下載後臺的訂單資料

電商 谷歌外掛 下載後臺的訂單資料

//原文:https://github.com/smileyby/js-table-excel
//原文:https://github.com/sxei/chrome-plugin-demo





var tableToExcel = (function () {
    var uri = 'data:application/vnd.ms-excel;base64,',
        template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">'
            + '<head><meta http-equiv="Content-type" content="text/html;charset=UTF-8" /><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/>'
            + '</x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body>{table}</body></html>',
        base64 = function (s) {
            return window.btoa(unescape(encodeURIComponent(s)))
        },
        format = function (s, c) {
            return s.replace(/{(\w+)}/g, function (m, p) {
                return c[p];
            })
        };

    return function (table_html, name) {
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table_html
        }
        return uri + base64(format(template, ctx));
    }
})();



Date.prototype.Format = function (fmt) {
    var o = {
        "M+": this.getMonth() + 1, //月份
        "d+": this.getDate(), //日
        "H+": this.getHours(), //小時
        "m+": this.getMinutes(), //分
        "s+": this.getSeconds(), //秒
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        "S": this.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}



var msieversion = function () {
	var ua = window.navigator.userAgent;
	var msie = ua.indexOf("MSIE ");
	if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer, return version number
	{
		return true;
	} else { // If another browser,
		return false;
	}
	return false;
};



var JSONToCSVConvertor = function (JSONData, ShowLabel) {
	var arrData = typeof JSONData !== 'object' ? JSON.parse(JSONData) : JSONData;
	var CSV = '';
	if (ShowLabel) {
		var row = "";
		for (var index in arrData[0]) {
			row += index + ',';
		}
		row = row.slice(0, -1);
		CSV += row + '\r\n';
	}
	for (var i = 0; i < arrData.length; i++) {
		var row = "";
		for (var index in arrData[i]) {
			var arrValue = arrData[i][index] == null ? "" : '="' + arrData[i][index] + '"';
			row += arrValue + ',';
		}
		row.slice(0, row.length - 1);
		CSV += row + '\r\n';
	}
	if (CSV == '') {
		growl.error("Invalid data");
		return;
	}
	var fileName = "Result";
	if (msieversion()) {
		var IEwindow = window.open();
		IEwindow.document.write('sep=,\r\n' + CSV);
		IEwindow.document.close();
		IEwindow.document.execCommand('SaveAs', true, fileName + ".csv");
		IEwindow.close();
	} else {
		//var uri = 'data:application/csv;charset=utf-8,' + escape(CSV);
		var uri = 'data:application/csv;charset=utf-8,' + CSV;
		var link = document.createElement("a");
		link.href = uri;
		link.style = "visibility:hidden";
		link.download = fileName + ".csv";
		document.body.appendChild(link);
		link.click();
		document.body.removeChild(link);
	}
};










var arr = [];



var add = function(){

	$("div.trade-order-main").each(function () {

		var orderInfo = {
			orderNum: '',
			createTime: '',
			title: '',
			nickName: '',
			realPrice: '',
		};
		
		// order info
		var spans = $($(this).children("table")[0]).find("tbody label span");
		orderInfo.orderNum = $(spans[2]).text();
		orderInfo.createTime = $(spans[5]).text();

		// goods info
		var spans = $($(this).children("table")[1]).find("tbody tr").each(function () {
			var index = $(this).index();
			if (index == 0) {
				var tds = $(this).find("td");;
				orderInfo.title = $($(tds[0]).find("p span")[1]).text();
				orderInfo.nickName = $($(tds[4]).find("a")[0]).text();
				orderInfo.realPrice = $($(tds[6]).find("span")[1]).text();
			} else {// one order, multiple goods
				var tds = $(this).find("td");;
				orderInfo.title = orderInfo.title + "," + $($(tds[0]).find("p span")[1]).text();
			}

		});

		// console
		//console.log(orderInfo);
		arr.push(orderInfo);
	});
	console.log(arr);
};







// 接收來自後臺的訊息
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
    console.log('收到來自 ' + (sender.tab ? "content-script(" + sender.tab.url + ")" : "popup或者background") + ' 的訊息:', request);
    if (request.cmd == 'update_font_size') {
		var id = setInterval(function () {
			console.log('準備儲存資料');
			add();
			console.log('資料儲存完成');
			if ($("#sold_container li.pagination-disabled.pagination-next").length > 0) {
				console.log('沒有下一頁了');
				window.clearInterval(id)
				JSONToCSVConvertor(arr.reverse(), true);
				return;
			}
			$("li.pagination-next").get(0).click();//下一頁           
		}, 2000);
    }
    else {
        tip(JSON.stringify(request));
        sendResponse('我收到你的訊息了:' + JSON.stringify(request));
    }
});