您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
天猫商家中心商品管理提取SKU.
当前为
// ==UserScript== // @name 天猫商家中心商品管理提取SKU // @namespace http://leironghua.com/ // @version 0.7 // @description 天猫商家中心商品管理提取SKU. // @author 雷荣华 // @include *//sell.tmall.com/auction/item/item_list.htm* // @run-at document-end // @grant none // ==/UserScript== (function() { 'use strict'; (function(S) { window.LRH = { totalPage: 0, pageData: [], itemData: [] }; S.use('core,node,anim,io,json', function(S) { // 检查商品的工具栏是否已经出现 function checkOperate() { if (S.all('.goods-operate').length == 0) { return; } //去掉定时器的方法,已经加载完成 window.clearInterval(window.t1); appendBtn(); } // 添加自定义的提取按钮 function appendBtn() { //prepend S.all('.goods-operate').append('<span class="goods-operate-item" id="_btn_goods" style="margin-left: 5px" ><a href="javascript:void(0)" target="_blank" class="sui-btn-primary sui-btn">提取商品信息</a></span><span class="icon icon-loading icon-loading-animate" id="_extract_loading" style="display: none;"></span><span id="_extract_status" style="font-size: 12px;"></span>'); S.all('body').append('<div id="_reuslt" style="display: none;"><div class="sui-modal-container active"><div class="sui-modal-overlay" style="z-index: 1100;"></div><div class="sui-modal-inner" style="z-index:1100;"><div style="width:1000px;" class="sui-modal"><a class="sui-modal-close"><span>×</span></a><div class="sui-modal-title">处理完成请复制到剪贴板</div><div style="height:auto;" class="sui-modal-content"><div class="goods-title"><form novalidate="" class="sui-form"><div class="sui-field sui-row"><div class="sui-value sui-col-20"><textarea class="sui-textarea " rows="30" style="min-height:auto;width:950px;resize:vertical;" readonly="readonly"></textarea><div class="remain-tip"><span></span></div></div></div></form><div class="goods-title-btns"><a class="sui-btn">关闭</a></div></div></div></div></div></div></div>'); S.Event.add('#_btn_goods', 'click', function(e) { run(); }); // 点击关闭功能 S.Event.add('#_reuslt a', 'click', function(e) { S.all('#_reuslt').hide(); }); // 焦点全选功能 S.all('#_reuslt textarea').style('cursor','pointer').on('focus', function(e) { S.all('#_reuslt textarea')[0].select(); }); // S.Event.add('#_reuslt textarea', 'focus', function(e) { // S.all('#_reuslt textarea')[0].select(); // }); // 点击再次显示结果 S.Event.add('#_extract_status','click',function(e){ if(S.all('#_extract_status').text().indexOf('处理完成') != -1){ S.all('#_reuslt').show(); } }); } // 分页提取数据 function doPage(currentPage) { // 已经加载完成window.LRH.totalPage if (currentPage >window.LRH.totalPage && window.LRH.totalPage != 0) { // 把分页中的商品数组合并成为一个数组 S.each(window.LRH.pageData, function(v, i) { window.LRH.itemData = window.LRH.itemData.concat(v.module.itemList); }); doItemDataHandle(0); return; } S.all('#_extract_status').text('第1/3步:正在加载第' +currentPage + '/' + window.LRH.totalPage + '页的数据……'); // 发起Ajax请求 S.IO({ type:"get", dataType: 'json', url: window.config.urls.submitQueryUrl + window.g_config.tb_token, data: { currentPage: currentPage }, success :function( data , textStatus , io){ }, error :function( data , textStatus , io){ }, complete : function(data , textStatus , io){ if(data != null){ window.LRH.pageData.push(data); // 设置服务器返回的总页数 if(window.LRH.totalPage < data.module.totalPage) { window.LRH.totalPage = data.module.totalPage; } } else { alert(S.all('#_extract_status').text() + "\r\n" + "加载失败," + textStatus); } doPage(currentPage + 1); // doPage(parseInt(io.config.uri.query._queryMap.currentPage) + 1); } }); // S.IO.get(window.config.urls.submitQueryUrl + window.g_config.tb_token, { // currentPage: currentPage // }, function(result) { // window.LRH.pageData.push(result); // doPage(parseInt(this.uri.query._queryMap.currentPage) + 1); // }, "json"); } // 进行商品数据处理 function doItemDataHandle(index) { if(index > window.LRH.itemData.length-1){ S.all('#_extract_status').text('第3/3步:正在整理'+window.LRH.itemData.length+'个商品的SKU……'); var content = "商品ID\t商家编码\t商品名称\t商品地址\t价格\t总库存\t总销量\t上架时间\t库存ID\t库存名称\t库存量",tempData; var skuCount = 0; S.each(window.LRH.itemData,function(item){ tempData = "\r\n" +item.itemId + "\t" + (getItemComponentByID(item,'listItemOuterIdComponent').data.outerId || '') + "\t" + getItemComponentByID(item,'listItemTitleComponent').data.value + "\thttp:" + getItemComponentByID(item,'listItemTitleComponent').data.detailUrl + "\t" + getItemComponentByID(item,'listItemPriceComponent').data.price+ "\t" +getItemComponentByID(item,'listItemQuantityComponent').data.quantity+ "\t" + getItemComponentByID(item,'listItemTotalSoldQuantityComponent').data.totalSoldQuantity + "\t" +getItemComponentByID(item,'listItemOldStartsComponent').data.oldStarts; content += tempData; if(item.quantity.module && item.quantity.module.skuList) { S.each(item.quantity.module.skuList,function(sku,skuIndex){ skuCount++; if(skuIndex != 0) { content += tempData; } content += "\t" +sku.skuId + "\t" +sku.skuName + "\t" +sku.skuQuantity; }); } }); var sumMsg = "合计:共" + window.LRH.itemData.length+'个商品,共' + skuCount + "个SKU"; content += "\r\n" + sumMsg; S.all('#_extract_status').text('处理完成,共'+window.LRH.itemData.length+'个商品,点击显示结果!'); //console.info(content); S.all('#_reuslt textarea').text(content); S.all('#_reuslt').show().all('.remain-tip span').text(sumMsg); //GM_setClipboard(content,'text'); setTimeout(function () { alert(S.all('#_extract_status').text()); }, 200); return; } var item = window.LRH.itemData[index]; S.all('#_extract_status').text('第2/3步:正在加载第' +(index +1)+ '/' + window.LRH.itemData.length + '个商品的SKU……'); S.IO({ type:"get", dataType: 'json', url: getItemComponentByID(item,'listItemQuantityComponent').data.editUrl, data: { _itemId: item.itemId }, success :function( data , textStatus , io){ }, error :function( data , textStatus , io){ }, complete : function(data , textStatus , io){ // var itemTemp = getItemByID(io.config.uri.getQuery()._queryMap._itemId); if(data != null){ item.quantity = data; } else { getItemComponentByID(item,'listItemTitleComponent').data.value += "(SKU数据拉取失败,"+textStatus+")"; } doItemDataHandle(index+1); } }); // S.IO.get(getItemComponentByID(item,'listItemQuantityComponent').data.editUrl, { // _itemId: item.itemId // }, function(result) { // var item = getItemByID(this.uri.query._queryMap._itemId); // item.quantity = result; // doItemDataHandle(index+1); // }, "json"); } // 获取商品的属性 function getItemComponentByID(item, componentId){ var c = { data :{}}; S.each(item.components,function(v){ if(v.componentId == componentId){ c = v; return false; } }); return c; } function getItemByID(itemId) { var item = null; S.each(window.LRH.itemData,function(v){ if(v.itemId == itemId){ item = v; return false; } }); return item; } function run() { window.LRH.pageData = []; window.LRH.itemData = []; window.LRH.totalPage = 0; // S.all('.goods-operate').fire('click'); // var item = []; // S.all('.sui-table-tbody tr').each(function(v,i){ // item.push({ // itemID:v.all('.goods-item-id').text().replace("商品ID:",""), // itemTitle:v.all('.goods-item-title a').text(), // itemCode:v.all('.goods-item-outerid span:last-child').text(), // price:v.all('.price-value').text(), // itemCount:v.all('.goods-item-quantity div span').text(), // itemSaled:v.all('.goods-item-text').text() // }); // }); // https://sell.tmall.com/auction/command.htm?action=item/ItemListAction&event_submit_do_query=1&_input_charset=utf-8&tab=onsale&status=item_on_sale&_tb_token_=7a4bedc5e8f3b&sortField=starts&status=item_on_sale&order=desc¤tPage=2 //console.info(window.config.urls.submitQueryUrl + window.g_config.tb_token); window.LRH.totalPage = parseInt(S.all('.sui-total-page span:last-child').text()); doPage(1); return; } window.t1 = window.setInterval(checkOperate, 1000); }); })(KISSY); // S.all('.sui-page-next').fire('click'); })();