old_flsystem/类库/Api.Framework/Cps/DuoyinApi - 复制.cs

770 lines
34 KiB
C#
Raw Permalink Normal View History

2022-09-20 03:10:29 +00:00
using Api.Framework.Cps.CefSharp1;
using Api.Framework.Enums;
using Api.Framework.Events;
using Api.Framework.Model;
using Api.Framework.Tools;
using CefSharp;
using CefSharp.WinForms;
using CsharpHttpHelper;
using CsharpHttpHelper.Enum;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
namespace Api.Framework.Cps
{
public class DouyinApi : BaseCpsApi
{
#region
public ChromiumWebBrowser chromeBrowser;
public static Action<DouyinApi> douyinApiAction;
/// <summary>
/// 抖音cookie
/// </summary>
private string cookie = string.Empty;
public string GetCookie()
{
var tmp = new List<string>(CookieCache) { };
return JsonConvert.SerializeObject(tmp);
}
public void SetMember(fl_cps_member Member)
{
this.Member = Member;
Heartbeat();
}
#endregion
private List<string> CookieCache = new List<string>();
/// <summary>
/// 没什么用
/// </summary>
public bool ISVIEW { get; private set; } = false;
/// <summary>
/// 抖音首页
/// </summary>
//private static string DouyinUrl = "https://www.douyinec.com/";
private static string DouyinUrl = "https://buyin.jinritemai.com/dashboard";
static DouyinApi()
{
//CefSettings settings = new CefSettings();
////日志文件
//settings.LogFile = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "/LogData";
//settings.PersistSessionCookies = true;
//settings.WindowlessRenderingEnabled = true;
//settings.UserDataPath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "/UserData";
//// Initialize cef with the provided settings
//Cef.Initialize(settings);
}
public DouyinApi(fl_cps_member member) : base(member)
{
InitializeChromium(string.IsNullOrWhiteSpace(member.username) ? Guid.NewGuid().ToString("N") : member.username);
}
//初始化浏览器并启动
public void InitializeChromium(string accountName)
{
RequestContext context = new RequestContext(new RequestContextSettings()
{
CachePath = HttpExtend.MapPath($"Cache\\Cef\\{accountName}"),
});
//创建一个浏览器组件
chromeBrowser = new ChromiumWebBrowser(DouyinUrl, context);
//this.tabPage2.Controls.Add(chromeBrowser);
//chromeBrowser.Dock = DockStyle.Fill;
chromeBrowser.AddressChanged += ChromeBrowser_AddressChanged;
chromeBrowser.FrameLoadEnd += ChromeBrowser_FrameLoadEnd;
chromeBrowser.IsBrowserInitializedChanged += ChromeBrowser_IsBrowserInitializedChanged;
//注册自定义的请求/拦截响应
var cefRequestHandler = new CEFRequestHandler();
chromeBrowser.RequestHandler = cefRequestHandler;
cefRequestHandler.JsonAction += CefRequestHandler_JsonAction;
}
private static string splitStr = "●●●";
/// <summary>
/// 初始化完成之后将cookie还原进去
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ChromeBrowser_IsBrowserInitializedChanged(object sender, EventArgs e)
{
try
{
if (!string.IsNullOrWhiteSpace(Member.cookies))
{
var cookies = JsonConvert.DeserializeObject<List<string>>(Member.cookies);
var cookieManager = chromeBrowser.GetCookieManager();
//var cookieManager = CefSharp.Cef.GetGlobalCookieManager();
foreach (string c in cookies)
{
var result = c.Split(new string[] { splitStr }, StringSplitOptions.RemoveEmptyEntries);
var cookieTmp = new CefSharp.Cookie
{
Creation = DateTime.Now,
Domain = result[0],
Name = result[1],
Value = result[2],
Expires = DateTime.Now.AddDays(20)
};
cookie += $"{result[1]}={result[2]};";
cookie = GetSmallCookie(cookie);
if (!string.IsNullOrWhiteSpace(result[2]))
CookieCache.Add($"{result[0]}{splitStr}{result[1]}{splitStr}{result[2]}");
//var b = cookieManager.SetCookieAsync(DouyinUrl, cookie).Result;
cookieManager.SetCookieAsync(DouyinUrl, cookieTmp);
}
ISVIEW = true;
}
}
catch (Exception ex)
{
}
finally
{
chromeBrowser.Load(DouyinUrl);
}
}
/// <summary>
/// 订单响应数据
/// </summary>
/// <param name="arg1"></param>
/// <param name="arg2"></param>
private void CefRequestHandler_JsonAction(string url, string json)
{
IsQueryOrderRun = false;
orderjson = json;
Console.WriteLine($"@@@@@@@@@@@@@@@ {orderjson}");
}
private void ChromeBrowser_AddressChanged(object sender, AddressChangedEventArgs e)
{
Console.WriteLine($"######### = " + e.Address);
//e.Address == "https://buyin.jinritemai.com/dashboard/live/control
//在线的离线了,
if (e.Address == "https://www.douyinec.com/" && Member.is_valid)
{
Task.Run(() =>
{
//if (isCheck) return;
//isCheck = true;
try
{
var end = DateTime.Now.AddMinutes(1);
do
{
Thread.Sleep(500);
Member.cookies = GetCookie();
var json = GetLoginUserInfo();
if (!string.IsNullOrWhiteSpace(json))
{
EventClient.OnEvent("获取抖音信息", json);
var jObj = JObject.Parse(json);
if (jObj != null && (int)jObj["code"] == 0)
{
//{"code":0,"data":{"account_avatar":"https://p6.douyinpic.com/img/tos-cn-i-0813/e87c3c6a24cb47568147aef8a949c392~c5_100x100.jpeg?from=4010531038","agree_pro":2,"anchor_coupon_menu_show":1,"buyin_account_id":"6978842327024533801","center_menu_show":1,"check_status":0,"child_status":0,"compass_first_level_menu_show":1,"compass_second_level_menu_show":1,"contact_not_set":1,"daren_plaza_popup":false,"daren_plaza_status":2,"doudian_shop_id":0,"dr_auth":{"1128":{"authority_shop":1,"authority_item":1,"authority_live":1}},"has_bind_star":0,"origin_uid":"1460607342872671","plaza_status":1,"qianchuan":1,"selection_plaza":1,"shop_id":"6978842327024550185","shop_name":"四面八方","shop_type":24,"shop_type_child":2,"shops":[{"agree_protocol":2,"check_status":0,"shop_id":"6978842327024550185","shop_name":"四面八方","shop_type":24,"shop_type_child":2,"status":1,"user_name":"四面八方"}],"status":1,"user_app":1128,"user_id":"123616240602295","user_identity_type":1,"user_name":"四面八方","user_role":1},"log_id":"202106301629040101980662044544AEAC","msg":"success","st":0}
var userid = jObj["data"]["origin_uid"].ToString();
var Member = CpsClient.Members.FirstOrDefault(f => f.username == userid && f.cpstype == CpsType.);
if (Member == null)
{
Member = new fl_cps_member() { username = userid, cpstype = CpsType. };
CpsClient.Members.Add(Member);
}
Member.online = true;
Member.cookies = GetCookie();
Member.usernick = jObj["data"]["shop_name"].ToString();
Member.logintime = DateTime.Now;
Member.is_valid = true;
CpsClient.AddDouyinApi(this);
this.Member = Member;
ApiClient.GetSession().SaveOrUpdate(Member);
EventClient.OnEvent("", $"抖音激活成功:{Member.usernick}({Member.username})");
break;
}
else
{
IsQualifiedAction?.Invoke(!flag, this)
EventClient.OnEvent("抖音登录失败", json);
}
}
} while (end < DateTime.Now);
//isCheck = false;
//this.Invoke(new Action(() =>
//{
// this.Close();
//}));
}
catch (Exception ex)
{
EventClient.OnEvent("抖音登录失败", ex.Message + " - " + ex.StackTrace);
}
});
}
}
private string orderjson = string.Empty;
private Task<string> GetOrderData()
{
return Task.Run(() =>
{
try
{
if (!IsQueryOrderRun)
return null;
var endTime = DateTime.Now.AddSeconds(20);
do
{
Thread.Sleep(200);
if (!IsQueryOrderRun)
break;
} while (endTime > DateTime.Now);
var orderjsonTmp = orderjson;
return orderjsonTmp;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
IsQueryOrderRun = false;
orderjson = string.Empty;
}
return string.Empty;
});
}
/// <summary>
/// 执行查询的订单
/// </summary>
public void QueryOrderButton()
{
try
{
chromeBrowser.EvaluateScriptAsync("document.getElementsByClassName('ant-btn ant-btn-primary')[0].click()");
}
catch (Exception ex)
{
}
}
public void SkipOther(string url)
{
try
{
chromeBrowser.Load(url);
Thread.Sleep(1000 + new Random().Next(200, 4000));
}
catch (Exception ex)
{ }
}
/// <summary>
/// 是否在运行
/// </summary>
private bool IsQueryOrderRun = false;
private static string QueryOrderUrl = "https://buyin.jinritemai.com/dashboard/dataCenter/order";
/// <summary>
/// 跳转请求页面,实现查询以当前时间为基础的,七天订单 ☆☆☆☆☆
/// </summary>
public Task<string> SkipQueryOrder()
{
if (IsQueryOrderRun) return Task.FromResult("error");
IsQueryOrderRun = true;
SkipOther("https://buyin.jinritemai.com/dashboard/dataCenter/export-list");
var data = GetOrderData();
SkipOther(QueryOrderUrl);
return data;
}
/// <summary>
/// 登录的账号是否满足条件
/// </summary>
public Action<bool, DouyinApi> IsQualifiedAction;
/// <summary>
/// 网页加载完毕
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ChromeBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
{
if (!ISVIEW && e.Url.StartsWith("https://summon.bytedance.com/web/?sign_token="))
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("function tempFunction() {");
sb.AppendLine(" return document.getElementsByTagName('button')[0].innerHTML; ");
sb.AppendLine("}");
sb.AppendLine("tempFunction();");
chromeBrowser.EvaluateScriptAsync(sb.ToString()).ContinueWith(x =>
{
var response = x.Result;
if (response.Success && response.Result != null)
{
//var a = CpsClient.DouyinApiCache;
var startDate = response.Result;
var flag = startDate.ToString().Contains("暂无开通权限");
if (!flag)
ISVIEW = true;
IsQualifiedAction?.Invoke(!flag, this);
}
});
}
CookieVisitor visitor = new CookieVisitor();
visitor.SendCookie += visitor_SendCookie;
ICookieManager cookieManager = chromeBrowser.GetCookieManager();
cookieManager.VisitAllCookies(visitor);
}
/// <summary>
/// 访问者收到的cookie
/// </summary>
/// <param name="obj"></param>
private void visitor_SendCookie(Cookie obj)
{
try
{
//System.Net.Cookie ck = new System.Net.Cookie(obj.Name, obj.Value);
//ck.Domain = obj.Domain;
cookie += $"{obj.Name}={obj.Value};";
cookie = GetSmallCookie(cookie);
if (!string.IsNullOrWhiteSpace(obj.Value))
CookieCache.Add($"{obj.Domain}{splitStr}{obj.Name}{splitStr}{obj.Value}");
}
catch (Exception ex)
{ }
}
#region cookie
//{"code":-2,"log_id":"202106301727440101980662104D4B7D05","msg":"用户未登录"}
//cookie失效提示
/// <summary>
/// 获取登录用户的信息
/// </summary>
/// <returns></returns>
public string GetLoginUserInfo()
{
try
{
if (Member == null || string.IsNullOrWhiteSpace(Member.cookies)) return string.Empty;
var item = new HttpItem()
{
URL = "https://buyin.jinritemai.com/index/getUser",
Method = "GET",
Timeout = 100000,
ReadWriteTimeout = 30000,
IsToLower = false,
Cookie = cookie,
UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",
Accept = "text/html, application/xhtml+xml, */*",
ContentType = "application/json",
Referer = "https://buyin.jinritemai.com/dashboard",
Allowautoredirect = false,
AutoRedirectCookie = false,
Postdata = "",
ResultType = ResultType.String,
};
var http = new HttpHelper();
var res = http.GetHtml(item);
var html = res.Html;
//{"code":0,"data":{"account_avatar":"https://p6.douyinpic.com/img/tos-cn-i-0813/e87c3c6a24cb47568147aef8a949c392~c5_100x100.jpeg?from=4010531038","agree_pro":2,"anchor_coupon_menu_show":1,"buyin_account_id":"6978842327024533801","center_menu_show":1,"check_status":0,"child_status":0,"compass_first_level_menu_show":1,"compass_second_level_menu_show":1,"contact_not_set":1,"daren_plaza_popup":false,"daren_plaza_status":2,"doudian_shop_id":0,"dr_auth":{"1128":{"authority_shop":1,"authority_item":1,"authority_live":1}},"has_bind_star":0,"origin_uid":"1460607342872671","plaza_status":1,"qianchuan":1,"selection_plaza":1,"shop_id":"6978842327024550185","shop_name":"四面八方","shop_type":24,"shop_type_child":2,"shops":[{"agree_protocol":2,"check_status":0,"shop_id":"6978842327024550185","shop_name":"四面八方","shop_type":24,"shop_type_child":2,"status":1,"user_name":"四面八方"}],"status":1,"user_app":1128,"user_id":"123616240602295","user_identity_type":1,"user_name":"四面八方","user_role":1},"log_id":"202106301629040101980662044544AEAC","msg":"success","st":0}
return html;
}
catch (Exception ex)
{
Console.WriteLine($"获取登录用户信息异常:{ex.Message} - {ex.StackTrace}");
}
return string.Empty;
}
/// <summary>
/// 获取登录用户的信息
/// </summary>
/// <returns></returns>
public string GetUserInfo(string cookice)
{
try
{
var item = new HttpItem()
{
URL = "https://buyin.jinritemai.com/index/getUser",
Method = "GET",
Timeout = 100000,
ReadWriteTimeout = 30000,
IsToLower = false,
Cookie = cookice,
UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",
Accept = "text/html, application/xhtml+xml, */*",
ContentType = "application/json",
Referer = "https://buyin.jinritemai.com/dashboard",
Allowautoredirect = false,
AutoRedirectCookie = false,
Postdata = "",
ResultType = ResultType.String,
};
var http = new HttpHelper();
var res = http.GetHtml(item);
var html = res.Html;
//{"code":0,"data":{"account_avatar":"https://p6.douyinpic.com/img/tos-cn-i-0813/e87c3c6a24cb47568147aef8a949c392~c5_100x100.jpeg?from=4010531038","agree_pro":2,"anchor_coupon_menu_show":1,"buyin_account_id":"6978842327024533801","center_menu_show":1,"check_status":0,"child_status":0,"compass_first_level_menu_show":1,"compass_second_level_menu_show":1,"contact_not_set":1,"daren_plaza_popup":false,"daren_plaza_status":2,"doudian_shop_id":0,"dr_auth":{"1128":{"authority_shop":1,"authority_item":1,"authority_live":1}},"has_bind_star":0,"origin_uid":"1460607342872671","plaza_status":1,"qianchuan":1,"selection_plaza":1,"shop_id":"6978842327024550185","shop_name":"四面八方","shop_type":24,"shop_type_child":2,"shops":[{"agree_protocol":2,"check_status":0,"shop_id":"6978842327024550185","shop_name":"四面八方","shop_type":24,"shop_type_child":2,"status":1,"user_name":"四面八方"}],"status":1,"user_app":1128,"user_id":"123616240602295","user_identity_type":1,"user_name":"四面八方","user_role":1},"log_id":"202106301629040101980662044544AEAC","msg":"success","st":0}
return html;
}
catch (Exception ex)
{
Console.WriteLine($"获取登录用户信息异常:{ex.Message} - {ex.StackTrace}");
}
return string.Empty;
}
#endregion
/// <summary>
/// 检测cookie是否还有效(心跳)
/// </summary>
public void Heartbeat()
{
Task.Run(() =>
{
do
{
Thread.Sleep(200000 + new Random().Next(2000000, 30000000));
var json = GetLoginUserInfo();
if (!string.IsNullOrWhiteSpace(json))
{
var jObj = JObject.Parse(json);
if (jObj != null && (int)jObj["code"] == 0)
{
Console.WriteLine($"账号:{Member.usernick}({Member.username})在线...");
}
else
{
Console.WriteLine($"账号:{Member.usernick}({Member.username})离线了");
return;
}
}
} while (true);
});
}
/// <summary>
/// 口令解析地址
/// </summary>
private const string AnalysisCmdUrl = @"https://aweme.snssdk.com/aweme/v2/platform/share/command/trans/?command={0}&support_type=16&os_api=22&device_type=MI+9&ssmix=a&manifest_version_code=160201&dpi=320&uuid=863254393831028&app_name=aweme&version_name=16.2.0&ts={1}&cpu_support64=false&app_type=normal&appTheme=dark&ac=wifi&host_abi=armeabi-v7a&update_version_code=16209900&channel=tengxun_1128_0531&_rticket=1624938653257&device_platform=android&iid=3466131644356413&version_code=160200&cdid={2}&is_android_pad=0&openudid=0347cf3f47c211af&device_id=1478167560454807&resolution=900*1600&os_version=5.1.1&language=zh&device_brand=Xiaomi&aid=1128&minor_status=0&mcc_mnc=46007";
/// <summary>
/// 搜索商品(商品链接搜索,或标题搜索)
/// </summary>
private const string SearchUrl = @"https://buyin.jinritemai.com/pc/selection/search/pmt?page_size=60&page=1&search_text={0}&_signature={1}";
/// <summary>
/// 橱窗商品列表搜索地址
/// </summary>
private const string ShopWindowUrl = @"https://buyin.jinritemai.com/api/shop/search?hide_status=0&promotion_source=0&title={0}&page=1&pageSize=20&_signature={1}";
/// <summary>
/// 添加商品至橱柜
/// </summary>
private const string AddGoods_WindowUrl = @"https://buyin.jinritemai.com/pc/selection/window/pmt/add?_signature={0}";
/// <summary>
/// 将抖音口令解析成商品id
/// </summary>
public static string AnalysisCmdToGoodsUrl(string kl)
{
try
{
var analysisCmdUrl = string.Format(AnalysisCmdUrl, HttpHelper.URLEncode(kl), HttpExtend.GetTimeStamp(), Guid.NewGuid().ToString());
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = analysisCmdUrl,
Method = "get",
IsToLower = false,
Cookie = "",
Referer = "",
Postdata = "",
Timeout = 100000,
ReadWriteTimeout = 30000,
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
ContentType = "text/html",
Allowautoredirect = false,
ProxyIp = "",
ResultType = ResultType.String
};
HttpResult result = http.GetHtml(item);
string html = result.Html;
string cookie = result.Cookie;
var jObj = JObject.Parse(html);
if (html.Contains("schema"))
{
var schema = jObj["schema"].ToString();
var reg = Regex.Match(schema, @"product_id=(?<商品id>\d+)", RegexOptions.IgnoreCase);
if (reg.Success)
{
return reg.Groups["商品id"].Value;
}
}
}
catch (Exception ex)
{
Console.WriteLine($"抖音口令解析异常:{ex.Message} - {ex.StackTrace} - kl:{kl}");
}
return string.Empty;
}
/// <summary>
/// 通过商品链接查询商品信息
/// </summary>
/// <param name="goodsUrl"></param>
/// <returns>返回商品的基础信息</returns>
public DouyinGoodsInfo FindGoodsInfo(string goodsId)
{
try
{
var sign = "";//TODO 这个可以为空
var searchUrl = string.Format(SearchUrl, HttpHelper.URLEncode($"https://haohuo.jinritemai.com/views/product/item2?id={goodsId}"), sign);
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = searchUrl,
Method = "get",
IsToLower = false,
Cookie = cookie,
Referer = "",
Postdata = "",
Timeout = 100000,
ReadWriteTimeout = 30000,
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
ContentType = "text/html",
Allowautoredirect = false,
ProxyIp = "",
ResultType = ResultType.String
};
HttpResult result = http.GetHtml(item);
string html = result.Html;
//string cookie = result.Cookie;
//{"code":0,"st":0,"msg":"","data":{"promotions":[{"promotion_id":"3473786827197053067","product_id":"3473587162723782872","title":"【象牙塔】爆款 厚实桌面手机支架 随意旋转上下调节","cover":{"uri":"temai/e7ea85383a76fe7cec7390407fdfa984www1099-1015","url_list":["http://p3.pstatp.com/aweme/720x720/temai/e7ea85383a76fe7cec7390407fdfa984www1099-1015.jpeg","http://pb9.pstatp.com/aweme/720x720/temai/e7ea85383a76fe7cec7390407fdfa984www1099-1015.jpeg","http://pb3.pstatp.com/aweme/720x720/temai/e7ea85383a76fe7cec7390407fdfa984www1099-1015.jpeg"]},"detail_url":"https://haohuo.jinritemai.com/views/product/item2?id=3473587162723782872","promotion_source":4,"brand_icon":{"url_list":["http://p3.pstatp.com/origin/db00001bcc4cfde8d96a"]},"price":990,"market_price":1900,"cos_fee":495,"cos_ratio":5000,"month_sales":7020,"shop_id":14065420,"shop_name":"象牙塔","exp_score":"4.5","in_promotion":true,"in_shop":false,"sales":0}],"has_more":false,"search_id":"6979517724091285760"},"total":1,"log_id":"20210630173326010198066204044B8F51"}
var goodsInfo = JsonConvert.DeserializeObject<DouyinGoodsInfo>(html);
//if (goodsInfo != null)
return goodsInfo;
}
catch (Exception ex)
{
Console.WriteLine($"查询商品信息异常,{ex.Message} - {ex.StackTrace}");
}
return null;
}
/// <summary>
/// 添加商品至橱柜
/// </summary>
/// <returns></returns>
public bool AddGoodsWindowUrl(string product_id)
{
try
{
var sign = "";//TODO 这个可以为空
var addGoods_WindowUrl = string.Format(AddGoods_WindowUrl, sign);
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = addGoods_WindowUrl,
Method = "POST",
Timeout = 100000,
ReadWriteTimeout = 30000,
IsToLower = false,
Cookie = cookie,
UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",
Accept = "text/html, application/xhtml+xml, */*",
ContentType = "application/x-www-form-urlencoded",
Referer = "https://buyin.jinritemai.com/dashboard/merch-picking-hall",
Allowautoredirect = false,
AutoRedirectCookie = false,
Postdata = $"product_id={product_id}&item_type=4&pick_first_source=%E7%99%BE%E5%BA%94&pick_second_source=%E9%80%89%E5%93%81%E5%B9%BF%E5%9C%BA&pick_third_source=search&pick_source_id=",
ResultType = ResultType.String,
};
HttpResult result = http.GetHtml(item);
//{"code":0,"st":0,"msg":"success","error_type":0,"data":{},"log_id":"202107011223480101980650882E822E5B"}
string html = result.Html;
//string cookie = result.Cookie;
var jObj = JObject.Parse(html);
if (html.Contains("code") && (int)jObj["code"] == 0)
{
if (jObj["msg"].ToString().ToLower() == "success")
return true;
}
}
catch (Exception ex)
{
Console.WriteLine($"添加商品到橱柜异常:{ex.Message} - {ex.StackTrace}");
}
return false;
}
/// <summary>
/// 通过商品id查询橱柜中的商品,获取推广链接
/// </summary>
/// <param name="goodsid"></param>
/// <returns></returns>
public string GetShopWindow_PromotionUrlToGoodsId(string goodsid)
{
try
{
var sign = "";//TODO 这个可以为空
var searchUrl = string.Format(ShopWindowUrl, goodsid, sign);
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = searchUrl,
Method = "get",
IsToLower = false,
Cookie = cookie,
Referer = "",
Postdata = "",
Timeout = 100000,
ReadWriteTimeout = 30000,
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
Accept = "text/html, application/xhtml+xml, */*",// 可选项有默认值
ContentType = "application/json",//返回类型 可选项有默认值
Allowautoredirect = false,
ProxyIp = "",
ResultType = ResultType.String
};
HttpResult result = http.GetHtml(item);
string html = result.Html;
//string cookie = result.Cookie;
//{"code":0,"data":[{"promotion_id":"3461130275701011777","product_id":"3454352531717751823","promotion_source":4,"coupon_amount":"","price":9990,"cos_fee":3996,"cos_ratio":40,"title":" 【辉腾】直播落地支架 直播支架 直播落地三脚架 户外落地支架","detail_url":"https://haohuo.jinritemai.com/views/product/item2?id=3454352531717751823\u0026origin_type=2002170010\u0026origin_id=1460607342872671_3461130275701011777\u0026alkey=1128_1460607342872671_0_3461130275701011777_011\u0026sec_author_id=MS4wLjABAAAAEnpGkVpQS-WLtu18Me9lZ-9A284xvNbstU-HGyQK3vn2Pi-WtDWPRAXLCnSRvDsF\u0026buyin_track=COgIEN-Q0K6ijcwCGgQIABAAIgAoj4iI8LXqlPgvMAE\u0026c_biz_combo=2","cover":"temai/c9a03a89407ec53f6dc06fb949a9a7bcwww800-800","images":["temai/c9a03a89407ec53f6dc06fb949a9a7bcwww800-800","temai/bd81e0f3a80b8ef97228454fcd243157www800-800","temai/7575df4d88e28769e16ebd13ec48c14awww800-800","temai/0bdd668c8dad2dd2605dc62b51b9f509www800-800","temai/b25524e60b62f6b768995a2c4910cd91www800-800"],"elastic_title":"","elastic_images":["temai/c9a03a89407ec53f6dc06fb949a9a7bcwww800-800","temai/bd81e0f3a80b8ef97228454fcd243157www800-800","temai/7575df4d88e28769e16ebd13ec48c14awww800-800","temai/0bdd668c8dad2dd2605dc62b51b9f509www800-800","temai/b25524e60b62f6b768995a2c4910cd91www800-800"],"ies_category":12,"sales":0,"pic_audit_status":null,"brand_icon":"","original_promotion_source":0,"cos_type":0,"cos_type_name":"","live_elastic_title":"","full_discount":[],"shop_label":null,"shop_id":9868340,"tax_price":0,"is_haitao":false,"hide_status":2,"pool_type":"","industry_cid":7,"industry_cname":"智能家居"}],"extra":{"log_id":"2021070109250001019806620216778C63","now":1625102701000},"msg":"success","st":0,"total":1}
var jObj = JObject.Parse(html);
if (html.Contains("code") && (int)jObj["code"] == 0)
{
var jArr = (JArray)jObj["data"];
if (jArr.Count != 0)
{
var jTok = jArr[0];
return jTok["detail_url"].ToString();
}
}
}
catch (Exception ex)
{
Console.WriteLine($"获取推广链接异常:{ex.Message} - {ex.StackTrace}");
}
return string.Empty;
}
/// <summary>
/// 抖音订单状态
/// </summary>
public enum DouyinOrderStatus : int
{
= 1,
= 2,
PAY_SUCC = 3,//订单付款
REFUND = 5,//退款/失效
= 6,
}
/// <summary>
/// 根据字符生成Cookie和精简串将排除path,expires,domain以及重复项
/// </summary>
/// <param name="strcookie">Cookie字符串</param>
/// <returns>精简串</returns>
internal static string GetSmallCookie(string strcookie)
{
if (string.IsNullOrWhiteSpace(strcookie))
{
return string.Empty;
}
Dictionary<string, string> keyValues = new Dictionary<string, string>();
string[] array = strcookie.ToString().Split(new string[2]
{
",",
";"
}, StringSplitOptions.RemoveEmptyEntries);
string[] array2 = array;
foreach (string text in array2)
{
var index = text.IndexOf("=");
if (index != -1)
{
var val0 = text.Substring(0, index);
var val1 = text.Substring(index + 1, text.Length - index - 1);
var val2 = val0.ToLower().Trim();
if (!val2.Contains("path=") && !val2.Contains("expires=") && !val2.Contains("domain="))
{
if (!keyValues.ContainsKey(val0))
keyValues.Add(val0, val1);
else
keyValues[val0] = val1;
}
}
}
List<string> list = new List<string>();
foreach (KeyValuePair<string, string> item in keyValues)
{
list.Add($"{item.Key}={ item.Value}");
}
return string.Join(";", list) + ";";
}
}
}