Commit b8205e2d by yexing

[yx] update

parent 428a3d3f
node_modules
pnpm-lock.yaml
hook
test
2.0.2
\ No newline at end of file
File added
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC6m5WRVlOuvtx+
UkvNo01j9rroXhEEzfQP8FbDykSS/eAP1oo+JL5DnXBiCYvKcnMBxK3S08V0pKpX
e3gDIW3AxOKiqrPlB4eTWTa1sQKuh1BOJj1E3fDfD+MOBcawinKAUTdFcQjFLuga
oLCQj+pAJt3cwraVTZUblQyuWXWMIm6611ukuqBa1QfSUDb1b/c45Il9EkTJbBD4
61Ff7b60IpuB7p3JxSZb803OpIXGCszk9nj9ntnMKrigJRy+WIPdcIMU1mRmas1V
iHnhoTXrxeJP5LLDziwco7iVvItmw27+o+a4Els4+cUAwUeKuUKTmxmGFukEqUhh
iMA8AUp7AgMBAAECggEADsiUqNb1+joUrc1HRBtT3j+FvzL0ljTayQh5VzmHBT4n
qhmNCi9PA3xNkva+pGM8yT8TpkgwtHT3KccWUukrEMKIUerEJbja/MlslChZ1gnS
St6sq/AJTSKtEkdS3lmZiKDmiBHUaAq3SKTCWDGOlVZ+7SZf4KQs0+qS/p0Huvo8
gTIVU1FXj6/dApxizLzGaEPiJXXStX16RtWqieDtwRf+cBLucs/3dS+GHnkUtfFA
AypQRAmLwTUSI2dDTR6a4x1vjAU+OD6sfLD4wmp72rngy2YMcovtI9vIABRKq2iv
NQTTugHT3PQnoZSkubJv22t1P/gUbP1keTDCLruVgQKBgQD0t/ucmWwbEAbkOqPe
wX6LOLf2SedV2BYULnqZHTxrdqfiTPNmcAeQtXyKmOEBq5TgGb4MC2QeBcgGExHH
qE2ng+ub9bmwLEWXlYmRqaRWhuyHJqTgSXDMDI4J1nDYcEJVz6i+2jvH7oq+tdif
pIYYRNCWYuBPe65vNVVAlhs7WQKBgQDDNc/8UAHa1nhPpjL7Dn2xLQdgpMWM9Ht4
1LLrj9WiB/HfEjOyIv1fwCdQheCMb15bz9bTldaNfPoAoR+f0OtN3goYwDUMtV4s
HgA3VjNkdlEYogJLi7PGoZepbdOmWuynsb2VlPwnRU4PFQ1sayv9DSX+CbSbpt5g
JTzMl2n98wKBgQC8IBfYSgVWRJrXptDE9MDgLAkX17Z0QrquZxCuVlBVWJE1IezX
afYW473LGj2XOB0prgBwZ+1eOxmKuewoLZUM2xgr+9n0ugQBxN5N0TjZn72DJE0J
csu4wUoL/AMiECKerxXNKh1c1F9qvoa6KxM+4t/rTDWeRLlTGo/gJ8TleQKBgQCb
5ro4k90nXOmxEtbcUnJnscKWmIF9VTPXCGfsYW8IfLfao7rNpcwdUGUVlhYDkl4V
jSPQz3YOgaVYI1YSWNPT2GTP55F2mNKhAUTC7QEWVrflqF2U3/mvxRZOpfvGfA9M
zlLOx7Gp21vAB9w0nlL/QiT5gd7QALDQsGyiKLrpqQKBgFKp7aI7qT0bzNDiDw13
KhiRxgKW2CiDt4VDIfKbdFoZPjq+QLe83sbFZWsr+W1uU5y0nW7C/D9fMLUBkhkS
SkPsHos9959Pc59EqZ+W5oyYfEWs9ZBziDdt2Iy6Mv3Br2HJLi82pIU7EIGeWUXu
qAIWaepF7HaXecDyDno6Dt1q
-----END PRIVATE KEY-----
!function(){"use strict";const e=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function t(e){return new Promise((t=>setTimeout(t,e)))}function o(e,t,o=";"){const r=(t||document.cookie).split(o);for(let t of r)if(t=t.trim(),t.startsWith(e)){let o=t.substring(e.length+1,t.length);return console.log(`已找到${e}: ${o}`),o}return console.warn(`未找到${e}`),""}function r(t){const o=new Date(t);return`${e[o.getMonth()]} ${o.getDate()},${o.getFullYear()}`}function a(t){const o=new Date(t),r=o.getDate().toString().padStart(2,"0");return`${e[o.getMonth()]} ${r}, ${o.getFullYear()}`}const n=e=>{console.error(e)},s=Object.freeze({"wm_aurora.market":"US"}),i=2e3;class c{constructor(e,t,o){this.names=e,this.params=t,this.options=o||{}}send(){if(!this.uri||!this.scid)return void console.warn(`未设置 ${this}`);const e=new URL(`${this.uri}${this.names.apiName||""}`),t=this.options.method||"GET",o=this.options.callback,r=this.names.desc||this.desc;let a=this.options.ext||"csv",i=this.options.body;i=i&&JSON.stringify(i)||null,e.search=new URLSearchParams(this.params).toString(),console.log(`${t} ${e}`),fetch(e,{body:i,method:t,headers:this.options.headers||s,...this.options.requestInit||{}}).then((async e=>{if(console.log(e),o)return o.call(this,e);if("xlsx"==a){const t=function(e){const t=Object.keys(e[0]);let o=t.join(",")+"\r\n";return e.forEach((e=>{const r=t.map((t=>{return null==(o=e[t])?"":"string"==typeof o?`"${o.replace(/"/g,'""')}"`:o;var o}));o+=r.join(",")+"\r\n"})),o}(await e.json());return a="csv",new Blob([t],{type:"text/csv"})}return e.blob()})).then((e=>{const t=`${this.scid} ${this.names.showName.toLowerCase()} ${r}.${a}`;console.log(`下载/上传: ${t}`),function(e,t){const o=URL.createObjectURL(t),r=document.createElement("a");r.href=o,r.download=e,r.click(),r.remove(),URL.revokeObjectURL(o)}(t,e)})).catch(n)}}const l=async function(e){let o=await e.json();const r=o.downloadUrl;if(!r)throw new Error(`downloadUrl 获取失败: ${JSON.stringify(o)}`);return console.log(`GET ${r}`),await t(i),e=await fetch(r,{headers:s}),console.log(e),e.blob()},p=async function(e){let o=await e.json();const r=async()=>{try{await t(i),e=await fetch(n,{headers:s}),console.log(e),o=await e.json();const r=o.response.filter((e=>e.download.endsWith(a)))[0];if(!r)throw new Error(JSON.stringify(o));await t(i);const c=r.requestedOn.replace(/[\s:-]/g,"_");return n=`${r.download}?fileName=${this.names.fileName}_${c}.csv&lang=en-US`,console.log(`GET ${n}`),e=await fetch(n,{headers:s}),console.log(e),e.blob()}catch(e){return console.log(`重试请求, ${e}`),r()}},a=o.response&&o.response.snapshotId;if(!a)throw new Error(`snapshotId 获取失败: ${JSON.stringify(o)}`);console.log(`snapshotId: ${a}`);let n=new URL(`${this.uri}${this.names.apiName}`);const c=this.options.body.advertiserId;return n.search=new URLSearchParams({request:`/v1/snapshot/report?advertiserId=${c}&jobStatus=pending,processing,done`}).toString(),console.log(`GET ${n}`),r()},d=async function(e){let o=await e.json();const r=o.requestId;if(!r)throw new Error(`requestId 获取失败: ${JSON.stringify(o)}`);console.log(`requestId: ${r}`);let a=new URL(`${this.uri}${this.names.apiName2}`);return a.search=new URLSearchParams({reportType:"ORDER",reportVersion:"v1",requestId:r}).toString(),console.log(`GET ${a}`),await t(i),e=await fetch(a,{headers:s}),console.log(e),e.blob()},m=function(e,t,o){return new c({apiName:"campaigns",showName:"广告表",fileName:e.replaceAll(" ","")},{request:o||"/v1/snapshot/report"},{method:"POST",body:{advertiserId:localStorage.getItem("advertiserId"),format:"gzip",...t},callback:p})},h="https://seller.walmart.com/aurora/v1/report/reconreport/",u="https://seller.walmart.com/aurora/v1/reports/",w="https://advertising.walmart.com/sp/api/";async function f(e,n,p){const f=new URL(e);if(location.host!=f.host)return console.warn("不支持当前网站"),[];switch(c.prototype.uri=f,c.prototype.scid=o("scid"),n&&p&&(c.prototype.desc=function(e,t){const o=new Date(e),r=new Date(t);return`${o.getMonth()+1}${o.getDate()}-${r.getDate()}`}(n,p)),e){case h:const e=await(async()=>{const e="https://seller.walmart.com/aurora/v1/auroraPaymentsSettlementService/payment/settlementPeriods";console.log(`GET ${e}`);let t=await fetch(e,{headers:s}),o=await t.json();if(t=o.payload&&o.payload.response,!t)throw new Error(`response 获取失败: ${JSON.stringify(o)}`);const r=t.slice(1,4);return console.log(`periods: ${JSON.stringify(r)}`),r})();await t(i);let f=[];for(let t of e){n=t.payPeriodFromDate,p=t.payPeriodToDate;const e=`${r(n)}-${r(p)}`,o=(y=(y=t.settleDate).replaceAll("-","")).slice(4)+y.slice(0,4);f=f.concat([new c({apiName:"v1/reconFile",showName:"Payments new report",desc:e},{reportDate:o},{ext:"zip"}),new c({apiName:"reconFile",showName:"Payments legacy report",desc:e},{reportDate:o},{ext:"zip"})])}return f;case u:return[new c({apiName:"reportRequests",apiName2:"downloadReport",showName:"订单表"},{reportType:"ORDER",reportVersion:"v1",isDSV:"false",bizRole:"MP"},{method:"POST",body:{rowFilters:[{type:"enumFilter",values:["All"],columnName:"orderGroups"},{type:"enumFilter",values:["Seller"],columnName:"fulfilmentTypes"},{type:"rangeFilter",columnName:"orderDate",from:n,to:p}],additionalInfo:{reportSummary:`Seller Fulfilled - ${a(n)} to ${a(p)}`},excludeColumns:["Order Type","Service PO#","Service Status","Total Service Cost","Service Scheduled Date"]},callback:d,requestInit:{serviceName:"get_orders_asyncInitiateDownload"}})];case w:return c.prototype.scid=o("partner_id",decodeURIComponent(o("adtech-w-dest")),"&"),[m("Keyword Performance",{startDate:n,endDate:p,reportType:"keyword",attributionWindow:"days3",extraFields:["noDate"]}),m("Item Keyword Performance",{startDate:n,endDate:p,reportType:"itemKeyword",attributionWindow:"days3",extraFields:["noDate"]}),m("Item Performance",{startDate:n,endDate:p,reportType:"adItem",attributionWindow:"days3",extraFields:["noDate","splitAttribution"]}),m("Keyword Recommendations",{recommendationType:"keywordRecommendations"},"/v1/snapshot/recommendations")];default:return[new c({apiName:"salesReport",showName:"Orders"},{fromDate:n,toDate:p},{ext:"xlsx"}),new c({apiName:"salesReport",showName:"Orders",sheetName:"Multchannel_Fulfillment_Details"},{fromDate:n,toDate:p,type:"MCS"},{ext:"xlsx"}),new c({apiName:"returnsReport",showName:"Customer returns"},{fromDate:`${n}T00:00:00`,toDate:`${p}T23:59:59`}),new c({apiName:"inventoryReconciliation",showName:"Inventory reconciliation"},{fromDate:n,toDate:p}),new c({apiName:"feeDetailReport",showName:"Settlement"},{startDate:n,endDate:p}),new c({apiName:"storageFeeReport",showName:"Storage"},{startDate:n,endDate:p}),new c({apiName:"inboundTransportationReport",showName:"Inbound transportation"},{startDate:n,endDate:p}),new c({apiName:"inventoryHealthReport",showName:"Inventory health"},{},{callback:l})]}var y}!async function(){let e=await f(u,"2025-02-01","2025-02-10"),o=0;e.forEach((e=>{t(o).then((()=>e.send())),o+=2e3}))}()}();
//# sourceMappingURL=app.min.js.map
body {
width: 100%;
margin: 0;
font-family: Arial, sans-serif;
}
form {
width: 300px;
margin: 20px auto;
padding: 15px;
border: 1px solid #ddd;
border-radius: 5px;
background: #fff;
}
.form-row {
display: flex;
align-items: center;
margin: 10px 0;
}
.form-row label {
width: 120px;
display: flex;
align-items: center;
gap: 8px;
font-size: 14px;
}
button {
width: 50%;
padding: 8px;
margin-top: 15px;
border: none;
border-radius: 4px;
cursor: pointer;
transition: background 0.3s;
}
.confirm {
background: #007bff;
color: white;
}
.confirm:hover {
background: #0056b3;
}
.cancel {
background: #FF3333;
color: white;
}
.cancel:hover {
background: #CC0000;
}
.modal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
z-index: 1000;
display: flex;
justify-content: center;
align-items: center;
}
.modal-content {
background: white;
width: 500px;
max-width: 90%;
border-radius: 8px;
padding: 20px;
max-height: 80vh;
overflow-y: auto;
position: relative;
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #ddd;
padding-bottom: 10px;
margin-bottom: 15px;
}
.close {
cursor: pointer;
font-size: 24px;
position: absolute;
right: 20px;
top: 15px;
color: #666;
}
.close:hover {
color: #000;
}
.logs {
max-height: 300px;
overflow-y: auto;
margin-top: 15px;
padding: 10px;
background: #f8f9fa;
border-radius: 4px;
}
.log-item {
padding: 8px;
border-bottom: 1px solid #eee;
font-size: 13px;
}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
{"name":"WalmartExports","description":"导出沃尔玛报表","version":"2.0.2","manifest_version":3,"background":{"service_worker":"./js/background.js"},"permissions":["tabs","activeTab","scripting","notifications","storage","alarms"],"action":{"default_title":"WalmartExports","default_popup":"popup.html","default_icon":{"16":"icon.png","32":"icon.png","48":"icon.png","128":"icon.png"}},"icons":{"16":"icon.png","32":"icon.png","48":"icon.png","128":"icon.png"},"web_accessible_resources":[{"resources":["src/main.js"],"matches":["<all_urls>"]}],"host_permissions":["https://seller.walmart.com/*","https://advertising.walmart.com/*","https://login.account.wal-mart.com/*","https://marketplace.walmartapis.com/*","https://walmart.meinuosha.com/*"],"content_scripts":[{"matches":["https://seller.walmart.com/*","https://advertising.walmart.com/*","https://login.account.wal-mart.com/*","https://marketplace.walmartapis.com/*","https://walmart.meinuosha.com/*"],"js":["./js/main.js"]}]}
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WalmartExports</title>
<link rel="stylesheet" href="./css/popup.css">
<script src="./js/popup.js"></script>
</head>
<body>
<form>
<div class="form-row">
<label><input type="checkbox" value="WFS" name="option" checked /> WFS</label>
<!-- <input type="text" name="fromDate">-<input type="text" name="toDate"> -->
</div>
<div class="form-row">
<label><input type="checkbox" value="Payment" name="option" checked /> 放款表</label>
<!-- <input type="text" name="fromDate">-<input type="text" name="toDate"> -->
</div>
<div class="form-row">
<label><input type="checkbox" value="Order" name="option" checked /> 订单表</label>
<!-- <input type="text" name="fromDate">-<input type="text" name="toDate"> -->
</div>
<div class="form-row">
<label><input type="checkbox" value="Advert" name="option" checked /> 广告表</label>
<!-- <input type="text" name="fromDate">-<input type="text" name="toDate"> -->
</div>
<div class="form-row">
<button class="confirm">确认</button>
<button class="cancel">取消</button>
</div>
</form>
<div class="modal">
<div class="modal-content">
<div class="modal-header">
<h3>任务进度</h3>
<span class="close">&times;</span>
</div>
<div class="logs" id="logContainer"></div>
</div>
</div>
</body>
</html>
\ No newline at end of file
import globals from "globals";
import pluginJs from "@eslint/js";
/** @type {import('eslint').Linter.Config[]} */
export default [
{languageOptions: { globals: {...globals.browser, ...globals.node, chrome: "readonly"} }},
pluginJs.configs.recommended,
];
\ No newline at end of file
{
"name": "WalmartExports",
"description": "导出沃尔玛报表",
"version": "1.0.0",
"manifest_version": 3,
"background": {
"service_worker": "background.js",
"type": "module"
},
"permissions": [
"tabs",
"activeTab",
"scripting",
"storage",
"notifications",
"alarms"
],
"action": {
"default_title": "WalmartExports",
"default_popup": "popup.html",
"default_icon": {
"16": "icon.png",
"32": "icon.png",
"48": "icon.png",
"128": "icon.png"
}
},
"icons": {
"name": "WalmartExports",
"description": "导出沃尔玛报表",
"version": "1.0.0",
"manifest_version": 3,
"background": {
"service_worker": "./js/background.js"
},
"permissions": [
"tabs",
"activeTab",
"scripting",
"notifications",
"storage",
"alarms"
],
"action": {
"default_title": "WalmartExports",
"default_popup": "popup.html",
"default_icon": {
"16": "icon.png",
"32": "icon.png",
"48": "icon.png",
"128": "icon.png"
},
"web_accessible_resources": [
{
"resources": ["src/main.js"],
"matches": ["<all_urls>"]
}
],
"host_permissions": [
"https://seller.walmart.com/*"
],
"content_scripts": [
{
"matches": [
"https://seller.walmart.com/*"
],
"js": [
"dist/bundle.js"
]
}
]
}
\ No newline at end of file
}
},
"icons": {
"16": "icon.png",
"32": "icon.png",
"48": "icon.png",
"128": "icon.png"
},
"web_accessible_resources": [
{
"resources": ["src/main.js"],
"matches": ["<all_urls>"]
}
],
"host_permissions": [
"https://seller.walmart.com/*",
"https://advertising.walmart.com/*",
"https://login.account.wal-mart.com/*",
"https://marketplace.walmartapis.com/*",
"https://walmart.meinuosha.com/*"
],
"content_scripts": [
{
"matches": [
"https://seller.walmart.com/*",
"https://advertising.walmart.com/*",
"https://login.account.wal-mart.com/*",
"https://marketplace.walmartapis.com/*",
"https://walmart.meinuosha.com/*"
],
"js": [
"./js/main.js"
]
}
]
}
{
"$schema": "https://json.schemastore.org/jsconfig",
"type": "module",
"scripts": {
"build": "rollup -c"
"build": "rollup -c && chrome.exe --pack-extension=%cd%/dist --pack-extension-key=%cd%/dist.pem",
"lint": "eslint src/**/*.js"
},
"devDependencies": {
"@eslint/js": "^9.22.0",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-commonjs": "^28.0.2",
"@rollup/plugin-node-resolve": "^16.0.0",
"@rollup/plugin-terser": "^0.4.4",
"rollup": "^4.34.8"
"@types/chrome": "^0.0.306",
"@types/node": "^22.13.10",
"eslint": "^9.22.0",
"globals": "^16.0.0",
"rollup": "^4.34.8",
"rollup-plugin-polyfill-node": "^0.13.0"
},
"dependencies": {
"dayjs": "^1.11.13",
"form-data": "^4.0.2",
"jszip": "^3.10.1",
"xlsx": "^0.18.5"
}
}
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WalmartExports</title>
</head>
<body>
</body>
</html>
\ No newline at end of file
......@@ -2,28 +2,66 @@ import babel from "@rollup/plugin-babel";
import nodeResolve from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs";
import terser from "@rollup/plugin-terser";
import Path from "path";
import fs from "fs";
export default [{
input: "src/main.js",
output: {
file: "dist/app.js",
format: "iife",
name: "G",
},
}, {
input: "src/main.js",
output: {
file: "dist/app.min.js",
format: "iife",
name: "G",
sourcemap: true
},
plugins: [
nodeResolve(),
commonjs(),
babel({
babelHelpers: "bundled",
}),
terser()
]
}]
\ No newline at end of file
const changeVersion = () => {
const version = fs.readFileSync(".version", { encoding: "utf8" }) || "1.0.0";
let versionNumber = parseInt(version.replace(/\./g, ''));
versionNumber += 1;
const newVersion = versionNumber.toString().split('').join('.');
fs.writeFileSync(".version", newVersion);
return newVersion;
}
const changeManifest = () => {
const manifest = JSON.parse(fs.readFileSync("manifest.json", { encoding: "utf8" }));
manifest.version = changeVersion();
fs.writeFileSync("dist/manifest.json", JSON.stringify(manifest));
}
changeManifest();
const inputs = ["src/main.js", "src/popup.js", "src/background.js"];
const conf = [];
const nodeEnv = process.env.NODE_ENV || 'dev';
console.log(`NODE_ENV: ${nodeEnv}`);
inputs.forEach(input => {
const fn = Path.parse(input).name;
if (process.env.NODE_ENV == 'prod') {
conf.push({
input,
output: {
file: `dist/js/${fn}.min.js`,
format: "umd",
name: "G",
sourcemap: true
},
plugins: [
nodeResolve({
browser: true,
}),
commonjs({
include: /node_modules/,
requireReturnsDefault: "auto",
}),
babel({
babelHelpers: "bundled",
}),
terser()
]
});
}
conf.push({
input,
output: {
file: `dist/js/${fn}.js`,
format: "iife",
name: "G",
},
plugins: [
nodeResolve({
browser: true,
}),
commonjs(),
]
});
});
export default conf;
\ No newline at end of file
import { xlsx2csv } from "./xlsx.js";
import { Plan, createZip } from "./util.js";
import { uploadFile } from "./upload.js";
import { TABLE } from "./conf.js";
const checkOrigin = (u1, u2) => {
if (!u1 || !u2) return false;
return u1.startsWith(new URL(u2).origin);
}
const sendTabMsg = (msg, callback) => {
const uri = msg.data.uri;
chrome.tabs.query({}, (tabs) => {
const tab = tabs.filter(x => checkOrigin(x.url, uri))[0];
if (!tab) {
console.error(`tab not found, by ${JSON.stringify(msg)}`);
return;
}
console.log(`send ${JSON.stringify(msg)} to ${tab.url}`);
chrome.tabs.sendMessage(tab.id, msg, (response) => {
callback ?? callback(response);
});
});
}
const tabCache = new Map();
chrome.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => {
if (changeInfo.status === "complete" && tab.url) {
const targets = [
'https://login.account.wal-mart.com/authorize',
'https://seller.walmart.com/home'
];
const url = tab.url.split("?")[0];
if (!targets.includes(url)) return;
const oldUrl = tabCache.get(tabId);
if (oldUrl && oldUrl === url) return
console.log(`trigger ${url}`);
chrome.tabs.sendMessage(tabId, { type: "jump" });
tabCache.set(tabId, url);
}
});
chrome.tabs.onRemoved.addListener((tabId) => {
tabCache.delete(tabId);
});
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
(async () => {
if (msg.type === "run") {
startTask();
sendTabMsg(msg, sendResponse);
} else if (msg.type === "uploadLink") {
try {
let { url, fn } = msg.data;
console.log(`GET ${url}`);
let response = await fetch(url);
console.log(response);
let blob = await response.blob();
const csv = xlsx2csv(await blob.arrayBuffer(), { type: "array" });
if (!csv.includes("No data found")) {
fn = fn.replace(/\.\w+$/g, ".csv");
const zip = await createZip([csv], [fn]);
fn = fn.replace(/\.\w+$/g, ".zip");
const form = new FormData();
form.append("zipfile", zip, fn);
await uploadFile(fn, form);
// downloadFile(fn, zip);
}
const { taskCount = 0 } = await chrome.storage.local.get(["taskCount"]);
chrome.storage.local.set({ taskCount: taskCount + 1 });
sendResponse({ status: "ok" });
} catch (err) {
sendResponse({ status: "error", error: err.message });
}
}
})();
return true;
});
let taskInterval = null;
function startTask() {
// chrome.storage.local.get(['isRunning', 'logs', 'taskCount', 'taskLen']).then(console.log);
// chrome.storage.local.set({ isRunning: true, logs: [], taskLen: 0, taskCount: 0 });
chrome.storage.local.set({ isRunning: true, logs: [] });
if (taskInterval) return;
taskInterval = setInterval(() => {
// 推送更新
chrome.storage.local.get(['taskNum', 'logs'], ({logs = [], taskNum = 0}) => {
const ackLen = logs.filter(x => x.includes("完成")).length;
if (ackLen === taskNum) {
clearInterval(taskInterval);
chrome.storage.local.set({ isRunning: false });
}
chrome.runtime.sendMessage({
type: 'progress', logs
});
});
// chrome.storage.local.get(['isRunning', 'logs', 'taskCount', 'taskLen'], (
// { isRunning = true, logs = [], taskCount = 0, taskLen = 0 }
// ) => {
// const progress = Math.ceil(taskCount / (taskLen || 1) * 100);
// const logEntry = {
// time: new Date().toLocaleTimeString(),
// message: `进度更新: ${progress}%`
// };
// let newLogs = [...logs, logEntry];
// newLogs = newLogs.slice(Math.max(newLogs.length - 30, 0)); // 限制日志数量
// chrome.storage.local.set({ logs: newLogs });
// // 推送更新
// chrome.runtime.sendMessage({
// type: 'progress',
// logs: newLogs
// });
// if (progress >= 100 || !isRunning) {
// clearInterval(taskInterval);
// chrome.storage.local.set({ isRunning: false });
// }
// });
}, 1000);
}
const initTimedTask = () => {
for (let [key, { uri, params }] of Object.entries(TABLE)) {
let plan = new Plan(null, params);
let period = plan.get()?.period;
const when = plan.next().dt.getTime();
chrome.alarms.create(key, { when });
console.log(`[timedTask] start - uri: ${uri} period: ${period} next: ${when}`);
}
}
chrome.alarms.onAlarm.addListener((alarm) => {
const { uri, params } = TABLE[alarm.name];
let plan = new Plan(null, params);
let period = plan.get()?.period;
const when = plan.next().dt.getTime();
chrome.alarms.create(alarm.name, { when });
console.log(`[timedTask] start - uri: ${uri} period: ${period} next: ${when}`);
startTask();
sendTabMsg({ type: "run", data: { uri, period } });
});
// 初始化
initTimedTask();
// chrome.alarms.clearAll();
export const TABLE = {
WFS: {
name: "WFS",
uri: "https://seller.walmart.com/aurora/v1/wfs/reports/",
params: [
["11 22:", ["01", "10"]],
["21 22:", ['11', '20']],
["01 22:", ['21', 0]],
["05 22:", ['01', 0]]
]
},
PAYMENT: {
name: "放款表",
uri: "https://seller.walmart.com/aurora/v1/",
params: [
["05 22:", ['01', 0]]
]
},
ORDER: {
name: "订单表",
uri: "https://seller.walmart.com/aurora/v1/reports/",
params: [
["12 22:", ["01", "10"]],
["22 22:", ['11', '20']],
["02 22:", ['21', 0]],
["05 22:", ['01', 0]]
]
},
ADVERT: {
name: "广告表",
uri: "https://advertising.walmart.com/sp/api/",
params: [
["12 22:", ["01", "10"]],
["22 22:", ['11', '20']],
["02 22:", ['21', 0]],
["05 22:", ['01', 0]]
]
}
}
import { getValue } from "./util.js";
export const rrHeaders = () => {
const rr = {
"accept": "application/json",
"content-type": "application/json",
"wm_aurora.locale": "en-US",
"wm_aurora.market": "US",
"wm_aurora.timezone": "-08:00",
"wm_aurora.tmxevent": "LOGIN",
"wm_svc.name": "API",
"x-xsrf-token": getValue("XSRF-TOKEN")
};
rr["wm_aurora.tmxid"] = JSON.parse(window.localStorage.getItem("TMX_DATA")).LOGIN.tmxId;
rr["WM_QOS.CORRELATION_ID"] = ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (function (e) {
return (e ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> e / 4).toString(16);
}));
return rr;
}
export const rHeaders = Object.freeze({
"accept": "application/json",
"wm_aurora.market": "US",
});
export const gHeaders = Object.freeze({
"Accept-Encoding": "gzip, deflate, br",
"wm_aurora.market": "US",
});
export const headers = Object.freeze({
"wm_aurora.market": "US",
});
import { sleep } from "./util.js";
import { createTasks, FormURI } from "./base.js";
import { sleep, xpath } from "./util.js";
import { createTasks } from "./base.js";
import { uploadFile } from "./upload.js";
import { TABLE } from "./conf.js";
const TEST_FLAG = true;
async function run(sn) {
let tasks = await createTasks(FormURI.Order, "2025-02-01", "2025-02-10");
tasks = typeof sn == 'number' ? [tasks.at(sn)] : tasks;
let moment = 0;
tasks.forEach((task) => {
sleep(moment).then(() => task.send());
moment += 2000;
});
async function webJump() {
if (location.hostname === 'login.account.wal-mart.com') {
document.querySelector("button").click();
} else if (location.hostname === 'seller.walmart.com') {
await sleep(5000);
xpath(
'//*[@id="header"]/div[1]/div[1]/div/div[3]/a'
).click();
}
};
// 存在数据竞态问题
// const addTaskCount = async () => {
// const { taskCount = 0 } = await chrome.storage.local.get(["taskCount"]);
// chrome.storage.local.set({ taskCount: taskCount + 1 });
// }
const addLog = async (message) => {
const logEntry = {
time: new Date().toLocaleTimeString(),
message
};
const logs = await chrome.storage.local.get(["logs"]);
let newLogs = [...logs, logEntry];
newLogs = newLogs.slice(Math.max(newLogs.length - 30, 0)); // 限制日志数量
chrome.storage.local.set({ logs: newLogs });
}
if (TEST_FLAG) {
run();
async function run(options) {
const name = Object.values(TABLE).find(x => x.uri === options.uri).name;
let tasks = await createTasks(options.uri, options.period);
tasks = options.sn ? [tasks.at(options.sn)] : tasks;
let moment = 0, idx = 0, len = tasks.length;
// const { taskLen = 0 } = await chrome.storage.local.get([`taskLen`]);
// chrome.storage.local.set({ taskLen: taskLen + len });
const { taskNum = 0 } = await chrome.storage.local.get([`taskNum`]);
chrome.storage.local.set({ taskNum: taskNum + 1 });
for (const task of tasks) {
const pf = `${++idx + 1}/${len}`;
await addLog(`${name} 运行中 ${pf}`);
console.log(`${pf} start: ${JSON.stringify(task)}`);
let data = await task.send();
if (data === false) return;
if (data === true) {
// await addTaskCount();
return;
}
let fn = task.getFileName();
const isJson = fn.endsWith('.json');
if (isJson) {
const headers = { 'Content-Type': 'application/json' }
uploadFile(fn, data, { isJson, headers });
// const blob = new Blob([data], { "type": "application/json" });
// downloadFile(fn, blob);
} else {
fn = fn.replace(/\.\w+$/g, ".zip");
const form = new FormData();
form.append("zipfile", data, fn);
uploadFile(fn, form);
// downloadFile(fn, data);
}
// await addTaskCount();
console.log(`${pf} end: ${fn}`);
await sleep(moment);
moment += 3000; // 3s
}
await addLog(`插件运行完成`);
}
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
(async () => {
try {
if (msg.type === "jump") {
await webJump();
} else if (msg.type === "run") {
await run(msg.data); // 默认
}
sendResponse({ status: "ok" });
} catch (err) {
sendResponse({ status: "error", error: err.message });
}
})();
return true;
});
import { TABLE } from "./conf.js";
import { Plan } from "./util.js";
import { getTimeDiff } from "./timezone.js";
function showModal() {
document.querySelector('.modal').style.display = 'flex';
}
function renderLogs(logs) {
const container = document.getElementById('logContainer');
container.innerHTML = logs
.map(log => `<div class="log-item">[${log.time}] ${log.message}</div>`)
.join('');
container.scrollTop = container.scrollHeight;
}
function onclick(e) {
e.preventDefault();
showModal();
const btn = e.currentTarget;
disableButton(btn);
const boxes = document.querySelectorAll("input[name='option']:checked");
boxes.forEach((box) => {
const { uri, params } = TABLE[box.value.toUpperCase()];
// const row = box.closest(".form-row");
// const fromInput = row.querySelector("input[name='fromDate']");
// const toInput = row.querySelector("input[name='toDate']");
// const period = [fromInput.value, toInput.value];
// const period = ['2025-01-01', '2025-02-01'];
const period = new Plan(null, params).get()?.period;
const diff = getTimeDiff(period[1], 1);
let select = true;
if (diff < 0 && diff > -12) {
select = confirm("时间未到, 是否确认继续");
}
if (!select) return;
chrome.storage.local.get(['isRunning'], ({ isRunning }) => {
if (!isRunning) {
chrome.runtime.sendMessage({ type: "run", data: { period, uri } });
}
});
});
}
const enableButton = (btn) => {
btn.disabled = false;
btn.style.backgroundColor = "#007bff";
btn.style.cursor = "pointer";
}
const disableButton = (btn) => {
btn.disabled = true;
btn.style.backgroundColor = "gray";
btn.style.cursor = "default";
}
window.onload = function () {
document.querySelector('.close').addEventListener('click', () => {
document.querySelector('.modal').style.display = 'none';
});
const btn = document.querySelector(".confirm");
chrome.storage.local.get(['isRunning', 'logs'], ({ isRunning, logs = [] }) => {
if (isRunning) {
showModal();
disableButton(btn);
} else {
enableButton(btn);
}
renderLogs(logs);
});
document.querySelector('.cancel').addEventListener('click', () => {
chrome.storage.local.set({ isRunning: false, logs: [], taskCount: 0, taskLen: 0 });
enableButton(btn);
});
chrome.runtime.onMessage.addListener((msg) => {
if (msg.type === 'progress') {
renderLogs(msg.logs);
}
});
// 到点触发
btn.addEventListener("click", onclick);
}
import dayjs from "dayjs";
import utc from "dayjs/plugin/utc.js";
import timezone from "dayjs/plugin/timezone.js";
dayjs.extend(utc);
dayjs.extend(timezone);
export function getTimeDiff(input, offset = 0) {
const time = dayjs.tz(input, "YYYY-MM-DD", "America/Los_Angeles");
time.add(offset, "day");
if (!time.isValid()) throw new Error("无效时间");
return (dayjs().valueOf() - time.valueOf()) / 1000 / 60 / 60; // h
}
async function upload(url, body, headers) {
console.log(`上传 ${url}: ${body}`);
let response = await fetch(url, {
method: "POST", body, headers
});
console.log(response);
try {
let data = await response.json();
console.log(data);
if (data.status === "OK") return true;
} catch (e) {
console.error(e.message);
}
return false;
}
export async function checkLog(fn, insert = false) {
const url = "https://walmart.meinuosha.com/index.php/index/index/Getspluginexporttablerecords?accessvalue=Walmart2025PY0307";
let response = await fetch(url, {
method: "POST",
body: JSON.stringify({
Recordparameter: insert ? "interposition" : "inquire",
Derivedtablename: fn
}),
headers: {
'Content-Type': 'application/json'
}
});
let data = await response.json();
console.log(`${fn} ${JSON.stringify(data)}`);
return data.status === "NO";
}
export async function uploadFile(fn, data, options = {}) {
const jsonURL = "https://walmart.meinuosha.com/index.php/index/index/transmitexportthispagedata?accessvalue=Walmart2025PY0307";
const fileURL = "https://walmart.meinuosha.com/index.php/index/index/Loanschedule?accessvalue=Walmart2025PY0307";
const linkURL = "https://walmart.meinuosha.com/index.php/index/index/url_download_list?accessvalue=Walmart2025PY0307";
const url = options.isJson ? jsonURL : options.isLink ? linkURL : fileURL;
if (await checkLog(fn)) {
if (await upload(url, data, options.headers)) {
await checkLog(fn, true);
}
}
}
import JSZip from "jszip";
const MONTHS = [
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
];
export function sleep(ms) {
ms += 1000 * Math.random(); // 1s+ delay
return new Promise((resolve) => setTimeout(resolve, ms));
}
export function getValue(key, str, sep = ';') {
......@@ -27,6 +30,9 @@ const replacer = (value) => {
}
return value;
}
export function xpath(str) {
return document.evaluate(str, document).iterateNext();
}
export function JSON2CSV(json) {
const cols = Object.keys(json[0]);
let csv = cols.join(',') + '\r\n';
......@@ -36,9 +42,31 @@ export function JSON2CSV(json) {
});
return csv;
}
export async function createZip(blobs, fileNames) {
if (blobs.length !== fileNames.length) {
throw new Error("数组长度不一致");
}
const zip = new JSZip();
blobs.forEach((blob, idx) => {
zip.file(fileNames[idx], blob);
});
return await zip.generateAsync({
type: "blob",
compressionOptions: { level: 9 }
});
}
export async function renameZipFile(blob, newFileName) {
const zip = await JSZip.loadAsync(blob);
const oldFn = Object.keys(zip.files)[0];
const data = await zip.file(oldFn).async("uint8array");
zip.remove(oldFn);
zip.file(newFileName, data);
return await zip.generateAsync({
type: "blob",
compressionOptions: { level: 9 }
});
}
export function downloadFile(fn, blob) {
// const url = `data:text/csv;charset=utf8,\ufeff${encodeURIComponent(data)}`;
// const blob = new Blob([`\ufeff${data}`], { type: "text/csv;charset=utf8" });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
......@@ -47,17 +75,74 @@ export function downloadFile(fn, blob) {
a.remove();
URL.revokeObjectURL(url);
}
export function uploadFile(fn, data) {
const url = ''; // ?
fetch(url, {
method: "POST",
body: {
data,
fileName: fn
},
})
.then((response) => console.log(`上传成功: ${fn}, ${response}`))
.catch((reason) => console.error(`上传失败: ${fn}, by ${reason}`));
export class Plan {
constructor(dt, params) {
this.dt = dt = dt && new Date(dt) || new Date();
this.handler = {
order: [], // 逆序
get(obj, prop) {
if (prop in obj) return obj[prop];
const idx = this.order.find(x => prop - x >= 0);
return obj[idx];
},
set(obj, prop, value) {
const result = Reflect.set(...arguments);
this.order = Object.keys(obj).sort((a, b) => b - a);
let [x1, x2] = value.period;
let year = dt.getFullYear();
let month = dt.getMonth();
if (dt.getDate() < parseInt(x2) || x2 === 0) {
month = month == 0 ? 11 : month - 1;
year = month == 0 ? year - 1 : year;
}
const endDate = new Date(year, month, 0).getDate() + '';
x2 = x2 === 0 ? endDate : x2;
month = (month + 1 + '').padStart(2, '0');
value.period = [
`${year}-${month}-${x1}`,
`${year}-${month}-${x2}`
];
return result;
}
}
this.table = new Proxy({}, this.handler);
this.params = [];
params?.forEach(args => this._addParam(...args));
}
get(day = null) {
return day ? this.table[day] : this.table[this.dt.getDate()];
}
next() {
let year = this.dt.getFullYear();
let month = this.dt.getMonth() + 1;
const order = this.handler.order;
const idx = (
order.indexOf(this.get().day) - 1 + order.length // 向上
) % order.length;
if (idx == order.length - 1) {
month = month == 12 ? 1 : month + 1;
year = month == 12 ? year + 1 : year;
}
const info = this.table[order[idx]];
return new Plan(new Date(`${year}-${month}-${info.day} ${info.time}`), this.params);
}
_addParam(execTime, period) {
// MM-dd HH:mm:ss
const dt = new Date(`01-${execTime}`);
this.table[dt.getDate()] = {
period,
day: dt.getDate() + '',
time: `${dt.toTimeString().substring(0, 8)}`,
};
this.params.push(arguments);
}
}
export function fmt0(d1, diff) {
const dt1 = new Date(d1);
dt1.setDate(d1.getDate() + diff);
const str = dt1.toISOString();
return str.slice(0, str.indexOf('T'));
}
export function fmt1(d1) {
const dt1 = new Date(d1);
......@@ -72,6 +157,11 @@ export function fmt3(d1) {
d1 = d1.replaceAll('-', '');
return d1.slice(4) + d1.slice(0, 4);
}
export function fmt4(d1) {
const dt1 = new Date(d1);
const date = dt1.getDate().toString().padStart(2, '0');
return `${dt1.getMonth() + 1}.${date}`;
}
export function ffmt1(d1, d2) {
const dt1 = new Date(d1);
const dt2 = new Date(d2);
......
import * as xlsx from "xlsx";
export function xlsx2csv(data, options) {
const book = xlsx.read(data, options);
const sheet = book.Sheets[book.SheetNames[0]];
const csv = xlsx.utils.sheet_to_csv(sheet)
return csv;
}
[[tool.uv.index]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
default = true
import requests
import json
headers = {
"authority": "seller.walmart.com",
"accept": "application/json",
"accept-language": "zh-CN,zh;q=0.9",
"content-type": "application/json",
"origin": "https://seller.walmart.com",
"referer": "https://seller.walmart.com/orders/manage-orders?orderGroups=All",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"Pragma": "no-cache",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
"sec-ch-ua": "\"Chromium\";v=\"118\", \"Google Chrome\";v=\"118\", \"Not=A?Brand\";v=\"99\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Windows\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
"wm_aurora.locale": "en-US",
"wm_aurora.market": "US",
"wm_aurora.timezone": "-08:00",
"wm_aurora.tmxevent": "LOGIN",
"wm_aurora.tmxid": "vn69bwdaeabumw_i2lachl3c2nef-_yze7a1",
"wm_qos.correlation_id": "35572f2f-dd03-4450-a9a1-fdde70ebd3f4",
"wm_svc.name": "API",
"x-xsrf-token": "aa71d953c3b0dba3f30c18b523f565d55dc8ceea47e529bdc291d5bec71a1780"
"sec-ch-ua-platform": "\"Windows\""
}
cookies = {
"vtc": "eoOI4d3iNX05_z5UzKUFL0",
"TS0194e2a6": "01c5a4e2f9216f40ab23fb6ea75116986e8e40ee3e753eff233455fb59ceed474c29820b01ce9a60e82fb7f3b5ce3d873b53d235fd",
"TS011714b6": "01c5a4e2f9216f40ab23fb6ea75116986e8e40ee3e753eff233455fb59ceed474c29820b01ce9a60e82fb7f3b5ce3d873b53d235fd",
"XSRF-T2_MART": "US",
"_auth": "MTAyOTYyMDE44s/dK5SjffV4NFYBHwXAYdf7fowbQMxi/sekxkoojDAFvLInAueipbLaayshq/oE0m7pAl6tjfRutM6x1y3fq0iczhE3eZLB+mqAX3wP6R8ylqRdv3lzJC3CZ4gZyQvZ/z17NuP/cUbgGcA/2mdWr+jqZcc1mwrl3Dk1tUjq0mNvgCN1P5vyVcaA3y4pdG/Ry4pYDqhCKojR30JMYUyqv3WXa8PLY3Qx1eDvqRu5/ebaG42uOA92ynUyMEYYNGY8jaSE5ElcV2HHAOuNeUoAZjxnbRtfyanLF89tf0/W/mncKMVjc0h4IWCgeE2p+5icHo/pfkPYuEdSOYqdcaOtOlMHT9XE74SfVuE58Y+HidXYStryyZPuCyS+2o5lbBdPbnZmSjB0E4oMPQMkeJVnwjt0sOVPDkHKdQ2+ZQv+E8mIQ61FuRdBQLhowDo9xCOD",
"JSESSIONID": "f8e041aa-5c2d-49f1-a060-82707e45d93b",
"XSRF-TOKEN": "aa71d953c3b0dba3f30c18b523f565d55dc8ceea47e529bdc291d5bec71a1780",
"SC_EXP_FLAVOUR": "aurora",
"scid": "10002545660",
"SC_SELLER_FLAVOUR": "allen",
"isSeller": "true",
"SC_GLOBAL_NAV_ENABLED": "true",
"SC_MULTIBOX": "true",
"SC_TAX_PROFILE_FLAVOUR": "aurora",
"SC_INSURANCE_FLAVOUR": "aurora",
"SC_PAYMENT_INFO_FLAVOUR": "aurora",
"appstore.seller": "true",
"SC_SELLER_SETTINGS": "aurora",
"isbm.enabled.seller": "true",
"SC_WFS_FLAVOUR": "aurora",
"IS_MLMQ": "aurora",
"ORDERSV2_REVAMP_SELLERS": "aurora",
"sc.manage.items.rollout": "true",
"sc.activity.feeds.rollout": "true",
"sc.pt.spec.rollout": "true",
"sc.ioh.rollout": "true",
"sc.wfs.multiBox.rollout": "true",
"sc.items.aurora.migration": "true",
"SC_RATINGS_REVIEWS": "aurora",
"SC_ANALYTICS_OVERVIEW_WIDGET": "true",
"SHOW_SALES_BY_DEPARTMENT_WIDGET": "true",
"pxcts": "22c525dc-f00e-11ef-9b4a-4d039f64f67f",
"_pxvid": "22c519a0-f00e-11ef-9b4a-b98748f7bdc6",
"_gcl_au": "1.1.1151528653.1740112911",
"hubspotutk": "10d191df307906711e90e07a8938f14e",
"__hssrc": "1",
"QuantumMetricUserID": "5144e6e94f4fa4d356f2afa9f7a20bb6",
"TS015a1969": "019f81911db180d6d5f4f2af2fe76b861a9a5523a31745d303ab54ce04c91311b799bf562ad022e7da084034cdb0ac79adeb151ef3",
"_px3": "b55322a25048af8e7437f436257006e0ff263176a9da673ce54e68a1f611b1f8:oJG59NZKwOJA85UC42Im3DuMrwAk/oRzIQeo3UK6B/SoUHVMx3JdAXZb75f3j9TlrpNCxMlgvdOJ5RZmG3Un2w==:1000:gnHjrnAHSHoqMUCZf/b39TuoSCFbK0t9ymgVePLXkIm80UfTl0d+QmJSgc5UPcIqWtNAq2gUj41d7d8+qwWv1cGRRZ4hMnSXbByZOFRmpYewatmoZ5KlF8VdLzz2LeakLEmlYjnXyaDg7uD8DiNdRYtM47XdiHdVrc0KHgdNpN3vo8Bhk1xvDPw5yLwGzxKa8e6pN5y2RhMG8C1myTNkUHuAWBde1u4hcuegr3XsmGY=",
"mp_706c95f0b1efdbcfcce0f666821c2237_mixpanel": "%7B%22distinct_id%22%3A%20%22%24device%3A19526f537568a8-02c94e61d98269-26031151-1fa400-19526f537568a8%22%2C%22%24device_id%22%3A%20%2219526f537568a8-02c94e61d98269-26031151-1fa400-19526f537568a8%22%2C%22%24initial_referrer%22%3A%20%22https%3A%2F%2Flogin.account.wal-mart.com%2F%22%2C%22%24initial_referring_domain%22%3A%20%22login.account.wal-mart.com%22%2C%22__mps%22%3A%20%7B%7D%2C%22__mpso%22%3A%20%7B%22%24initial_referrer%22%3A%20%22https%3A%2F%2Flogin.account.wal-mart.com%2F%22%2C%22%24initial_referring_domain%22%3A%20%22login.account.wal-mart.com%22%7D%2C%22__mpus%22%3A%20%7B%7D%2C%22__mpa%22%3A%20%7B%7D%2C%22__mpu%22%3A%20%7B%7D%2C%22__mpr%22%3A%20%5B%5D%2C%22__mpap%22%3A%20%5B%5D%7D",
"ak_bmsc": "7FDBAA3D96AB94FCEF621B55ECD088C6~000000000000000000000000000000~YAAQJ/EPF4V2dhqVAQAAWneNJxph/DdrGilMksMs/9QM31rRA8vSkJfUkuwQEw/kwQr38I22qXDMjSlEWMkyoQrHqCF+fxAMO7TyoRkmfIElnEui9AqZSfYKoxcylfBZNo1Cvkj2gtG1mjaW3svHV7ix9jK0WAHQgzXUykAR6e4PnokazwmAWSvW3MEcZSlCrDNrYl61bj6W1iKkC9YJ9AkOI/vi6so1yIChJk2skib4pvVXk7QLPt/0A53rHKDMFG2iumV8FV9B37SUuAjpsAB1+2YAm+U+ttfbBQIJq+QUlc8enAjo9hVthow0glJEf5wD+ZaamudYCnORXwsczbWExTOR2m4qh8EzIZnGpN3KrJD6qnxW8Ob8o7r3x9E3Ii98yBkuqmRstLk=",
"OptanonConsent": "isGpcEnabled=0&datestamp=Fri+Feb+21+2025+16%3A09%3A01+GMT%2B0800+(%E4%B8%AD%E5%9B%BD%E6%A0%87%E5%87%86%E6%97%B6%E9%97%B4)&version=202408.1.0&browserGpcFlag=0&isIABGlobal=false&hosts=&consentId=eb7ba610-87bd-4528-8132-ae77bbc49b09&interactionCount=1&isAnonUser=1&landingPath=NotLandingPage&groups=C0007%3A1%2CC0008%3A1%2CC0009%3A1%2CC0010%3A1&AwaitingReconsent=false&geolocation=CN%3BGD",
"OptanonAlertBoxClosed": "2025-02-21T08:09:01.049Z",
"__hstc": "195562739.10d191df307906711e90e07a8938f14e.1740112929843.1740118745664.1740125347091.4",
"QuantumMetricSessionID": "f9f306d4e929cb3700e94f0a072b2861",
"TS01817376": "01c5a4e2f9c1a6d129c120bb7986b8d553d53e6f689c8fa63f253768fd3bc7a16a8f8082e9723546639931da058ce98f550dfa6160",
"TSe809d73e027": "08cb8c7367ab2000040f38398513604f685537475ac784eed3c4f985e0ef5da596be4cdbad8232550829840af01130006415c7094da1d6b6087c8b11bdcb3fe06250b68b563213e124a5da29d814a0b59ec36e946dc06b26b071051e8ada25cb",
"TS24c05192027": "0800b316f6ab20009a0b71d1380323b79612e0bef09bd834b332a05228734c6e8e72d9921dd29a310887d174d7113000bba3769a5777b0dcc9685a6c6473c30c3f2301a75ce80ff91e5508b63d9b63f35bbc0c394618c8c7ab38d213fec5e718",
"bm_sv": "D51A2B8AAD9B515AFEC13194B6257681~YAAQu6cpFx9Kxf+UAQAA3O3uJxpZnsVkdfi46RdWaq7to15rt75WFQ5JaMMU9JamTYeAADeuLBTAUyIV3QHjs/h6ORt0DLF5duorw/iTsF31WrhSNvb0mYJWSJ9ylK7Bcx2fLWj7TqsvTDlutw+MXot/fX3l6pT/kZltXKtGaiify9buWNh+g4h9tkowiSDb09tUD4wIGJBK5m/dS5yKO4/9UXVlbvfRmoEnxGkJkoGLAdBq4DORlzRiVe5OSLELamU=~1"
"ak_bmsc": "8C5D234DDBC3C5BE5EE5189E38ABB2F2~000000000000000000000000000000~YAAQUWgBF5gQcu2UAQAAuEi3NhoIs5WcoaGgSWFfDyuXvhimUZ1tIWzJqAuKiTIQ0fdqkuqX5RpqriQM+hmZHRGHD7198YU87nB3nQo42wjSW8K+vT6liW8LPBa2EmEZJabBKcq9o06ZQsFNUO1wEBQ3mvk6//F3cZrYY5Now2cELIUfwLUnfjkUiSSvq1q/a0iuo16ZBZ3k4dPvdS2m2kYCH3rF9NNN2RBYlsD9msGUXLeOc8DHvfrSTn872APs9egOMDzHcilmqq4LYvuIe01LDo6XSHeJx5aYlKo68Umvm5RjGWrX4H3jJ42BKNfywn3UWQoOyyrnjldVUdL06zMDvpMHe7PJhrbwU2zVJrz/gqRVlGNDite6BVRcybiNnKyeUvs=",
"bm_sv": "0AFB7E09ACE2B35BE403AEBA37713C7B~YAAQk+gyFwVufjWVAQAAkQvfNhoib4bJKFxcgodJZ9uxNCsQLEyxJNIBJrMEir0LB/sWMGFu7dimUNylRaADo9LZt6x2b0pzshf2n/VEvkDUguaublm8SZDVE9St8L3RtPAYQvjrXWeZygy4hqEny2lHCsv1wjT4xL5Mj9Ab4/sAODlJjRySpAVN85nXEjVsgP2hkTZZAUNYvrBfDyMlpw5WTfKaD0YHQBcmots82t5W4toZG5aDLL9HTf8SV5rBi7qhUDI=~1",
"TSaf1ede28027": "0800b316f6ab2000520868722a76791b18fa14a9824dc2976821dad8905d7c43dc43711f69d8e2a00827a65cb61130008d29006038c400850fe9db236c7784ca48072ae069dde9fd37b9610a457640b557818e0b366e7b86cd37b1bb603ea5d4",
"TS89e05807027": "08cb8c7367ab2000364e99bb60e31ce6fa69fe45e90e55cb31514801f124bb981208d52ba8c33d2f08e1c6b4f0113000363d3b498677d1a91f31970e0c58f80322671c2d354b603eeeb08503420532466767670670984eb0fc36ebd15325df8c"
}
url = "https://seller.walmart.com/aurora/v1/reports/reportRequests"
url = "https://marketplace.walmartapis.com/v3/reports/getReport/order-report/PO_Data_100025456602025-02-24-06-10-43-622.xlsx"
params = {
"reportType": "ORDER",
"reportVersion": "v1",
"isDSV": "false",
"bizRole": "MP"
"sv": "2023-08-03",
"se": "2025-02-24T07:54:57Z",
"sr": "b",
"sp": "r",
"sig": "6MXgDrPOxGSSuHfxbpHDa3LiTT2pHLLHAS+Zrh+FyCs="
}
data = {
"rowFilters": [
{
"type": "enumFilter",
"values": [
"All"
],
"columnName": "orderGroups"
},
{
"type": "enumFilter",
"values": [
"Seller"
],
"columnName": "fulfilmentTypes"
},
{
"type": "rangeFilter",
"columnName": "orderDate",
"from": "2025-02-10",
"to": "2025-02-20"
}
],
"additionalInfo": {
"reportSummary": "Seller Fulfilled - Feb 10, 2025 to Feb 20, 2025"
},
"excludeColumns": [
"Order Type",
"Service PO#",
"Service Status",
"Total Service Cost",
"Service Scheduled Date"
]
}
data = json.dumps(data, separators=(',', ':'))
response = requests.post(url, headers=headers, cookies=cookies, params=params, data=data)
response = requests.get(url, headers=headers, cookies=cookies, params=params)
print(response.text)
print(response)
print(response)
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment