From d50a4e00bb562ea7eed9a72f4e78be2f3b86d7ec Mon Sep 17 00:00:00 2001 From: wule Date: Mon, 15 Sep 2025 15:13:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=B2=E4=BC=A0=E5=95=86=E5=93=81=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E8=8E=B7=E5=8F=96=E5=88=B0=E5=95=86=E5=93=81=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PDDDBProdUserSelectForm.cs | 262 ++++++++++++++---- 1 file changed, 212 insertions(+), 50 deletions(-) diff --git a/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdUserSelectForm.cs b/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdUserSelectForm.cs index fe82b00..043b1ec 100644 --- a/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdUserSelectForm.cs +++ b/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdUserSelectForm.cs @@ -589,6 +589,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms var row = dgvSelectProduct.Rows.Cast().FirstOrDefault(r => r.Cells["colSelectId"]?.Value.ToString() == prod.id.ToString()); + double duration = 0; if (row == null) { Invoke(new Action(() => @@ -624,6 +625,8 @@ namespace TemuKJD.PDDForms.ProductSelectForms continue; } + int sleepTime = 0; + int sleepTimeTotal = 0; var result = ""; try { @@ -646,11 +649,17 @@ namespace TemuKJD.PDDForms.ProductSelectForms loginForm.Show(); this.panel1.SendToBack(); })); - Thread.Sleep(1000); + sleepTime = Randomx.GetId(1000, 2000); + sleepTimeTotal += sleepTime; + Thread.Sleep(sleepTime); } //var prodDetailJson = GetHtml.UrlDecode(kjdDbProd.product_json); - result = UploadProduct(shop, kjdDbProd, prod, row.Cells["colOpResult"]); //将商品上传至草稿箱或直接上传到未发布 + DateTime startTime = DateTime.Now; + result = UploadProduct(shop, kjdDbProd, prod, row.Cells["colOpResult"]); //将商品上传 + DateTime endTime = DateTime.Now; + var timeSpan = endTime - startTime; + duration = timeSpan.TotalSeconds; if (result.Contains("会话已过期")) { @@ -665,7 +674,9 @@ namespace TemuKJD.PDDForms.ProductSelectForms { result = "{\"success\":false,\"status\":\"未上传\",\"errMsg\":\"" + ex.Message + "\"}"; } - Thread.Sleep(200); + sleepTime = Randomx.GetId(200, 300); + sleepTimeTotal += sleepTime; + Thread.Sleep(sleepTime); var error = BaseRegex.GetStringJson(ref result, "errMsg"); if (!result.Contains("\"success\":true") && !result.Contains("上传成功")) @@ -674,7 +685,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms error = result; Invoke(new Action(() => { - row.Cells["colOpResult"].Value = error; + row.Cells["colOpResult"].Value = error + " " + duration.ParseToInt() + "秒"; })); continue; } @@ -701,7 +712,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms Invoke(new Action(() => { string opRst = prod.status == "已上传" ? "已成功上传" : "已上传草稿箱"; - row.Cells["colOpResult"].Value = opRst + "但保存到服务端失败:" + BaseRegex.GetStringJson(ref html, "msg") + (" " + error).Trim(' '); + row.Cells["colOpResult"].Value = opRst + "但保存到服务端失败:" + BaseRegex.GetStringJson(ref html, "msg") + (" " + error).Trim(' ') + " " + duration.ParseToInt() + "秒"; row.Cells["colStatus"].Value = prod.status; })); } @@ -710,7 +721,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms Invoke(new Action(() => { row.Cells["colDraftId"].Value = productDraftId; // 草稿箱id - row.Cells["colOpResult"].Value = prod.status == "已上传" ? "已成功上传" : "已上传草稿箱" + (" " + error).TrimEnd(' '); + row.Cells["colOpResult"].Value = (prod.status == "已上传" ? "已成功上传" : "已上传草稿箱" + (" " + error).TrimEnd(' ')) + " " + duration.ParseToInt() + "秒"; row.Cells["colMsg"].Value = prod.status; })); } @@ -748,11 +759,14 @@ namespace TemuKJD.PDDForms.ProductSelectForms })); } + int sleepTime = 0; + int sleepTimeTotal = 0; + var prodInfo = JsonHelper.DeserializeJsonToObject(dbProd.product_json); var prodParam = new PDDProductUploadParam(); // 发起新建商品 - string create_new_html = CreatePddProdCommitId(shop); + string create_new_html = create_prod_commit_id(shop); if (create_new_html.Contains("\"success\":true")) { prodParam.goods_id = BaseRegex.GetLongJson(ref create_new_html, "goods_id"); @@ -771,7 +785,8 @@ namespace TemuKJD.PDDForms.ProductSelectForms } PDDProductTemplateInfo prodTemplateInfo = null; - string prop_template_html = GetPddCatPropTemplate(shop, prodInfo.detail.cat_id.ParseToString(), prodParam.goods_id.ToString(), prodParam.goods_commit_id); + Thread.Sleep(Randomx.GetId(10, 50)); + string prop_template_html = get_template(shop, prodInfo.detail.cat_id.ParseToString(), prodParam.goods_id.ToString(), prodParam.goods_commit_id); if (prop_template_html.Contains("\"success\":true")) { try @@ -797,7 +812,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms return "上传失败 " + error; } - string decoration_preview_html = GetPddDecorationPreview(shop, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id); + string decoration_preview_html = preview_goods_decoration(shop, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id); if (decoration_preview_html.Contains("\"success\":true")) { prodParam.decorationPreview = BaseRegex.GetStringJson(ref decoration_preview_html, "preview_url"); @@ -810,7 +825,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms return "上传失败 " + error; } - string cost_template_html = GetPddCostTemplate(shop, prodInfo.detail.cat_ids, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id); + string cost_template_html = get_cost_template(shop, prodInfo.detail.cat_ids, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id); if (cost_template_html.Contains("\"success\":true")) { prodParam.cost_template_id = BaseRegex.GetStringJson(ref cost_template_html, "costTemplateId").ParseToLong(); @@ -887,14 +902,30 @@ namespace TemuKJD.PDDForms.ProductSelectForms content = (propInfo.values.FirstOrDefault()?.value).ParseToString(), }; - string prop_sub_template_html = GetPddSubCatPropTemplate(shop, prodInfo.detail.cat_id.ParseToString(), + sleepTime = Randomx.GetId(1000, 5000); + sleepTimeTotal += sleepTime; + Thread.Sleep(sleepTime); + var rand = Randomx.GetId(10); + if (rand <= 2) + { + sleepTime = Randomx.GetId(1000, 5000); + sleepTimeTotal += sleepTime; + Thread.Sleep(sleepTime); + } + if (rand <= 1) + { + sleepTime = Randomx.GetId(1000, 5000); + sleepTimeTotal += sleepTime; + Thread.Sleep(sleepTime); + } + + string prop_sub_template_html = get_sub_property_template(shop, prodInfo.detail.cat_id.ParseToString(), prop.template_pid.ParseToString(), prop.vid.ParseToString(), prodParam.goods_id.ToString(), prodParam.goods_commit_id); if (prop_sub_template_html.Contains("\"success\":true")) { //template_module_vos try { - Thread.Sleep(Randomx.GetId(1000, 1500)); prop_sub_template_html = GetHtml.Unicode2String(prop_sub_template_html); JObject prop_sub_template_obj = JObject.Parse(prop_sub_template_html); string prop_sub_template_json = JsonHelper.SerializeObject(prop_sub_template_obj["result"]["template_module_vos"]); @@ -1121,7 +1152,37 @@ namespace TemuKJD.PDDForms.ProductSelectForms } decorationParam.decoration_floor_list.Add(floor_param); } - Thread.Sleep(Randomx.GetId(1500, 5500)); + + sleepTime = Randomx.GetId(3000, 7000); + sleepTimeTotal += sleepTime; + Thread.Sleep(sleepTime); + var rand2 = Randomx.GetId(100); + if (rand2 < 40) + { + sleepTime = Randomx.GetId(1000, 5000); + sleepTimeTotal += sleepTime; + Thread.Sleep(sleepTime); + } + rand2 = Randomx.GetId(100); + if (rand2 < 15) + { + sleepTime = Randomx.GetId(1000, 5000); + sleepTimeTotal += sleepTime; + Thread.Sleep(sleepTime); + } + if (rand2 < 5) + { + sleepTime = Randomx.GetId(5000, 10000); + sleepTimeTotal += sleepTime; + Thread.Sleep(sleepTime); + } + + while (sleepTimeTotal / 1000 < 30) + { + sleepTime = Randomx.GetId(20000); + sleepTimeTotal += sleepTime; + Thread.Sleep(sleepTime); + } //var rst = GetChanceGoods(shop); //var draftId = BaseRegex.GetStringJson(ref rst, "draft_id"); @@ -1133,7 +1194,9 @@ namespace TemuKJD.PDDForms.ProductSelectForms //rst = GetPddDecorationPreview(shop, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id); //rst = GetPddCostTemplate(shop, prodInfo.detail.cat_ids, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id); - var decorationRst = SavePddDecoration(shop, decorationParam, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id); + var decorationRst = ""; + #region 先随即提交一个待 preview_key 的,但是这个不起作用,后面再提交一个不带 preview_key 的才是真实的能查询到的商品详情信息 + decorationRst = save_decoration(shop, decorationParam, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id); if (!decorationRst.Contains("\"success\":true")) { var error = BaseRegex.GetStringJson(ref decorationRst, "error_msg"); @@ -1142,7 +1205,35 @@ namespace TemuKJD.PDDForms.ProductSelectForms return "上传失败 " + error; } - decoration_preview_html = GetPddDecorationPreview(shop, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id, preview_key); + Thread.Sleep(Randomx.GetId(20, 100)); + decoration_preview_html = preview_goods_decoration(shop, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id, preview_key); + //decoration_preview_html = GetPddDecorationPreview(shop, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id); + if (decoration_preview_html.Contains("\"success\":true")) + { + prodParam.decorationPreview = BaseRegex.GetStringJson(ref decoration_preview_html, "preview_url"); + } + else + { + var error = BaseRegex.GetStringJson(ref decoration_preview_html, "error_msg"); + if (string.IsNullOrEmpty(error)) + error = decoration_preview_html; + return "上传失败 " + error; + } + #endregion + + Thread.Sleep(Randomx.GetId(20, 100)); + decorationParam.preview_key = ""; + decorationRst = save_decoration(shop, decorationParam, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id); + if (!decorationRst.Contains("\"success\":true")) + { + var error = BaseRegex.GetStringJson(ref decorationRst, "error_msg"); + if (string.IsNullOrEmpty(error)) + error = decorationRst; + return "上传失败 " + error; + } + + Thread.Sleep(Randomx.GetId(20, 100)); + decoration_preview_html = preview_goods_decoration(shop, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id); //decoration_preview_html = GetPddDecorationPreview(shop, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id); if (decoration_preview_html.Contains("\"success\":true")) { @@ -1156,7 +1247,8 @@ namespace TemuKJD.PDDForms.ProductSelectForms return "上传失败 " + error; } - var saveProdRst = SavePddProduct(shop, prodParam, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id); + Thread.Sleep(Randomx.GetId(20, 100)); + var saveProdRst = save_goods_edit(shop, prodParam, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id); if (!saveProdRst.Contains("\"success\":true")) { var error = BaseRegex.GetStringJson(ref saveProdRst, "error_msg"); @@ -1164,9 +1256,10 @@ namespace TemuKJD.PDDForms.ProductSelectForms error = saveProdRst; return "上传失败 " + error; } - + + Thread.Sleep(Randomx.GetId(20, 100)); //var str = JsonHelper.SerializeObject(prodParam); - var result = SubmitPddProduct(shop, prodParam, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id); + var result = submit_goods_edit(shop, prodParam, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id); if (!result.Contains("\"success\":true")) { var error = BaseRegex.GetStringJson(ref result, "error_msg"); @@ -1219,7 +1312,13 @@ namespace TemuKJD.PDDForms.ProductSelectForms } } - private string CreatePddProdCommitId(ShopLoginInfo shop) + /// + /// 新建商品获取商品goodsid和commitid + /// lide/v2/mms/edit/commit/create_new + /// + /// + /// + private string create_prod_commit_id(ShopLoginInfo shop) { var anti = shop.AntiContents.LastOrDefault().ParseToString(); if (shop.AntiContents.Count > 0) @@ -1241,8 +1340,46 @@ namespace TemuKJD.PDDForms.ProductSelectForms } return result; } + /// + /// 通过商品goodsid获取commitid + /// glide/v2/mms/edit/commit/create_by_sn + /// + /// + /// + /// + private string get_prod_commit_id(ShopLoginInfo shop, string prodId) + { + var anti = shop.AntiContents.LastOrDefault().ParseToString(); + if (shop.AntiContents.Count > 0) + anti = shop.AntiContents[Randomx.GetId(shop.AntiContents.Count)]; + string url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/create_by_sn"; + string body = @"{""goods_id"":" + prodId + "}"; + string refere = "https://mms.pinduoduo.com/goods/goods_list?msfrom=mms_sidenav"; + var result = HttpResponseBLL.PDDPostResponse(shop, url, body, refere, anti); + for (int i = 0; i < 5 && result.Contains("网络繁忙,请不要频繁操作"); i++) + { + shop.AntiContents.Remove(anti); + anti = shop.AntiContents.FirstOrDefault().ParseToString(); + if (shop.AntiContents.Count > 0) + { + Thread.Sleep(Randomx.GetId(300, 500)); + anti = shop.AntiContents[Randomx.GetId(shop.AntiContents.Count)]; + result = HttpResponseBLL.PDDPostResponse(shop, url, body, refere, anti); + } + } + return result; + } - private string GetPddCatPropTemplate(ShopLoginInfo shop, string catId, string prodId, string commitId) + /// + /// 通过catid获取商品类目属性模板参数 + /// draco-ms/mms/template/mall + /// + /// + /// + /// + /// + /// + private string get_template(ShopLoginInfo shop, string catId, string prodId, string commitId) { var anti = shop.AntiContents.LastOrDefault().ParseToString(); if (shop.AntiContents.Count > 0) @@ -1267,7 +1404,18 @@ namespace TemuKJD.PDDForms.ProductSelectForms return result; } - private string GetPddSubCatPropTemplate(ShopLoginInfo shop, string catId, string template_pid, string vid, string prodId, string commitId) + /// + /// 获取关联属性 + /// draco-ms/mms/template/property/sub-property/v4 + /// + /// + /// + /// + /// + /// + /// + /// + private string get_sub_property_template(ShopLoginInfo shop, string catId, string template_pid, string vid, string prodId, string commitId) { var anti = shop.AntiContents.LastOrDefault().ParseToString(); if (shop.AntiContents.Count > 0) @@ -1291,30 +1439,16 @@ namespace TemuKJD.PDDForms.ProductSelectForms return result; } - private string GetPddProdCommitId(ShopLoginInfo shop, string prodId) - { - var anti = shop.AntiContents.LastOrDefault().ParseToString(); - if (shop.AntiContents.Count > 0) - anti = shop.AntiContents[Randomx.GetId(shop.AntiContents.Count)]; - string url = "https://mms.pinduoduo.com/glide/v2/mms/edit/commit/create_by_sn"; - string body = @"{""goods_id"":" + prodId + "}"; - string refere = "https://mms.pinduoduo.com/goods/goods_list?msfrom=mms_sidenav"; - var result = HttpResponseBLL.PDDPostResponse(shop, url, body, refere, anti); - for (int i = 0; i < 5 && result.Contains("网络繁忙,请不要频繁操作"); i++) - { - shop.AntiContents.Remove(anti); - anti = shop.AntiContents.FirstOrDefault().ParseToString(); - if (shop.AntiContents.Count > 0) - { - Thread.Sleep(Randomx.GetId(300, 500)); - anti = shop.AntiContents[Randomx.GetId(shop.AntiContents.Count)]; - result = HttpResponseBLL.PDDPostResponse(shop, url, body, refere, anti); - } - } - return result; - } - - private string GetPddDecorationPreview(ShopLoginInfo shop, string prodId, string commitId, string prevewKey = "") + /// + /// 获取商品详情装修展示参数 + /// gorse/mms/goods/decoration/preview + /// + /// + /// + /// + /// + /// + private string preview_goods_decoration(ShopLoginInfo shop, string prodId, string commitId, string prevewKey = "") { var anti = shop.AntiContents.LastOrDefault().ParseToString(); if (shop.AntiContents.Count > 0) @@ -1332,7 +1466,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms anti = shop.AntiContents.FirstOrDefault().ParseToString(); if (shop.AntiContents.Count > 0) { - Thread.Sleep(Randomx.GetId(300, 500)); + Thread.Sleep(Randomx.GetId(100, 1000)); anti = shop.AntiContents[Randomx.GetId(shop.AntiContents.Count)]; result = HttpResponseBLL.PDDPostResponse(shop, url, body, refere, anti); } @@ -1342,11 +1476,12 @@ namespace TemuKJD.PDDForms.ProductSelectForms /// /// 获取运费模板 + /// express_inf/cost_template/get_list /// /// /// /// - private string GetPddCostTemplate(ShopLoginInfo shop, List catList, string prodId, string commitId) + private string get_cost_template(ShopLoginInfo shop, List catList, string prodId, string commitId) { if (catList == null) catList = new List(); @@ -1378,7 +1513,16 @@ namespace TemuKJD.PDDForms.ProductSelectForms return result; } - private string SavePddDecoration(ShopLoginInfo shop,PDDProdDecorationCommitParam decoration, string prodId, string commitId) + /// + /// 保存商品详情图装修列表 + /// gorse/mms/goods/decoration/commit/save + /// + /// + /// + /// + /// + /// + private string save_decoration(ShopLoginInfo shop,PDDProdDecorationCommitParam decoration, string prodId, string commitId) { var anti = shop.AntiContents.LastOrDefault().ParseToString(); if (shop.AntiContents.Count > 0) @@ -1403,7 +1547,16 @@ namespace TemuKJD.PDDForms.ProductSelectForms return result; } - private string SavePddProduct(ShopLoginInfo shop, PDDProductUploadParam prod, string prodId, string commitId) + /// + /// 保存商品详情 + /// glide/mms/goodsCommit/action/edit + /// + /// + /// + /// + /// + /// + private string save_goods_edit(ShopLoginInfo shop, PDDProductUploadParam prod, string prodId, string commitId) { var anti = shop.AntiContents.LastOrDefault().ParseToString(); if (shop.AntiContents.Count > 0) @@ -1430,7 +1583,16 @@ namespace TemuKJD.PDDForms.ProductSelectForms return result; } - private string SubmitPddProduct(ShopLoginInfo shop, PDDProductUploadParam prod, string prodId, string commitId) + /// + /// 商品提交 + /// glide/v2/mms/edit/commit/submit + /// + /// + /// + /// + /// + /// + private string submit_goods_edit(ShopLoginInfo shop, PDDProductUploadParam prod, string prodId, string commitId) { var anti = shop.AntiContents.LastOrDefault().ParseToString(); if (shop.AntiContents.Count > 0)