Files
KJD/Work/Api/MobileDetail.cs
T
2025-06-29 19:38:31 +08:00

310 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Threading;
using AllBase;
using Work.CollectClass;
namespace Work.Api
{
public class MobileDetail
{
public string Name;
public long Pid;
public long FromId = 0;
public string FromShopName = "";
public int FromSiteId = 0;
public string message_alert = string.Empty;
public MobileDetail(string name, long pid)
{
Name = name;
Pid = pid;
}
public ProductCollectBase Get()
{
if (TaobaoMobileCollect.ProductTemp.ContainsKey(Pid))
return TaobaoMobileCollect.ProductTemp[Pid];
var p = new ProductCollectBase();
string url = "http://apiv4.yangkeduo.com/v5/goods/" + Pid + "?timeout=1500&pdduid=0";
string html = GetPostTaobaoHtml.GetUrl(url, "http://apiv4.yangkeduo.com", true, "");
Thread.Sleep(3000);
if (CollectKeywordByTaobao.SaveCollect && !string.IsNullOrEmpty(html) && html.Contains("远程服务器返回错误"))
{
Thread.Sleep(6000);
html = GetHtml.ByUsa(true, url);
}
if (string.IsNullOrEmpty(html) || html.Contains("远程服务器返回错误"))
{
Thread.Sleep(5000);
TaobaoProductBase t = new TaobaoProductBase();
t.FromType = "拼多多";
t.FromId = Pid;
PinduoduoProductCollect pp = new PinduoduoProductCollect(Name, t);
pp.NoAdd = true;
pp.Get();
p = pp.pb;
return p;
}
if (string.IsNullOrEmpty(html) || html.Contains("\"success\":false"))
{
LogSave.Add(Name, "商品不存在:" + Pid);
return p;
}
if (html.Contains("远程服务器返回错误"))
{
LogSave.Add(Name, "IP临时被封请切换电脑IP:" + Pid);
return p;
}
if (BaseRegex.GetIntJson(ref html, "is_onsale") == 0)
{
LogSave.Add(Name, "商品已下架:" + Pid);
return p;
}
MobileDetailBase tp = JsonHelper.DeserializeJsonToObject<MobileDetailBase>(html);
p.name = tp.goods_name;
for (int i = 0; i < tp.gallery.Count; i++)
{
if (tp.gallery[i].type == 1)
p.Images.Add(tp.gallery[i].url);
else
p.content += "<img src=\"" + tp.gallery[i].url + "\" height=\"" + tp.gallery[i].height + "\" width=\"" + tp.gallery[i].width + "\" />";
}
if (tp.sku.Count > 0 && tp.sku[0].specs.Count == 1)
{
var spe = tp.sku[0].specs[0];
PropBase prop = new PropBase();
prop.name = spe.spec_key;
for (int i = 0; i < tp.sku.Count; i++)
{
PropValueBase pvb = new PropValueBase();
pvb.name = tp.sku[i].specs[0].spec_value;
pvb.id = tp.sku[i].spec;
pvb.name_pinduoduo = pvb.name;
pvb.image = tp.sku[i].thumb_url;
pvb.image_from_url = pvb.image;
prop.Values.Add(pvb);
SkuMapBase sku = new SkuMapBase();
sku.name = tp.sku[i].specs[0].spec_key + ":" + tp.sku[i].specs[0].spec_value;
sku.before_price = tp.sku[i].normal_price / 100m;
sku.price = tp.sku[i].group_price / 100m;
sku.number = tp.sku[i].is_onsale == 0 ? 0 : tp.sku[i].quantity;
sku.sale_count = tp.sku[i].sold_quantity;
sku.id = tp.sku[i].sku_id;
sku.pinduoduo_image = tp.sku[i].thumb_url;
sku.prop_image = tp.sku[i].thumb_url;
p.SkuMaps.Add(sku);
}
p.Props.Add(prop);
}
if (tp.sku.Count > 0 && tp.sku[0].specs.Count == 2)
{
for (int i = 0; i < tp.sku[0].specs.Count; i++)
{
PropBase prop = new PropBase();
prop.name = tp.sku[0].specs[i].spec_key;
p.Props.Add(prop);
for (int j = 0; j < tp.sku.Count; j++)
{
if (prop.Values.Exists(po => po.name == tp.sku[j].specs[i].spec_value))
continue;
PropValueBase pv = new PropValueBase();
pv.name = tp.sku[j].specs[i].spec_value;
pv.image = tp.sku[j].thumb_url;
pv.name_pinduoduo = pv.name;
pv.id = tp.sku[j].spec.Split(',')[i];
prop.Values.Add(pv);
}
}
for (int i = 0; i < tp.sku.Count; i++)
{
SkuMapBase sku = new SkuMapBase();
sku.name = tp.sku[i].specs[0].spec_key + ":" + tp.sku[i].specs[0].spec_value + ";" + tp.sku[i].specs[1].spec_key + ":" + tp.sku[i].specs[1].spec_value;
sku.before_price = tp.sku[i].normal_price / 100m;
sku.price = tp.sku[i].group_price / 100m;
sku.number = tp.sku[i].is_onsale == 0 ? 0 : tp.sku[i].quantity;
sku.sale_count = tp.sku[i].sold_quantity;
sku.id = tp.sku[i].sku_id;
sku.pinduoduo_image = tp.sku[i].thumb_url;
sku.prop_image = tp.sku[i].thumb_url;
sku.spec_pinduoduo = tp.sku[i].spec;
p.SkuMaps.Add(sku);
}
}
p.id = Pid;
p.cat1 = tp.cat_id_1;
p.cat2 = tp.cat_id_2;
p.cat3 = tp.cat_id_3;
p.cat4 = tp.cat_id == tp.cat_id_3 ? 0 : tp.cat_id;
p.cat_id = tp.cat_id;
p.from = "拼多多";
p.from_site_id = 2;
p.mall_id = tp.mall_id;
var f = new FromTitleToCat();
p.main_cid = f.GetMainCatId(p.cat1);
p.main_cat_name = f.MainCatName;
p.name_share = tp.share_desc;
p.content_pinduoduo = tp.goods_desc;
p.hd_thumb_url_pinduoduo = tp.hd_thumb_url;
p.thumb_url_pinduoduo = tp.thumb_url;
p.image = tp.image_url;
p.cost_template_id_pinduoduo = tp.cost_template_id;
p.saleCount = tp.sales;
p.from_id = FromId;
p.from_shop_name = FromShopName;
if (p.saleCount > 0 )
{
//url = BaseClass.BigDataApiUrl + "?obj=product/product";
//string json = JsonHelper.SerializeObject(p);
//string data = "&act=update&site_id=2&shop_name=" + GetHtml.UrlEncodeUtf8(p.from_shop_name) + "&json=" + GetHtml.UrlEncodeUtf8(json);
//html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + data);
}
try
{
if (TaobaoMobileCollect.ProductTemp.Count > 1000)
{
TaobaoMobileCollect.ProductTemp.Clear();
}
TaobaoMobileCollect.ProductTemp.Add(Pid,p);
}
catch
{
}
return p;
}
public TaobaoProductBase ProductToTaobao(ProductCollectBase p)
{
TaobaoProductBase t = new TaobaoProductBase();
t.GoodsId = p.id;
t.Cat1 = p.cat1;
t.Cat2 = p.cat2;
t.Cat3 = p.cat3;
t.Cat4 = p.cat4;
t.CatId = p.cat_id;
t.FromId = p.from_id;
t.FromType = p.from;
t.MailId = p.mall_id;
t.MainCatId = p.main_cid;
t.MainCatName = p.main_cat_name;
t.Price = p.price;
t.SaleCount = p.saleCount;
t.Titlte = p.name;
return t;
}
}
public class MobileDetailBase
{
public string goods_sn = "";
public string goods_name = "";
public string goods_desc = "";
public string thumb_url = "";
public string hd_thumb_url = "";
public string country = "";
public string warehouse = "";
public string image_url = "";
public string share_desc = "";
public string skip_goods = "";
public long goods_id = 0;
public int cat_id = 0;
public int mall_id = 0;
public int market_price = 0;
public int goods_type = 0;
public int is_refundable = 0;
public int quick_refund = 0;
public int is_pre_sale = 0;
public int pre_sale_time = 0;
public int rv_image = 0;
public int rv = 0;
public int gpv = 0;
public int shipment_limit_second = 0;
public int sales = 0;
public int is_mall_rec = 0;
public int min_on_sale_group_price = 0;
public int max_on_sale_group_price = 0;
public int min_on_sale_normal_price = 0;
public int max_on_sale_normal_price = 0;
public int min_group_price = 0;
public int max_group_price = 0;
public int max_normal_price = 0;
public int min_normal_price = 0;
public int old_min_on_sale_group_price = 0;
public int old_max_on_sale_group_price = 0;
public int old_min_group_price = 0;
public int old_max_group_price = 0;
public int tag = 0;
public int cost_template_id = 0;
public int show_rec = 0;
public int app_new = 0;
public int is_home_delivery = 0;
public int second_hand = 0;
public int is_mall_dsr = 0;
public int created_at = 0;
public int quantity = 0;
public int cat_id_1 = 0;
public int cat_id_2 = 0;
public int cat_id_3 = 0;
public List<MobileDetailgalleryBase> gallery = new List<MobileDetailgalleryBase>();
public List<MobileDetailskuBase> sku = new List<MobileDetailskuBase>();
}
public class MobileDetailgalleryBase
{
public long id = 0;
public long goods_id = 0;
public int width = 0;
public int height = 0;
public int priority = 0;
public int type = 0;
public string url = "";
}
/// <summary>
/// sku
/// </summary>
public class MobileDetailskuBase
{
public long sku_id = 0;
public long goods_id = 0;
public string thumb_url = "";
public int quantity = 0;
public int limit_quantity = 0;
public int sold_quantity = 0;
public int init_quantity = 0;
public int is_onsale = 0;
public string spec = "";
public string outer_id = "";
public int normal_price = 0;
public int group_price = 0;
public int old_group_price = 0;
/// <summary>
/// 未使用
/// </summary>
public int price = 0;
/// <summary>
/// 未使用
/// </summary>
public int market_price = 0;
public List<MobileDetailspecsBase> specs = new List<MobileDetailspecsBase>();
}
/// <summary>
/// 属性
/// </summary>
public class MobileDetailspecsBase
{
/// <summary>
/// 属性名
/// </summary>
public string spec_key = "";
/// <summary>
/// 属性值
/// </summary>
public string spec_value = "";
}
}