Commit 428a3d3f by yexing

[yx] update

parent a4d4f159
log
.vscode
old
.
后台WFS导出各种报告
#### 软件打包
```bash
pip install ordered-set # 加速编译
pip install nuitka
pip install zstandard # onefile时压缩文件
# 打包命令
python -m nuitka --mingw64 --standalone --onefile --jobs=64 --output-dir=out main.py
node_modules
pnpm-lock.yaml
hook
!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
{
"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": {
"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
{
"$schema": "https://json.schemastore.org/jsconfig",
"type": "module",
"scripts": {
"build": "rollup -c"
},
"devDependencies": {
"@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"
}
}
\ 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
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";
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
import { sleep } from "./util.js";
import { createTasks, FormURI } from "./base.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;
});
}
if (TEST_FLAG) {
run();
}
const MONTHS = [
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
];
export function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
export function getValue(key, str, sep = ';') {
const items = (str || document.cookie).split(sep);
for (let item of items) {
item = item.trim();
if (item.startsWith(key)) {
let value = item.substring(key.length + 1, item.length);
console.log(`已找到${key}: ${value}`);
return value;
}
}
console.warn(`未找到${key}`);
return '';
}
const replacer = (value) => {
if (value === null || value === undefined) {
return '';
}
if (typeof value == 'string') {
return `"${value.replace(/"/g, '""')}"`;
}
return value;
}
export function JSON2CSV(json) {
const cols = Object.keys(json[0]);
let csv = cols.join(',') + '\r\n';
json.forEach(row => {
const values = cols.map(col => replacer(row[col]));
csv += values.join(',') + '\r\n';
});
return csv;
}
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;
a.download = fn;
a.click();
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 function fmt1(d1) {
const dt1 = new Date(d1);
return `${MONTHS[dt1.getMonth()]} ${dt1.getDate()},${dt1.getFullYear()}`;
}
export function fmt2(d1) {
const dt1 = new Date(d1);
const date = dt1.getDate().toString().padStart(2, '0');
return `${MONTHS[dt1.getMonth()]} ${date}, ${dt1.getFullYear()}`;
}
export function fmt3(d1) {
d1 = d1.replaceAll('-', '');
return d1.slice(4) + d1.slice(0, 4);
}
export function ffmt1(d1, d2) {
const dt1 = new Date(d1);
const dt2 = new Date(d2);
return `${dt1.getMonth() + 1}${dt1.getDate()}-${dt2.getDate()}`;
}
[[tool.uv.index]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
default = true
This diff is collapsed. Click to expand it.
import os
from tool.log import create_logger
BROWSER_PATH = os.environ.get(
'BROWSER_PATH',
r"D:\SuperBrowser\starter.exe"
)
SOCKET_PORT = os.environ.get(
'SOCKET_PORT',
16851
)
DRIVER_PATH = os.environ.get(
'DRIVER_PATH',
r"D:\webdriver"
)
EXPORT_PATH = os.environ.get(
'EXPORT_PATH',
r"E:\wfs_export_data"
)
USER_INFO = {
"company": "深圳市泰极电子商务有限公司",
"username": "Leshiliuzong",
"password": "leshi2023"
}
WFS_HEADERS = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
"wm_aurora.market": "US",
}
logger = create_logger("wfs_export")
from DrissionPage import Chromium
from DrissionPage.items import MixTab
from .browser import SuperBrowserBridge
from .const import USER_INFO, logger
class WFSExport:
def __init__(self, start_date: str, end_date: str):
self._start_date = start_date
self._end_date = end_date
self.bridge = SuperBrowserBridge(USER_INFO)
self.bridge.init()
self.cookies: dict = None
self.uri: str = None
def download_report(self, names: dict, params: dict, ext: str = 'csv'):
pass
def download_reports(self, tab: MixTab, driver: Chromium):
"""下载报表"""
self.uri = "https://seller.walmart.com/aurora/v1/wfs/reports"
tab.run_js()
self.download_report({
"apiName": "salesReport",
"showName": "Orders"
}, {
"fromDate": self._start_date,
"toDate": self._end_date,
}, 'xlsx')
self.download_report({
"apiName": "salesReport",
"showName": "Orders",
"sheetName": "Multchannel_Fulfillment_Details"
}, {
"fromDate": self._start_date,
"toDate": self._end_date,
"type": "MCS"
}, 'xlsx')
self.download_report({
"apiName": "returnsReport",
"showName": "Customer returns"
}, {
"fromDate": f"{self._start_date}T00:00:00",
"toDate": f"{self._end_date}T23:59:59",
})
self.download_report({
"apiName": "poAudit",
"showName": "Inbound receipts"
}, {
"fromDate": self._start_date,
"toDate": self._end_date,
"gtin": ""
})
self.download_report({
"apiName": "inventoryReconciliation",
"showName": "Inventory reconciliation"
}, {
"fromDate": self._start_date,
"toDate": self._end_date,
})
breakpoint()
# self.download_report({
# "apiName": "inventoryHealthReport",
# "showName": "Inventory health"
# }, None)
self.download_report({
"apiName": "feeDetailReport",
"showName": "Settlement"
}, {
"startDate": self._start_date,
"endDate": self._end_date,
})
self.download_report({
"apiName": "storageFeeReport",
"showName": "Storage"
}, {
"startDate": self._start_date,
"endDate": self._end_date,
})
def download_payments(self, tab: MixTab, driver: Chromium):
breakpoint()
def pass_test(self, tab: MixTab, driver: Chromium):
"""人机检测"""
breakpoint()
logger.info("尝试通过人机检测")
# tab.actions.move_to("#px-captcha").hold().release()
tab.ele("@text()=登录").click()
tab.wait.ele_displayed('@text()=WFS')
cookies = tab.cookies()
logger.debug(f"获取到cookies: {cookies.as_str()}")
self.cookies = cookies.as_dict()
def run(self):
try:
self.bridge.browser_list = [
browser for browser in self.bridge.browser_list
if browser['platform_name'] == '沃尔玛-全球'
]
self.bridge.add_opt(self.pass_test)
self.bridge.add_opt(self.download_reports)
self.bridge.add_opt(self.download_payments)
self.bridge.run(sn=1)
finally:
self.bridge.exit()
\ No newline at end of file
from src.export import WFSExport
def test_WFSExport():
WFSExport("2025-02-01", "2025-02-10").run()
if __name__ == '__main__':
test_WFSExport()
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",
"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"
}
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"
}
url = "https://seller.walmart.com/aurora/v1/reports/reportRequests"
params = {
"reportType": "ORDER",
"reportVersion": "v1",
"isDSV": "false",
"bizRole": "MP"
}
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)
print(response.text)
print(response)
from datetime import datetime
DATEFMT = "%Y-%m-%d"
def fmt1(d1: str, d2: str):
"""x月x-x号"""
dt1 = datetime.strptime(d1, DATEFMT)
dt2 = datetime.strptime(d2, DATEFMT)
return f"{dt1.month}月{dt1.day}-{dt2.day}日"
import logging
import sys
from datetime import datetime
from pathlib import Path
def create_logger(name: str):
today = datetime.now().strftime("%Y-%m-%d")
logger = logging.getLogger(name)
logger.setLevel(logging.INFO)
path = Path(__file__).parent.parent / 'log' / f"{today}_{name}.log"
fhdlr = logging.FileHandler(path, encoding='utf8')
shdlr = logging.StreamHandler(sys.stdout)
fmt = logging.Formatter('%(asctime)s | %(levelname)s | %(module)s:%(funcName)s:%(lineno)d - %(message)s')
fhdlr.setFormatter(fmt)
shdlr.setFormatter(fmt)
logger.addHandler(fhdlr)
logger.addHandler(shdlr)
return logger
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