Files
KJD_WebService/Work/ManageClass/UpPinduoduoProduct.cs
T
2025-06-29 19:38:31 +08:00

939 lines
40 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using AllBase;
using Work.Api;
using Work.CollectClass;
namespace Work.ManageClass
{
public class UpPinduoduoProduct
{
public static string ExpressId = "";
public static int NoReplaceDay = 0;
public static int LimitBuy, GroupCount, LimitBuyTimes, AddPercent, AddPrice, SingleBuyAddPrice, BaseBuy, BaseBuyAdd, ThreadCount;
public static bool RandAddPrice = false, CatSame = false, NoReplaceDays = false;
public static Dictionary<long, DateTime> EditDayTemp = new Dictionary<long, DateTime>();
public static Dictionary<int, Dictionary<string, PinduoduoPropBase>> PinduoduoProp = new Dictionary<int, Dictionary<string, PinduoduoPropBase>>();
public static string Name;
public static List<TaobaoProductBase> ProductTemp = new List<TaobaoProductBase>();
public UpPinduoduoProduct(ShopChatBase shop,string name)
{
Shop = shop;
Name = name;
}
public UpPinduoduoProduct()
{
}
public ShopChatBase Shop = null;
/// <summary>
/// 初始化属性名称
/// </summary>
public void IniProp(int mainCatId, string cookies)
{
if (PinduoduoProp.ContainsKey(mainCatId) && PinduoduoProp[mainCatId].Count > 0)
return;
Dictionary<string, PinduoduoPropBase> props = new Dictionary<string, PinduoduoPropBase>();
PinduoduoApiPropId p = new PinduoduoApiPropId(Shop);
string html = p.Get(mainCatId);
var mm = BaseRegex.GetMatchRegex(ref html,
@"\{""parent_spec_id"":([\d]+),""cat_id"":[\d]+,""parent_spec_name"":""([^""]+?)""");
for (int j = 0; mm != null && j < mm.Count; j++)
{
PinduoduoPropBase pp = new PinduoduoPropBase();
pp.Name = mm[j].Groups[2].Value;
pp.Id = mm[j].Groups[1].Value;
try
{
props.Add(pp.Name, pp);
}
catch
{
}
}
try
{
if (props.Count > 0)
PinduoduoProp.Add(mainCatId, props);
}
catch(Exception ex)
{
}
if (props.Count > 0)
return;
string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/name/list";
string refere = "https://mms.pinduoduo.com/Pdd.html";
string data = "{}";
html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies);
if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁"))
{
Thread.Sleep(30 * 1000);
html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies);
}
if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁"))
{
Thread.Sleep(30 * 1000);
html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies);
}
if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁"))
{
//MessageBox.Show("请不要单个店铺同时开多个软件上传\r\n请调整", "提示");
Thread.Sleep(60 * 1000);
html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies);
}
if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁"))
{
Thread.Sleep(60 * 1000);
html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies);
}
var m = BaseRegex.GetMatchRegex(ref html, @"""value"":""(.*?)""");
for (int j = 0; m != null && j < m.Count; j++)
{
PinduoduoPropBase pp = new PinduoduoPropBase();
pp.Name = m[j].Groups[1].Value;
try
{
if (!props.ContainsKey(pp.Name))
props.Add(pp.Name, pp);
}
catch
{
}
}
try
{
PinduoduoProp.Add(mainCatId, props);
}
catch
{
}
}
/// <summary>
/// 自动给无图片的SKU识别对应的图片
/// </summary>
/// <param name="p"></param>
public void BuildSkuMapProps(ref ProductCollectBase p)
{
if (p.Props.Count == 0)
{
return;
}
string cookies = Shop.Cookies;
int mainCatId = Shop.MainCatId;
int maxImageCut = 0, maxImageCount = 0;
for (int i = 0; i < p.Props.Count; i++)
{
//if (p.Props[i].Values.Count <= 1 && p.from == "淘宝"&&p.cat_id != 3109)//只有一个属性的删除
//{
// p.Props.RemoveAt(i);
// i--;
// continue;
//}
for (int j = 0; j < p.Props[i].Values.Count; j++)
{
if ( p.Props[i].Values[j].name.Contains("代理"))
p.Props[i].Values.RemoveAt(j);
continue;
}
int imageCount = 0;
for (int j = 0; j < p.Props[i].Values.Count; j++)
{
if (!string.IsNullOrEmpty(p.Props[i].Values[j].image))
imageCount++;
}
if (imageCount > maxImageCount)
{
maxImageCount = imageCount;
maxImageCut = i;
}
}
if (p.Props.Count == 0)
{
return;
}
string[] l = @"客服
QQ
定制品
定制
定金
差价
限量
联系
VX
抽奖
留言
明式
四季
特价
专拍
补差
尺寸
价格
客服
运费到付
发货
直接拍
运费险
团购
".Split('\n');
for (int i = 0; i < p.SkuMaps.Count; i++)
{
if (!string.IsNullOrEmpty(p.SkuMaps[i].prop_image))
{
foreach (string s in l)
{
if (string.IsNullOrEmpty(s))
continue;
string m = s.Trim();
BaseRegex.Relpace(ref p.SkuMaps[i].name, m, "");
}
continue;
}
for (int j = 0; j < p.Props[maxImageCut].Values.Count; j++)
{
if (p.SkuMaps[i].name.Contains(p.Props[maxImageCut].Values[j].name))
{
p.SkuMaps[i].prop_image = p.Props[maxImageCut].Values[j].image;
break;
}
}
foreach (string s in l)
{
if (string.IsNullOrEmpty(s))
continue;
string m = s.Trim();
BaseRegex.Relpace(ref p.SkuMaps[i].name, m, "");
}
}
int cut = 0;
for (int i = 0; i < p.SkuMaps.Count; i++)
{
if (!string.IsNullOrEmpty(p.SkuMaps[i].prop_image))
continue;
p.SkuMaps[i].prop_image = p.Images[cut];
cut++;
if (cut >= p.Images.Count)
cut = 0;
}
if (p.Props.Count > 2 && p.from == "淘宝")//两个属性以上,去掉一个
{
int minCount = 100, minCut = -1;
for (int i = 0; i < p.Props.Count; i++)
{
if (p.Props[i].Values.Count < minCount && string.IsNullOrEmpty(p.Props[i].Values[0].image))
{
minCount = p.Props[i].Values.Count;
minCut = i;
}
}
if (minCut > -1)
{
p.Props.RemoveAt(minCut);
}
}
int cutId = 0;
PinduoduoPropBase first = new PinduoduoPropBase();
PinduoduoPropBase second = new PinduoduoPropBase();
if (!PinduoduoProp.ContainsKey(mainCatId))
{
LogSave.Add(Name, "分类初始化异常,请重新打开软件");
return;
}
for (int j = 0; j < p.Props.Count; j++)
{
foreach (KeyValuePair<string, PinduoduoPropBase> pb in PinduoduoProp[mainCatId])
{
if (cutId == 0)
first = pb.Value;
if (cutId == 1)
second = pb.Value;
if (pb.Key == p.Props[j].name)
{
p.Props[j].pinduoduo_name = pb.Key;
if (p.cat_id != 3109 || (p.cat_id == 3109 && p.Props[j].pinduoduo_name != "容量"))
p.Props[j].pinduoduo_id = pb.Value.Id;
break;
}
cutId++;
}
}
for (int j = 0; j < p.Props.Count; j++)
{
foreach (KeyValuePair<string, PinduoduoPropBase> pb in PinduoduoProp[mainCatId])
{
if (string.IsNullOrEmpty(p.Props[j].pinduoduo_name) && p.Props[j].name.Contains(pb.Key))
{
p.Props[j].pinduoduo_name = pb.Key;
if (p.cat_id != 3109||(p.cat_id == 3109 && p.Props[j].pinduoduo_name!="容量"))
p.Props[j].pinduoduo_id = pb.Value.Id;
break;
}
}
}
if (p.Props.Count == 1 && string.IsNullOrEmpty(p.Props[0].pinduoduo_name))
{
p.Props[0].pinduoduo_name = first.Name;
p.Props[0].pinduoduo_id = first.Id;
}
else if (p.Props.Count == 2)
{
if (string.IsNullOrEmpty(p.Props[0].pinduoduo_name) &&
string.IsNullOrEmpty(p.Props[1].pinduoduo_name))
{
p.Props[0].pinduoduo_name = first.Name;
p.Props[0].pinduoduo_id = first.Id;
p.Props[1].pinduoduo_name = second.Name;
p.Props[1].pinduoduo_id = second.Id;
}
else if (string.IsNullOrEmpty(p.Props[0].pinduoduo_name))
{
if (p.Props[1].pinduoduo_name == first.Name)
{
p.Props[0].pinduoduo_name = second.Name;
p.Props[0].pinduoduo_id = second.Id;
}
else
{
p.Props[0].pinduoduo_name = first.Name;
p.Props[0].pinduoduo_id = first.Id;
}
}
else if (string.IsNullOrEmpty(p.Props[1].pinduoduo_name))
{
if (p.Props[0].pinduoduo_name == first.Name)
{
p.Props[1].pinduoduo_name = second.Name;
p.Props[1].pinduoduo_id = second.Id;
}
else
{
p.Props[1].pinduoduo_name = first.Name;
p.Props[1].pinduoduo_id = first.Id;
}
}
}
for (int i = 0; i < p.Props.Count; i++)
{
if (p.cat3 == 3109 && p.Props[i].name.Contains("容量"))
continue;
string refere = "https://mms.pinduoduo.com/Pdd.html";
if (string.IsNullOrEmpty(p.Props[i].pinduoduo_id) || p.Props[i].pinduoduo_id == "0")
{
string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name";
string data = "{\"parent_id\":0,\"name\":\"" + p.Props[i].pinduoduo_name + "\"}";
string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies);
string id = BaseRegex.GetLongJson(ref html, "result").ToString();
if (id == "0")
{
Thread.Sleep(1000);
html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies);
id = BaseRegex.GetLongJson(ref html, "spec_id").ToString();
}
if (id == "0")
{
LogSave.Add(Name, "获取类别ID异常:" + p.Props[i].pinduoduo_name);
continue;
}
if (PinduoduoProp[mainCatId].ContainsKey(p.Props[i].pinduoduo_name))
PinduoduoProp[mainCatId][p.Props[i].pinduoduo_name].Id = id;
p.Props[i].pinduoduo_id = id;
}
for (int j = 0; j < p.Props[i].Values.Count; j++)
{
//if (p.from_site_id == 1 && j > 12 && p.Props[i].Values.Count > 12)//属性元素超过15个的就丢弃
//{
// p.Props[i].Values.RemoveAt(j);
// j--;
// continue;
//}
foreach (string s in l)
{
if (string.IsNullOrEmpty(s))
continue;
string m = s.Trim();
BaseRegex.Relpace(ref p.Props[i].Values[j].name, m, "");
}
if (PinduoduoProp[mainCatId].ContainsKey(p.Props[i].pinduoduo_name) &&
PinduoduoProp[mainCatId][p.Props[i].pinduoduo_name].Values.ContainsKey(p.Props[i].Values[j].name))
{
p.Props[i].Values[j].id =
PinduoduoProp[mainCatId][p.Props[i].pinduoduo_name].Values[p.Props[i].Values[j].name].ToString();
continue;
}
string html, propvid="";
if (BaseClass.UseApiFirst)
{
PinduoduoApiPropId api = new PinduoduoApiPropId(Shop);
html = api.GetPropId(p.Props[i].pinduoduo_id, p.Props[i].Values[j].name);
propvid = BaseRegex.GetStringJson(ref html, "spec_id");
if (string.IsNullOrEmpty(propvid))
{
string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name";
string data = "{\"parent_id\":" + p.Props[i].pinduoduo_id + ",\"name\":\"" +
p.Props[i].Values[j].name + "\"}";
html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies);
propvid = BaseRegex.GetStringJson(ref html, "result");
if (string.IsNullOrEmpty(propvid))
{
Thread.Sleep(1000);
html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies);
propvid = BaseRegex.GetStringJson(ref html, "result");
}
}
}
else
{
string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name";
string data = "{\"parent_id\":" + p.Props[i].pinduoduo_id + ",\"name\":\"" + p.Props[i].Values[j].name + "\"}";
html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies);
if(html.Contains("规格名称字数过长"))
{
string title = p.Props[i].Values[j].name;
if (BaseClass.GetCharLength(title) > 30)
title = BaseClass.SubCharLength(title, 30);
data = "{\"parent_id\":" + p.Props[i].pinduoduo_id + ",\"name\":\"" + title + "\"}";
html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies);
}
propvid = BaseRegex.GetStringJson(ref html, "result");
if (string.IsNullOrEmpty(propvid))
{
Thread.Sleep(1000);
html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies);
propvid = BaseRegex.GetStringJson(ref html, "result");
}
if (string.IsNullOrEmpty(propvid))
{
PinduoduoApiPropId api = new PinduoduoApiPropId(Shop);
html = api.GetPropId(p.Props[i].pinduoduo_id, p.Props[i].Values[j].name);
propvid = BaseRegex.GetStringJson(ref html, "spec_id");
}
}
if (string.IsNullOrEmpty(propvid))
{
p.Props[i].Values.RemoveAt(j);
j--;
continue;
}
p.Props[i].Values[j].id = propvid;
try
{
PinduoduoProp[mainCatId][p.Props[i].pinduoduo_name].Values.Add(p.Props[i].Values[j].name, long.Parse(p.Props[i].Values[j].id));
}
catch
{
}
}
}
}
public void BuildSkuMapProps(ref ProductCollectBase prod, string cookies, int mainCatId)
{
if (prod.Props.Count == 0)
{
return;
}
int maxImageCut = 0, maxImageCount = 0;
for (int i = 0; i < prod.Props.Count; i++)
{
if (prod.Props[i].Values.Count <= 1 && prod.from == "淘宝")//只有一个属性的删除
{
prod.Props.RemoveAt(i);
i--;
continue;
}
int imageCount = 0;
for (int j = 0; j < prod.Props[i].Values.Count; j++)
{
if (!string.IsNullOrEmpty(prod.Props[i].Values[j].image))
imageCount++;
}
if (imageCount > maxImageCount)
{
maxImageCount = imageCount;
maxImageCut = i;
}
}
if (prod.Props.Count == 0)
{
return;
}
for (int i = 0; i < prod.SkuMaps.Count; i++)
{
if (!string.IsNullOrEmpty(prod.SkuMaps[i].prop_image))
continue;
for (int j = 0; j < prod.Props[maxImageCut].Values.Count; j++)
{
if (prod.SkuMaps[i].name.Contains(prod.Props[maxImageCut].Values[j].name))
{
prod.SkuMaps[i].prop_image = prod.Props[maxImageCut].Values[j].image;
break;
}
}
}
int cut = 0;
for (int i = 0; i < prod.SkuMaps.Count; i++)
{
if (!string.IsNullOrEmpty(prod.SkuMaps[i].prop_image))
continue;
prod.SkuMaps[i].prop_image = prod.Images[cut];
cut++;
if (cut >= prod.Images.Count)
cut = 0;
}
if (prod.Props.Count > 2 && prod.from == "淘宝")//两个属性以上,去掉一个
{
int minCount = 100, minCut = -1;
for (int i = 0; i < prod.Props.Count; i++)
{
if (prod.Props[i].Values.Count < minCount && string.IsNullOrEmpty(prod.Props[i].Values[0].image))
{
minCount = prod.Props[i].Values.Count;
minCut = i;
}
}
if (minCut > -1)
{
prod.Props.RemoveAt(minCut);
}
}
int cutId = 0;
PinduoduoPropBase first = new PinduoduoPropBase();
PinduoduoPropBase second = new PinduoduoPropBase();
if (!PinduoduoProp.ContainsKey(mainCatId))
{
LogSave.Add(Name, "分类初始化异常,请重新打开软件");
return;
}
for (int j = 0; j < prod.Props.Count; j++)
{
foreach (KeyValuePair<string, PinduoduoPropBase> pb in PinduoduoProp[mainCatId])
{
if (cutId == 0)
first = pb.Value;
if (cutId == 1)
second = pb.Value;
if (pb.Key == prod.Props[j].name)
{
prod.Props[j].pinduoduo_name = pb.Key;
prod.Props[j].pinduoduo_id = pb.Value.Id;
break;
}
cutId++;
}
}
for (int j = 0; j < prod.Props.Count; j++)
{
foreach (KeyValuePair<string, PinduoduoPropBase> pb in PinduoduoProp[mainCatId])
{
if (string.IsNullOrEmpty(prod.Props[j].pinduoduo_name) && prod.Props[j].name.Contains(pb.Key))
{
prod.Props[j].pinduoduo_name = pb.Key;
prod.Props[j].pinduoduo_id = pb.Value.Id;
break;
}
}
}
if (prod.Props.Count == 1 && string.IsNullOrEmpty(prod.Props[0].pinduoduo_name))
{
prod.Props[0].pinduoduo_name = first.Name;
prod.Props[0].pinduoduo_id = first.Id;
}
else if (prod.Props.Count == 2)
{
if (string.IsNullOrEmpty(prod.Props[0].pinduoduo_name) &&
string.IsNullOrEmpty(prod.Props[1].pinduoduo_name))
{
prod.Props[0].pinduoduo_name = first.Name;
prod.Props[0].pinduoduo_id = first.Id;
prod.Props[1].pinduoduo_name = second.Name;
prod.Props[1].pinduoduo_id = second.Id;
}
else if (string.IsNullOrEmpty(prod.Props[0].pinduoduo_name))
{
if (prod.Props[1].pinduoduo_name == first.Name)
{
prod.Props[0].pinduoduo_name = second.Name;
prod.Props[0].pinduoduo_id = second.Id;
}
else
{
prod.Props[0].pinduoduo_name = first.Name;
prod.Props[0].pinduoduo_id = first.Id;
}
}
else if (string.IsNullOrEmpty(prod.Props[1].pinduoduo_name))
{
if (prod.Props[0].pinduoduo_name == first.Name)
{
prod.Props[1].pinduoduo_name = second.Name;
prod.Props[1].pinduoduo_id = second.Id;
}
else
{
prod.Props[1].pinduoduo_name = first.Name;
prod.Props[1].pinduoduo_id = first.Id;
}
}
}
for (int i = 0; i < prod.Props.Count; i++)
{
string refere = "https://mms.pinduoduo.com/Pdd.html";
if (string.IsNullOrEmpty(prod.Props[i].pinduoduo_id) || prod.Props[i].pinduoduo_id == "0")
{
string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name";
string data = "{\"parent_id\":0,\"name\":\"" + prod.Props[i].pinduoduo_name + "\"}";
string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies);
string id = BaseRegex.GetLongJson(ref html, "result").ToString();
if (id == "0")
{
Thread.Sleep(3000);
html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies);
id = BaseRegex.GetLongJson(ref html, "spec_id").ToString();
}
if (id == "0")
{
LogSave.Add(Name, "获取类别ID异常:" + prod.Props[i].pinduoduo_name);
continue;
}
if (PinduoduoProp[mainCatId].ContainsKey(prod.Props[i].pinduoduo_name))
PinduoduoProp[mainCatId][prod.Props[i].pinduoduo_name].Id = id;
prod.Props[i].pinduoduo_id = id;
}
for (int j = 0; j < prod.Props[i].Values.Count; j++)
{
//if (prod.from_site_id == 1 && j >= 30 && prod.Props[i].Values.Count >= 30) // 属性元素超过30个的就丢弃
//{
// prod.Props[i].Values.RemoveAt(j);
// j--;
// continue;
//}
if (PinduoduoProp[mainCatId].ContainsKey(prod.Props[i].pinduoduo_name) &&
PinduoduoProp[mainCatId][prod.Props[i].pinduoduo_name].Values.ContainsKey(prod.Props[i].Values[j].name))
{
prod.Props[i].Values[j].id =
PinduoduoProp[mainCatId][prod.Props[i].pinduoduo_name].Values[prod.Props[i].Values[j].name].ToString();
continue;
}
PinduoduoApiPropId api = new PinduoduoApiPropId(Shop);
string html = api.GetPropId(prod.Props[i].pinduoduo_id, prod.Props[i].Values[j].name);
string propvid = BaseRegex.GetStringJson(ref html, "spec_id");
if (!string.IsNullOrEmpty(propvid))
{
prod.Props[i].Values[j].id = propvid;
try
{
PinduoduoProp[mainCatId][prod.Props[i].pinduoduo_name].Values.Add(prod.Props[i].Values[j].name, long.Parse(prod.Props[i].Values[j].id));
}
catch
{
}
continue;
}
string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name";
string data = "{\"parent_id\":" + prod.Props[i].pinduoduo_id + ",\"name\":\"" + prod.Props[i].Values[j].name + "\"}";
html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies);
propvid = BaseRegex.GetStringJson(ref html, "result");
if (string.IsNullOrEmpty(propvid))
{
Thread.Sleep(3000);
html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies);
propvid = BaseRegex.GetStringJson(ref html, "result");
}
if (string.IsNullOrEmpty(propvid))
{
prod.Props[i].Values.RemoveAt(j);
j--;
continue;
}
prod.Props[i].Values[j].id = propvid;
try
{
PinduoduoProp[mainCatId][prod.Props[i].pinduoduo_name].Values.Add(prod.Props[i].Values[j].name, long.Parse(prod.Props[i].Values[j].id));
}
catch
{
}
}
}
}
public static Dictionary<string, int> PriceTemp = new Dictionary<string, int>();
public static int GetNewPrice(decimal beforePrice, int addPercent, int addPrice, long pid, int addSinglePrice, decimal maxPrice)
{
//if (UserStepPrice)
//{
// int p = (int)(beforePrice * 100) + PriceAllAdd*100;
// if (beforePrice >= PriceBefor1 && beforePrice <= PriceEnd1)
// return p + PriceAdd1 * 100;
// if (beforePrice >= PriceBefor2 && beforePrice <= PriceEnd2)
// return p + PriceAdd2 * 100;
// if (beforePrice >= PriceBefor3 && beforePrice <= PriceEnd3)
// return p + PriceAdd3 * 100;
// if (beforePrice >= PriceBefor4 && beforePrice <= PriceEnd4)
// return p + PriceAdd4 * 100;
// if (beforePrice >= PriceBefor5 && beforePrice <= PriceEnd5)
// return p + PriceAdd5 * 100;
//}
if (beforePrice < 1)
beforePrice = maxPrice;
if (beforePrice < 1)
beforePrice = 10000;
int before = (int)(beforePrice * 100);
string key = pid + "," + before + "," + addPercent + "," + addPrice + "," + addSinglePrice;
int price;
if (PriceTemp.ContainsKey(key))
{
price = PriceTemp[key];
return price;
}
//if (addSinglePrice == 0)
// {
price = before * (100 + addPercent) / 100 + addPrice * 100 + (RandAddPrice ? new Random(Guid.NewGuid().GetHashCode()).Next(10, 90) : 0);
// }
// else
// price = (int)((beforePrice + addSinglePrice) * 100) + (RandAddPrice ? new Random(Guid.NewGuid().GetHashCode()).Next(10, 90) : 0);
try
{
PriceTemp.Add(key, price);
}
catch
{
}
return price;
}
public static string UploadImage(byte[] img)
{
return UploadImage(img, null);
}
/// <summary>
/// 上传图片
/// </summary>
/// <param name="img"></param>
/// <returns></returns>
public static string UploadImage(byte[] img, ShopChatBase Shop)
{
PinduoduoApiGetProduct p = new PinduoduoApiGetProduct(Shop);
string html = p.UploadImage(img);
string imgUrl = BaseRegex.GetStringJson(ref html, "image_url");
if (string.IsNullOrEmpty(imgUrl))
{
string Cookies = Shop.Cookies;
string url = "https://mms.pinduoduo.com/earth/api/upload/getSignature";
string refere = "https://mms.pinduoduo.com/goods/goods_add/index?id=5146155709&type=edit&from=category";
html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "{}", Cookies);
string sign = BaseRegex.GetStringJson(ref html, "signature");
if (string.IsNullOrEmpty(sign))
{
return "";
}
string data =
"{\"upload_sign\":\"" + sign + "\",\"image\":\"data:image/jpeg;base64," +
Convert.ToBase64String(img) + "\"}";
url = "https://file.yangkeduo.com/v2/store_image";
html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Cookies);
imgUrl = BaseRegex.GetStringJson(ref html, "url");
LogSave.Add(Name, "上传图片:" + imgUrl);
return imgUrl;
}
return imgUrl;
}
public static Dictionary<string, int> TypeName = new Dictionary<string, int>();
public static Dictionary<string, int> TypeValues = new Dictionary<string, int>();
private static int firstKeyId = 0, firstValueId = 0;
public static string AddType(ref ProductCollectBase p, int mainCatId, string cookies, int mallId)
{
if (mainCatId == 5)
{
if (TypeName.Count == 0)
{
string url = "https://mms.pinduoduo.com/malls/" + mallId + "/transport/glide/query/clothes_fabric/list";
string refere = "https://mms.pinduoduo.com/Pdd.html";
string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, "{}", cookies);
var m = BaseRegex.GetMatchRegex(ref html, @"""code"":([\d]+),""desc"":""(.*?)""");
for (int i = 0; m != null && i < m.Count; i++)
{
string name = m[i].Groups[2].Value;
int value = int.Parse(m[i].Groups[1].Value);
if (firstKeyId == 0)
firstKeyId = value;
if (!TypeName.ContainsKey(name))
TypeName.Add(name, value);
}
}
if (TypeValues.Count == 0)
{
string url = "https://mms.pinduoduo.com/malls/" + mallId + "/transport/glide/query/clothes_fabric_content/list";
string refere = "https://mms.pinduoduo.com/Pdd.html";
string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, "{}", cookies);
var m = BaseRegex.GetMatchRegex(ref html, @"""code"":([\d]+),""desc"":""(.*?)""");
for (int i = 0; m != null && i < m.Count; i++)
{
string name = m[i].Groups[2].Value;
int value = int.Parse(m[i].Groups[1].Value);
if (firstValueId == 0)
firstValueId = value;
if (!TypeValues.ContainsKey(name))
TypeValues.Add(name, value);
}
}
}
if (mainCatId == 5)
{
string name = "材质成分";
string value = "";
for (int i = 0; i < p.Prop.Count; i++)
{
if (p.Prop[i].Key == name)
{
value = p.Prop[i].Value;
break;
}
}
int keyId = 0, valueId = 0;
if (!string.IsNullOrEmpty(value) && value.Contains("%"))
{
string v = BaseRegex.GetMatchRegexString(ref value, @"([\d]+)%");
string namex = value.Substring(0, value.IndexOf(v + "%"));
if (string.IsNullOrEmpty(v) || string.IsNullOrEmpty(namex))
{
goto NoValue;
}
int pe = int.Parse(v);
foreach (KeyValuePair<string, int> k in TypeName)
{
if (k.Key.Contains(namex) || namex.Contains(k.Key))
{
keyId = k.Value;
foreach (KeyValuePair<string, int> vv in TypeValues)
{
var mm = BaseRegex.GetMatchRegex(vv.Key, @"([\d]+)%");
if (mm.Count == 2)
{
int min = int.Parse(mm[0].Groups[1].Value);
int max = int.Parse(mm[1].Groups[1].Value);
if (pe >= min && pe <= max)
{
valueId = vv.Value;
goto NoValue;
}
}
}
break;
}
}
}
NoValue:
if (keyId == 0)
keyId = firstKeyId;
if (valueId == 0)
valueId = firstValueId;
string addContent = ",\"fabric\":" + keyId + ",\"fabric_content\":" + valueId;
return addContent;
}
return "";
}
/// <summary>
/// 下架产品
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public static bool SetOffLine(long id, ShopChatBase shop)
{
string cookies = shop == null ? "" : shop.Cookies;
PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(shop);
api.Name = Name;
string html = api.SetOnline(id, false);
//string data = "{\"goods_id\":" + id + "}";
string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/batchOffSale";
string refere = "https://mms.pinduoduo.com/Pdd.html";
//string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, cookies);
if (string.IsNullOrEmpty(html) || html.Contains("过于频繁"))
{
if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁"))
{
LogSave.Add(Name, "速度太快,休眠2-5分钟");
Thread.Sleep(100 * 1000);
}
else
{
LogSave.Add(Name, "不能下架");
return false;
}
html = api.SetOnline(id, false);
}
if (string.IsNullOrEmpty(html) || html.Contains("过于频繁"))
{
Thread.Sleep(100 * 1000);
html = api.SetOnline(id, false);
}
if (string.IsNullOrEmpty(html) || html.Contains("过于频繁"))
{
Thread.Sleep(100 * 1000);
LogSave.Add(Name, "下架产品失败:" + id);
return false;
}
if (html.Contains("使用MMS后台做此"))
{
if (string.IsNullOrEmpty(PinduoduoAuth.strContent))
{
PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path);
}
string NoCode = "";
string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000";
if (string.IsNullOrEmpty(NoCode))
{
string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt");
NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----");
}
string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, "");
string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent);
string data = "{\"goodsId\":" + id + ",\"crawlerInfo\":\"" + codex + "\"}";
html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, cookies);
}
LogSave.Add(Name, "下架产品成功:" + id);
return true;
}
}
public class PinduoduoPropBase
{
public string Name;
public string Id;
public Dictionary<string, long> Values = new Dictionary<string, long>();
}
}