// ==UserScript==
// @name 美团商家流量导出Excel
// @namespace http://tampermonkey.net/
// @version 0.1.2
// @description 商家流量导出Excel
// @author yhpl-pgq
// @match https://shangoue.meituan.com/*
// @require http://cdn.staticfile.org/xlsx/0.16.1/xlsx.mini.min.js
// @grant GM_xmlhttpRequest
// ==/UserScript==
(function() {
'use strict';
addButton();
console.log('enter')
})();
var xmlExportContent = [];
function addButton(){
var headerLeft = $("#reload-page")[0];
var header = headerLeft.parentElement;
var button = document.createElement('BUTTON');
button.innerText = "我是小可爱";
button.onclick = getStore;
button.id = "yhplExport";
header.appendChild(button);
}
function onStoreSuccess(node){
var code = node.code
window.node = node;
console.log('onSuccess, code:'+code);
if (code == 0){
var data = node.data;
var length = data.length;
for(var poi = 0; poi < length; poi++){
var child = data[poi];
// console.log(child.poiName+"," +child.id);
// if (poi < 3){
getStoreDetail(poi, length, child.id, child.poiName);
//}
}
}
}
function onStoreError(e){
console.log(e);
console.log('onError');
}
function getStore(){
xmlExportContent = [];
xmlExportContent.push(['店铺名字', '指标名称', '当前', '7日对比', '行业对比'])
console.log('req user');
var URL_STORE = 'https://shangoue.meituan.com/api/poi/poiList';
$.ajax({
type: "POST",
url: URL_STORE,
data: '',
success: onStoreSuccess,
error:onStoreError,
dataType: 'json'
});
}
function onStoreDetailSuccess(step, total, text, storeID, storeName){
//console.log('onStoreDetailSuccess:'+text);
var node = JSON.parse(text);
var code = node.code
console.log('onSuccess, code:'+code);
if (code == 0){
var data = node.data;
if (data != null) {
var length = data.length;
var storeDetailRows = [];
for(var index = 0; index < length; index++){
var child = data[index];
var indexStr = child.index;
var indexParsed = acceptDataNode(indexStr);
if (indexParsed.length > 0){
var storeDetailRow = [];
storeDetailRow.push(storeName+"("+storeID+")");
storeDetailRow.push(indexParsed);
storeDetailRow.push(appendDateSuffix(indexStr, child.current));
storeDetailRow.push(appendDateSuffix(indexStr, child.ring));
storeDetailRow.push(appendDateSuffix(indexStr, child.peer));
storeDetailRows.push(storeDetailRow);
// console.log(child.index+"," +child.current);
}
}
}
showProgress(storeDetailRows, step, total);
}
}
function appendDateSuffix(index, val){
if (index.indexOf('RATE')>=0){
val = val + "%";
}
return val;
}
function acceptDataNode(index) {
switch (index){
case "FLOW_POI_EXPOSE_UV":
return "曝光人数";
case "FLOW_HOME_PAGE_EXPOSE_RATE":
return "入店转化率";
case "FLOW_SUBMITTED_HOME_PAGE_RATE":
return "下单转化率";
default:
return "";
}
}
function getStoreDetail(index, total, storeID, storeName){
// var storeID = '8346703';
// var storeName = '测试店铺';
// var storeParmas = 'cityIds=0&wmPoiId='+id;
var URL_PREFIX = 'https://waimaieapp.meituan.com/igate/recoanalysis/flowAnalysisV4/recentDays/flowTransformation?acctId=69808847&source=0&recentDays=7';
var storeParmas = '&cityIds=0&wmPoiId='+storeID;
var URL_DETAIL = URL_PREFIX + storeParmas
GM_xmlhttpRequest({
method: "GET",
url: URL_DETAIL,
data: '',
headers: {
"Referer": "https://waimaieapp.meituan.com/igate/",
"Content-Type": "application/x-www-form-urlencoded"
},
onload: function(res){
if(res.status === 200){
// console.log('成功')
//console.log(res);
onStoreDetailSuccess(index, total, res.response, storeID, storeName);
}else{
//console.log('失败')
console.log(res)
}
},
onerror : function(err){
console.log('error')
console.log(err)
}
});
}
function showProgress(content, step, total){
var rows = content.length;
for(var index = 0; index < rows; index++){
xmlExportContent.push(content[index]);
}
step = step + 1;
var button = $("#yhplExport")[0];
button.innerText = "导出进度:"+step + "/ "+total;
console.log(xmlExportContent);
if (step >= total){
button.innerText = "下载Excel";
exportAsXLS(xmlExportContent);
}
}
//segment excel
function exportAsXLS(aoa){
var excelName = "流量分析.xlsx";
var sheet = XLSX.utils.aoa_to_sheet(aoa);
//var sheet = XLSX.utils.aoa_to_sheet([[1,2,3,4]]);
openDownloadDialog(sheet2blob(sheet),excelName);
}
function sheet2blob(sheet, sheetName) {
sheetName = sheetName || 'sheet1';
var workbook = {
SheetNames: [sheetName],
Sheets: {}
};
workbook.Sheets[sheetName] = sheet; // 生成excel的配置项
var wopts = {
bookType: 'xlsx', // 要生成的文件类型
bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
type: 'binary'
};
var wbout = XLSX.write(workbook, wopts);
var blob = new Blob([s2ab(wbout)], {
type: "application/octet-stream"
}); // 字符串转ArrayBuffer
function s2ab(s) {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
return buf;
}
return blob;
}
function openDownloadDialog(url, saveName) {
if (typeof url == 'object' && url instanceof Blob) {
url = URL.createObjectURL(url); // 创建blob地址
}
var aLink = document.createElement('a');
aLink.href = url;
aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
var event;
if (window.MouseEvent) event = new MouseEvent('click');
else {
event = document.createEvent('MouseEvents');
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
}
aLink.dispatchEvent(event);
}
//eng segment excel