已传商品无法获取到商品详情问题修复

This commit is contained in:
wule committed 2025-09-15 15:13:19 +08:00
1 parent 6509233208
commit d50a4e00bb
1 file changed
+212 -50
@@ -589,6 +589,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms
var row = dgvSelectProduct.Rows.Cast<DataGridViewRow>().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<PDDProductInfo>(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)
/// <summary>
/// 新建商品获取商品goodsid和commitid
/// lide/v2/mms/edit/commit/create_new
/// </summary>
/// <param name="shop"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 通过商品goodsid获取commitid
/// glide/v2/mms/edit/commit/create_by_sn
/// </summary>
/// <param name="shop"></param>
/// <param name="prodId"></param>
/// <returns></returns>
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)
/// <summary>
/// 通过catid获取商品类目属性模板参数
/// draco-ms/mms/template/mall
/// </summary>
/// <param name="shop"></param>
/// <param name="catId"></param>
/// <param name="prodId"></param>
/// <param name="commitId"></param>
/// <returns></returns>
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)
/// <summary>
/// 获取关联属性
/// draco-ms/mms/template/property/sub-property/v4
/// </summary>
/// <param name="shop"></param>
/// <param name="catId"></param>
/// <param name="template_pid"></param>
/// <param name="vid"></param>
/// <param name="prodId"></param>
/// <param name="commitId"></param>
/// <returns></returns>
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 = "")
/// <summary>
/// 获取商品详情装修展示参数
/// gorse/mms/goods/decoration/preview
/// </summary>
/// <param name="shop"></param>
/// <param name="prodId"></param>
/// <param name="commitId"></param>
/// <param name="prevewKey"></param>
/// <returns></returns>
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
/// <summary>
/// 获取运费模板
/// express_inf/cost_template/get_list
/// </summary>
/// <param name="shop"></param>
/// <param name="prodId"></param>
/// <returns></returns>
private string GetPddCostTemplate(ShopLoginInfo shop, List<int?> catList, string prodId, string commitId)
private string get_cost_template(ShopLoginInfo shop, List<int?> catList, string prodId, string commitId)
{
if (catList == null)
catList = new List<int?>();
@@ -1378,7 +1513,16 @@ namespace TemuKJD.PDDForms.ProductSelectForms
return result;
}
private string SavePddDecoration(ShopLoginInfo shop,PDDProdDecorationCommitParam decoration, string prodId, string commitId)
/// <summary>
/// 保存商品详情图装修列表
/// gorse/mms/goods/decoration/commit/save
/// </summary>
/// <param name="shop"></param>
/// <param name="decoration"></param>
/// <param name="prodId"></param>
/// <param name="commitId"></param>
/// <returns></returns>
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)
/// <summary>
/// 保存商品详情
/// glide/mms/goodsCommit/action/edit
/// </summary>
/// <param name="shop"></param>
/// <param name="prod"></param>
/// <param name="prodId"></param>
/// <param name="commitId"></param>
/// <returns></returns>
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)
/// <summary>
/// 商品提交
/// glide/v2/mms/edit/commit/submit
/// </summary>
/// <param name="shop"></param>
/// <param name="prod"></param>
/// <param name="prodId"></param>
/// <param name="commitId"></param>
/// <returns></returns>
private string submit_goods_edit(ShopLoginInfo shop, PDDProductUploadParam prod, string prodId, string commitId)
{
var anti = shop.AntiContents.LastOrDefault().ParseToString();
if (shop.AntiContents.Count > 0)