using Api.Framework.Cps;
using Api.Framework.Enums;
using Api.Framework.Model;
using Api.Framework.Utils;
using CsharpHttpHelper;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
using System.Text;
using System.Web;
using NPOI.POIFS.Storage;
namespace Api.Framework.Tools
{
///
/// 淘宝导购帮助类
///
public static class TBHelper
{
#region 优惠券信息和商品字典缓存
private static string cache_tbitemid_key = "cache_tbitemid_key";
///
/// 在存有优惠券的字典中查询商品编码
///
///
///
public static string FindTBCouponByItemIdCache(string url)
{
try
{
if (string.IsNullOrWhiteSpace(url)) return string.Empty;
var reg = Regex.Match(url, @"i\d+?/(?<图片字符串>(?:\d+?)[^\.]+?)\.");
if (!reg.Success) return string.Empty;
var imgStr = reg.Groups["图片字符串"].Value;
var item_id = string.Empty;
var value = ApiClient.Cache.Get>(cache_tbitemid_key);
if (value == null)
return string.Empty;
var md5 = Util.GetMd5_32byte(imgStr);
if (value.ContainsKey(md5))
return item_id = value[md5];
}
catch (Exception ex)
{ }
return string.Empty;
}
///
/// 将优惠券链接和商品编码保存在字典中
///
///
///
public static void SetTBCouponByItemIdCache(string url, string item_id)
{
try
{
if (string.IsNullOrWhiteSpace(url) || string.IsNullOrWhiteSpace(item_id)) return;
var value = ApiClient.Cache.Get>(cache_tbitemid_key);
if (value == null)
value = new Dictionary();
else if (value.Count > 1000)
value.Clear();
var reg = Regex.Match(url, @"i\d+?/(?<图片字符串>(?:\d+?)[^\.]+?)\.");
if (!reg.Success) return;
var imgStr = reg.Groups["图片字符串"].Value;
var md5 = Util.GetMd5_32byte(imgStr);
if (!value.ContainsKey(md5))
value.Add(md5, item_id);
ApiClient.Cache.Set(cache_tbitemid_key, value, 30);
}
catch (Exception ex)
{ }
}
#endregion
#region 获取外围优惠券信息
#region xxx
/////
///// 通过商品id获取优惠券信息(爬大淘客优惠券信息)
/////
/////
/////
//public static string FindGoodsActivityIdAll(string itemId, out string sellerId, out double payPrice)
//{
// var activityId = FindGoodsActivityId_DaTaoKe(itemId, out sellerId, out payPrice);
// if (string.IsNullOrWhiteSpace(activityId))
// activityId = FindGoodsActivityId_HaoDanKu(itemId, out sellerId, out payPrice);
// if (string.IsNullOrWhiteSpace(activityId))
// activityId = FindGoodsActivityId_XuanDan(itemId, out sellerId, out payPrice);
// return activityId;
//}
//public static string FindGoodsActivityId_DaTaoKe(string itemId, out string sellerId, out double payPrice)
//{
// sellerId = string.Empty;
// payPrice = -1;
// var activityid = string.Empty;
// try
// {
// HttpItem item = new HttpItem()
// {
// URL = $"http://www.dataoke.com/search/?keywords={itemId}",
// Method = "GET",
// Timeout = 5000,
// ReadWriteTimeout = 10000,
// IsToLower = false,
// UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",
// Accept = "text/html, application/xhtml+xml, */*",
// ContentType = "text/html"
// };
// HttpHelper http = new HttpHelper();
// var result = http.GetHtml(item);
// if (result == null)
// return activityid;
// //var regs = Regex.Matches(result.Html, @"\d+)\&parts=商品库");
// var regs = Regex.Matches(result.Html, @"goods-items_(?\d+)");
// if (regs.Count != 1)
// return activityid;
// var gid = regs[0].Groups["gid"].Value?.Trim();
// if (string.IsNullOrWhiteSpace(gid)) return activityid;
// item.URL = $"http://www.dataoke.com/gettpl?gid={gid}&_={HttpExtend.GetTimeStamp()}000";
// result = http.GetHtml(item);
// if (result == null)
// return activityid;
// var html = result.Html;
// if (html.Contains($"item.htm?id={itemId}"))
// {
// var reg = Regex.Match(html, @"activityId=(?<活动ID>[A-Za-z0-9]+)");
// if (reg.Success)
// {
// var activity = reg.Groups["活动ID"].Value?.Trim();
// reg = Regex.Match(html, @"sellerId=(?<店铺ID>[^&]*)");
// if (reg.Success)
// sellerId = reg.Groups["店铺ID"].Value;
// List regStrs = new List() { @"后【(?<券后>\d+(?:[.]{1}\d+?)?)元】", @"仅(?<券后>\d+(?:[.]{1}\d+?)?)元秒杀" };
// foreach (var regStr in regStrs)
// {
// reg = Regex.Match(html, regStr);
// if (reg.Success)
// {
// payPrice = double.Parse(reg.Groups["券后"].Value);
// break;
// }
// }
// //var quan = -1d;
// //reg = Regex.Match(html, @"(?<券>\d+[[.]{1}\d+?]?)元优惠券");
// //if (reg.Success)
// // quan = double.Parse(reg.Groups["券"].Value);
// //if (price != -1 && quan != -1)
// // payPrice = quan + price;
// return activity;
// }
// }
// else
// {
// Console.WriteLine("html = " + html);
// }
// }
// catch (Exception)
// { }
// return activityid;
//}
//public static string FindGoodsActivityId_HaoDanKu(string itemId, out string sellerId, out double payPrice)
//{
// payPrice = -1;
// sellerId = string.Empty;
// var activityid = string.Empty;
// try
// {
// HttpItem item = new HttpItem()
// {
// URL = $"https://www.haodanku.com/indexapi/get_allitem_list?keyword={itemId}",
// Method = "GET",
// Timeout = 5000,
// ReadWriteTimeout = 10000,
// IsToLower = false,
// 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"
// };
// HttpHelper http = new HttpHelper();
// var result = http.GetHtml(item);
// if (result == null)
// return activityid;
// var dic = HttpExtend.JsonToDictionary(result.Html);
// if (dic == null) return activityid;
// if (dic.ContainsKey("item_info"))
// {
// var item_info = dic["item_info"] as ArrayList;
// if (item_info != null && item_info.Count != 0)
// {
// var data = item_info[0] as Dictionary;
// if (data.ContainsKey("activityid"))
// {
// activityid = data["activityid"].ToString();
// if (data.ContainsKey("userid"))
// sellerId = data["userid"].ToString();
// var price = -1d;
// if (data.ContainsKey("itemendprice"))
// payPrice = double.Parse(data["itemendprice"].ToString());
// //var quan = -1d;
// //if (data.ContainsKey("couponmoney"))
// // quan = double.Parse(data["couponmoney"].ToString());
// //if (quan != -1 && price != -1)
// // oldPrice = price + quan;
// return activityid;
// }
// }
// }
// }
// catch (Exception)
// { }
// return activityid;
//}
//public static string FindGoodsActivityId_XuanDan(string itemId, out string sellerId, out double payPrice)
//{
// payPrice = -1;
// sellerId = string.Empty;
// var activityid = string.Empty;
// try
// {
// HttpItem item = new HttpItem()
// {
// URL = $"http://www.xuandan.com/index.html?key={itemId}",
// Method = "GET",
// Timeout = 5000,
// ReadWriteTimeout = 10000,
// IsToLower = false,
// 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"
// };
// HttpHelper http = new HttpHelper();
// var result = http.GetHtml(item);
// if (result == null)
// return activityid;
// var html = result.Html;
// if (string.IsNullOrWhiteSpace(html)) return activityid;
// var reg = Regex.Match(html, "领券:([^<]+)");
// if (reg.Success)
// {
// var url = reg.Groups[1].Value.Trim();
// reg = Regex.Match(url, @"activityId=(?<活动ID>[A-Za-z0-9]+)");
// if (reg.Success)
// {
// var activity = reg.Groups["活动ID"].Value?.Trim();
// reg = Regex.Match(html, @"sellerId=(?<店铺ID>[^&]*)");
// if (reg.Success)
// sellerId = reg.Groups["店铺ID"].Value;
// reg = Regex.Match(html, @"【券后(?<券后>\d+[[.]{1}\d+?]?)元】");
// if (reg.Success)
// payPrice = double.Parse(reg.Groups["券后"].Value);
// return activity;
// }
// }
// }
// catch (Exception)
// { }
// return activityid;
//}
#endregion
#region
///
/// 通过商品id获取优惠券信息(爬大淘客优惠券信息)
///
///
///
public static TbExCoupon FindGoodsCouponInfo(string itemId)
{
TbExCoupon result = FindGoodsActivityId_DaTaoKe(itemId);
if (result == null)
result = FindGoodsActivityId_HaoDanKu(itemId);
//if (result == null)
// result = FindGoodsActivityId_XuanDan(itemId);
return result;
}
///
/// 通过商品id获取大淘客的信息
///
/// 商品id
///
public static TbExCoupon FindGoodsActivityId_DaTaoKe(string itemId)
{
TbExCoupon exCoupon = null;
try
{
HttpItem item = new HttpItem()
{
//http://dtkapi.ffquan.cn/go_getway/proxy/search?platform=1&page=1&sortType=4&kw=525918728400
URL = $"http://dtkapi.ffquan.cn/go_getway/proxy/search?platform=1&page=1&sortType=4&kw={itemId}",
Method = "GET",
Timeout = 5000,
ReadWriteTimeout = 10000,
IsToLower = false,
UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",
Accept = "text/html, application/xhtml+xml, */*",
ContentType = "text/html"
};
HttpHelper http = new HttpHelper();
var result = http.GetHtml(item);
if (result == null)
return exCoupon;
var tmp = JObject.Parse(result.Html);
var list = (JArray)tmp["data"]["search"]["list"];
if (list != null && list.Count == 1)
{
var data = list[0];
var gid = data["id"].ToString();
var coupon_amount = data["coupon_amount"].ToString();//券金额
var price = data["price"].ToString();//券后价
var original_price = data["original_price"].ToString();//原价
if (string.IsNullOrWhiteSpace(gid))
return exCoupon;
item.URL = $"http://www.dataoke.com/gettpl?gid={gid}&_={HttpExtend.GetTimeStamp()}000";
result = http.GetHtml(item);
if (result == null)
return exCoupon;
var html = result.Html;
if (html.Contains($"item.htm?id={itemId}"))
{
var reg = Regex.Match(html, @"activityId=(?<活动ID>[A-Za-z0-9]+)");
if (reg.Success)
{
exCoupon = new TbExCoupon();
exCoupon.activityId = reg.Groups["活动ID"].Value?.Trim();
reg = Regex.Match(html, @"sellerId=(?<店铺ID>[^&]*)");
if (reg.Success)
exCoupon.sellerId = reg.Groups["店铺ID"].Value;
exCoupon.endPrice = double.Parse(price);
exCoupon.salePrice = double.Parse(original_price);
exCoupon.couponAmount = double.Parse(coupon_amount);
return exCoupon;
}
}
//else
//{
// Console.WriteLine("html = " + html);
//}
}
}
catch (Exception)
{ }
return exCoupon;
}
///
/// 通过商品id获取好单库的信息
///
/// 商品id
///
public static TbExCoupon FindGoodsActivityId_HaoDanKu(string itemId)
{
TbExCoupon exCoupon = null;
try
{
HttpItem item = new HttpItem()
{
URL = $"https://www.haodanku.com/indexapi/get_allitem_list?keyword={itemId}",
Method = "GET",
Timeout = 5000,
ReadWriteTimeout = 10000,
IsToLower = false,
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"
};
HttpHelper http = new HttpHelper();
var result = http.GetHtml(item);
if (result == null)
return exCoupon;
var dic = HttpExtend.JsonToDictionary(result.Html);
if (dic == null)
return exCoupon;
if (dic.ContainsKey("item_info"))
{
var tmp = JObject.Parse(result.Html);
var list = (JArray)(tmp["item_info"]);
if (list != null && list.Count == 1)
{
exCoupon = new TbExCoupon();
var data = list[0];
exCoupon.activityId = data["activityid"].ToString();//优惠券id
exCoupon.sellerId = data["userid"].ToString();//店铺id
exCoupon.endPrice = double.Parse(data["itemendprice"].ToString());//券后价
exCoupon.couponAmount = double.Parse(data["couponmoney"].ToString());//券金额
exCoupon.salePrice = double.Parse(data["itemprice"].ToString());//原价
return exCoupon;
}
}
}
catch (Exception)
{ }
return exCoupon;
}
/////
///// 通过商品id获取选单的信息
/////
///// 商品id
/////
//public static TbExCoupon FindGoodsActivityId_XuanDan(string itemId)
//{
// TbExCoupon exCoupon = null;
// try
// {
// HttpItem item = new HttpItem()
// {
// URL = $"http://www.xuandan.com/index.html?key={itemId}",
// Method = "GET",
// Timeout = 5000,
// ReadWriteTimeout = 10000,
// IsToLower = false,
// 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"
// };
// HttpHelper http = new HttpHelper();
// var result = http.GetHtml(item);
// if (result == null)
// return exCoupon;
// var html = result.Html;
// if (string.IsNullOrWhiteSpace(html))
// return exCoupon;
// var reg = Regex.Match(html, "领券:([^<]+)");
// if (reg.Success)
// {
// var url = reg.Groups[1].Value.Trim();
// reg = Regex.Match(url, @"activityId=(?<活动ID>[A-Za-z0-9]+)");
// if (reg.Success)
// {
// exCoupon = new TbExCoupon();
// var activity = reg.Groups["活动ID"].Value?.Trim();
// reg = Regex.Match(html, @"sellerId=(?<店铺ID>[^&]*)");
// if (reg.Success)
// sellerId = reg.Groups["店铺ID"].Value;
// reg = Regex.Match(html, @"【券后(?<券后>\d+[[.]{1}\d+?]?)元】");
// if (reg.Success)
// payPrice = double.Parse(reg.Groups["券后"].Value);
// return exCoupon;
// }
// }
// }
// catch (Exception)
// { }
// return exCoupon;
//}
#endregion
///
/// 外围淘宝商品信息(优惠券等信息)
///
public class TbExCoupon
{
///
/// 优惠券信息
///
public string activityId { get; set; }
///
/// 店铺Id
///
public string sellerId { get; set; }
///
/// 折后价(活动价)
///
public double salePrice { get; set; }
///
/// 优惠券金额
///
public double couponAmount { get; set; }
///
/// 折后价格减去优惠券金额
///
public double endPrice { get; set; }
}
#endregion
///
/// 保存淘宝基础信息的类
///
public class TbBaseInfo
{
///
/// 宝贝ID
///
public string ItemId { get; set; }
///
/// 月销量
///
public string SellCount { get; set; }
///
/// 价格
///
public string Price { get; set; }
///
/// 店铺名称
///
public string ShopName { get; set; }
///
/// 店铺头像
///
public string ShopIcon { get; set; }
///
///
///
public string UserId { get; set; }
///
/// 商品主图
///
public string ItemImage { get; set; }
///
/// 商品标题
///
public string ItemTitle { get; set; }
///
/// 店铺Id
///
public string SellerId { get; set; }
}
///
/// 淘宝解析方法
///
public class TbAnalysis
{
///
/// 查找宝贝Id的正则表达式
///
private string[] Reg_Item_Ids = { @"item[Ii]d=(?\d{5,})", @"item_id=(?\d{5,})", @"\?id=(?\d{5,})", @"&id=(?\d{5,})", @"/i(?\d{5,})", @"num[Ii]id=(?\d{5,})", @"\?id=(?[a-zA-Z0-9]{5,}-[a-zA-Z0-9]{5,})" };
private string key = "tbanalysis_key";
///
/// 通过宝贝id,查询宝贝所有的信息
///
/// 宝贝ID
/// 返回TbInfo对象,异常返回Null
public TbBaseInfo FindTbInfoByItemId(string itemId)
{
var html = "";
try
{
//var item = TbTools.GetH5Result("mtop.taobao.detail.getdetail", new { itemNumId = itemId, exParams = new { id = itemId }, detail_v = "3.1.1", ttid = "2018@taobao_iphone_9.9.9", utdid = "123123123123123" }, out html);
//var time = ApiClient.Cache.Get(key);
//if (time == null)
// ApiClient.Cache.Set(key, DateTime.Now, 10);
//else
// return null;
var item = TbTools.GetH5Result("mtop.taobao.detail.getdetail", new { itemNumId = itemId, exParams = new { id = itemId }, ttid = "2016@taobao_h5_2.0.0", isSec = "0", ecode = "0", AntiFlood = "true", AntiCreep = "true", H5Request = "true", type = "jsonp", dataType = "jsonp" }, out html);
if (item == null) return null;
if (item.ContainsKey("item"))
{
var _item = item["item"] as Dictionary;
var sellerId = string.Empty;
//这里可以通过图片的地址获取店铺的id
if (_item.ContainsKey("images"))
{
var images = _item["images"] as ArrayList;
if (images != null && images.Count != 0)
{
var reg = Regex.Match(images[0].ToString(), @"http://img.alicdn.com/imgextra/i\d/(?<店铺Id>\d+)/");
if (reg.Success)
sellerId = reg.Groups["店铺Id"].Value;
}
}
var price = string.Empty;//价格
var sellCount = string.Empty;
if (item.ContainsKey("apiStack"))
{
var apiStack = item["apiStack"] as ArrayList;
if (apiStack != null && apiStack.Count != 0)
{
var _apiStack = apiStack[0] as Dictionary;
if (_apiStack.ContainsKey("value"))
{
var valueJsonStr = _apiStack["value"].ToString();
var valueJson = HttpExtend.JsonToDictionary(valueJsonStr);
#region 获取销量 sellCount
var itemTag = valueJson["item"] as Dictionary;
//if (itemTag.ContainsKey("sellCount"))
// sellCount = itemTag["sellCount"].ToString();
if (itemTag.ContainsKey("sellCount"))
{
sellCount = itemTag["sellCount"].ToString();
if (sellCount.Contains("万+"))
{
sellCount = ((int)(decimal.Parse(sellCount.Replace("万+", "")) * 10000m)).ToString();
}
}
else
sellCount = "0";
#endregion
#region 获取价格 price
var priceTag = valueJson["price"] as Dictionary;
if (priceTag.ContainsKey("price"))
{
var priceSub = priceTag["price"] as Dictionary;
if (priceSub.ContainsKey("priceText"))
price = priceSub["priceText"].ToString();
}
if (string.IsNullOrEmpty(price) && priceTag.ContainsKey("transmitPrice"))
{
var transmitPrice = priceTag["transmitPrice"] as Dictionary;
if (transmitPrice.ContainsKey("priceText"))
price = transmitPrice["priceText"].ToString();
}
if (!string.IsNullOrEmpty(price) && price.Contains("-")) //??这里可能还存在带问号的价格,目前不清楚是什么情况,先空着
price = price.Split('-')[0];
if (string.IsNullOrEmpty(price))
price = "0";
#endregion
}
}
if (item.ContainsKey("seller"))
{
var _seller = item["seller"] as Dictionary;
//店铺名称
if (_seller.ContainsKey("shopName"))
{
var shopName = _seller["shopName"].ToString();
//店铺图片
if (_seller.ContainsKey("shopIcon"))
{
string shopIcon = _seller["shopIcon"].ToString();
shopIcon = string.IsNullOrEmpty(shopIcon) ? "https://ss2.bdstatic.com/8_V1bjqh_Q23odCf/pacific/1659832877.jpg" : shopIcon.StartsWith("http") ? _seller["shopIcon"].ToString() : "http:" + _seller["shopIcon"].ToString();
if (string.IsNullOrEmpty(shopIcon) || shopName == "天猫超市")
shopIcon = "https://ss2.bdstatic.com/8_V1bjqh_Q23odCf/pacific/1659832877.jpg";
var userId = string.Empty;
if (_seller.ContainsKey("userId"))
userId = _seller["userId"].ToString();
//主图图片
var item_image = string.Empty;
if (_item.ContainsKey("images"))
item_image = (_item["images"] as ArrayList)[0].ToString();
//商品标题
var item_title = string.Empty;
if (_item.ContainsKey("title"))
item_title = _item["title"].ToString();
return new TbBaseInfo() { ItemId = itemId, ItemImage = item_image, ItemTitle = item_title, Price = price, SellCount = sellCount, ShopIcon = shopIcon, ShopName = shopName, UserId = userId, SellerId = sellerId };
}
}
}
}
}
return null;
}
catch (Exception ex)
{
//EventClient.OnEvent("+++++", ex.Message + " - " + ex.StackTrace + " @@@@@@@ " + html);
}
return null;
}
///
/// 从字符串中获取淘宝宝贝id
///
/// 要查找的字符串
/// 返回查找到的宝贝id,未找到返回空,异常返回异常的信息
public string FindTbItemIdByStr(string str)
{
try
{
//获取淘宝天猫的宝贝id值
for (int i = 0; i < Reg_Item_Ids.Length; i++)
{
var reg = Regex.Match(str, Reg_Item_Ids[i].ToString());
if (reg.Success)
return reg.Groups["id"].Value;
}
return string.Empty;
}
catch (Exception ex)
{
return string.Empty;
}
}
///
/// 活动ID
///
public string activityId = string.Empty;
#region 在线获取口令正则表达式
///
/// 清空正则表达式
///
public static void TklRegToEmpty()
{
tklReg = string.Empty;
}
private static string tklReg = string.Empty;
private static DateTime UpdatetklReg = DateTime.MinValue;
public static string GetTklReg()
{
if (UpdatetklReg.AddMinutes(5) < DateTime.Now)
tklReg = string.Empty;
if (string.IsNullOrWhiteSpace(tklReg))
{
var ali = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType.阿里妈妈);
if (ali == null)
ali = new fl_cps_member() { cpstype = CpsType.阿里妈妈, username = "28592081" };
if (ali != null)
{
var cps = CpsClient.CreateAlimamaRequest(ali);
if (cps != null)
{
for (int i = 0; i < 3; i++)
{
try
{
var data = cps.SendServer("find_wangzhi", "webTool.asmx", new { name = "淘口令中文正则" }).message.ToString();
if (!string.IsNullOrWhiteSpace(data))
{
tklReg = data;
break;
}
continue;
}
catch (Exception)
{
tklReg = string.Empty;
Thread.Sleep(500);
}
}
}
}
UpdatetklReg = DateTime.Now;
}
if (string.IsNullOrWhiteSpace(tklReg))
{
//tklReg = @"(?.*(/|!||,[^\u4e00-\u9fa5])(?[\u4e00-\u9fa5]{11,16})(十|[^\u4e00-\u9fa5]).*)";
tklReg = @"(?.*?(?:(?:\d+:/(?:/|!|,|[^\u4e00-\u9fa5])?)|(?:[^\u4e00-\u9fa5])?)(?[\u4e00-\u9fa5]{11,16})(http:[^\u4e00-\u9fa5]+)?.*)(?:微|乐|云|品|麦|凌|十|口|广|哇|它|厂|[^\u4e00-\u9fa5])?.*";
}
return tklReg;
}
#endregion
///
/// 获取宝贝Id.解析所有的各种链接/淘口令/喵口令等,先解析商品类型的链接,在去解析其他类型的链接
///
/// 要解析内容
/// AlimamaApi对象
/// 返回宝贝Id,找不到返回空,异常返回异常的信息
public string FindItemIdByUrlAndTklAndMkl(string mess, AlimamaApi api, string[] pids = null)
{
try
{
if (mess.Length <= 8) return string.Empty;
string item_id = string.Empty;
if (string.IsNullOrWhiteSpace(mess) ||
Regex.IsMatch(mess, @"\[图片=(.+?)\]") ||
Regex.IsMatch(mess, @"\[视频=(.+?)\]") ||
Regex.IsMatch(mess, @"\[卡片=(.+?)\]") ||
Regex.IsMatch(mess, @"\[公告=(.+?)\]") ||
Regex.IsMatch(mess, @"\[语音=(.+?)\]") ||
mess.Contains("抖音口令") ||
mess.Contains("抖音搜索") ||
mess.Contains("8##") ||
mess.Contains("#小程序://京东")
)
return item_id;
var promotion_id = string.Empty;
var title = string.Empty;
if (!string.IsNullOrWhiteSpace(DYHelper.GetDyGoodsID(mess, out promotion_id, out title)))
return string.Empty;
item_id = FindTbItemIdByStr(mess);
if (!string.IsNullOrEmpty(item_id)) return item_id;
#region 2019年6月10日09:40:31 支持用户发送的语句中存在多个连接
var regs = HttpExtend.RegexMatchesUrl(mess);
if (regs != null && regs.Count != 0)
{
foreach (var item in regs)
{
try
{
var url = item;
item_id = FindTbItemIdByStr(url);//正常的淘宝天猫链接 [ https://detail.tmall.com/item.htm?id=576795776133 && https://item.taobao.com/item.htm?id=573396652123 ]
if (!string.IsNullOrEmpty(item_id)) return item_id;
if (mess.Contains("喵口令"))
{
try
{
var _app = api.SendServer("taobao.tbk.h5.top",
new { api = "mtop.tmall.share.initdialog", param = HttpHelper.ObjectToJson(new { data = HttpHelper.ObjectToJson(new { codes = new string[] { url }, wholeCode = HttpHelper.URLEncode(mess) }) }), v = "1.0" });
if (_app != null && _app.ok)
{
var result = _app.message as Dictionary;
if (result != null && result.ContainsKey("dialog"))
{
result = result["dialog"] as Dictionary;
if (result.ContainsKey("rightBtnActionUrl"))
{
item_id = FindTbItemIdByStr(result["rightBtnActionUrl"].ToString());
if (!string.IsNullOrEmpty(item_id)) return item_id;
}
}
}
}
catch (Exception ex)
{ }
}
//var regUrl = Regex.Match(url, @"(yukhj.com|m.tb.cn|m.yeeoq.top|m.uqlsi|m.rijni|m.gkqmj|m.mulwt|uland\\.taobao\\.com|sjtm.me|aa5d.com|d11a.com|f61[a-z].com|92db.com|yqt.so|e22a.com|jd.hk|f61b.com|detail.m.tmall.hk|k.83jie.com|ewqcxz.com|items.alitrip.com|tmqd.me|detail.tmall.hk|url.cn|taobao.com|mashort.cn|tmall.com|tb.cn|t.cn|detail.yao.95095.com|laiwang.com|jd.com|dwz.cn|juhuasuan.com|detail.m.tmall.com|zmnxbc.com|s.click.taobao|detail.liangxinyao.com)");
//var regUrl = Regex.Match(url, @"(yukhj.com|m.tb.cn|m.yeeoq.top|m.uqlsi|m.rijni|m.gkqmj|m.mulwt|uland\\.taobao\\.com|sjtm.me|aa5d.com|d11a.com|f61[a-z].com|92db.com|yqt.so|e22a.com|f61b.com|detail.m.tmall.hk|k.83jie.com|ewqcxz.com|items.alitrip.com|tmqd.me|detail.tmall.hk|url.cn|taobao.com|mashort.cn|tmall.com|tb.cn|t.cn|detail.yao.95095.com|laiwang.com|dwz.cn|juhuasuan.com|detail.m.tmall.com|zmnxbc.com|s.click.taobao|detail.liangxinyao.com|m.tb.cn)");
var regUrl = Regex.Match(url, @"(yukhj.com|m.tb.cn|m.yeeoq.top|m.uqlsi|m.rijni|m.gkqmj|m.mulwt|uland\\.taobao\\.com|sjtm.me|aa5d.com|d11a.com|f61[a-z].com|92db.com|yqt.so|e22a.com|f61b.com|detail.m.tmall.hk|k.83jie.com|ewqcxz.com|items.alitrip.com|tmqd.me|detail.tmall.hk|url.cn|taobao.com|mashort.cn|tmall.com|tb.cn|detail.yao.95095.com|laiwang.com|dwz.cn|juhuasuan.com|detail.m.tmall.com|zmnxbc.com|s.click.taobao|detail.liangxinyao.com|m.tb.cn)");
if (regUrl.Success)
{
var html = string.Empty;
for (int i = 0; i < 3; i++)
{
var http = new HttpHelper();
html = http.GetHtml(url).Html;
if (html.Contains("超时操作"))
Thread.Sleep(500);
else break;
}
var reg = Regex.Match(html, @"var url = '(?.*?)';");
if (reg.Success)
{
var oriUrl = reg.Groups["url"].Value;
if (string.IsNullOrWhiteSpace(oriUrl))
{
return "00000";
}
item_id = CouponByItemId(oriUrl, api);
}
if (string.IsNullOrWhiteSpace(item_id))
item_id = FindTbItemIdByStr(html);
if (!string.IsNullOrWhiteSpace(item_id)) return item_id;
if (url.Contains("uland.taobao"))
{
item_id = CouponByItemId(url, api);
if (!string.IsNullOrEmpty(item_id)) return item_id;
}
if (url.Contains("p.tb.cn"))//https://p.tb.cn/5syZScgn56Eycz3W1eRKPk
{
var locationA = TbTools.FindLocationByUrl(url);
if (!string.IsNullOrWhiteSpace(locationA))
item_id = FindTbItemIdByStr(locationA);
if (!string.IsNullOrWhiteSpace(item_id))
return item_id;
}
if (url.Contains("s.click.taobao"))//https://s.click.taobao.com/aFIAbOw 这种链接
{
var locationA = TbTools.FindLocationByUrl(url);
if (locationA != null)
{
if (!locationA.Contains("err.taobao.com"))
{
//item_id = CouponByItemId(mess, api);
item_id = CouponByItemId(url, api);
if (!string.IsNullOrEmpty(item_id)) return item_id;
var locationB = TbTools.FindLocationByUrl(locationA);
if (string.IsNullOrWhiteSpace(locationB)) { item_id = string.Empty; }
else
{
var goodsUrl = HttpHelper.URLDecode(locationB.Replace("https://s.click.taobao.com/t_js?tu=", "").Replace("http://s.click.taobao.com/t_js?tu=", ""));
var tb_url = TbTools.FindLocationByUrl(goodsUrl, locationB);//获取到的淘宝链接
if (!string.IsNullOrEmpty(item_id)) return item_id;
}
}
}
else
{
var _html = GetHTML(url);
reg = Regex.Match(_html, "real_jump_address = '(?<真正的跳转地址>[^']+)");
if (reg.Success)
{
var address = reg.Groups["真正的跳转地址"].Value;
//_html = GetHTML(HttpHelper.URLDecode(address).Replace("&", "&"), HttpHelper.URLDecode(url));
for (int i = 0; i < 3; i++)
{
_html = GetHTML(address.Replace("&", "&"), url);
item_id = FindTbItemIdByStr(_html);
if (!string.IsNullOrWhiteSpace(item_id))
return item_id;
else
{
//访问频繁,休息重试3次
Thread.Sleep(500);
}
}
}
}
}
}
mess = mess.Replace(url, "");//清除没用的连接,如果连接无法解析,name下面的淘口令解析将会减轻负担
}
catch (Exception ex)
{ }
}
}
#endregion
//EventClient.OnEvent("", "A0 = " + item_id);
//if (!reg.Success || string.IsNullOrEmpty(item_id))//非链接 淘口令
if (string.IsNullOrEmpty(item_id))//非链接 淘口令
{
if (Util.IsXML(mess))
return string.Empty;
var _mess = Regex.Replace(mess, "Http:/[A-Za-z]", "", RegexOptions.IgnoreCase);
//_mess = Util.RemoveEmoji(_mess);
var tklTmps = new List();
#region 正常口令
var regs1 = Regex.Matches(_mess, "[^A-Za-z0-9]?([A-Za-z0-9]{11})[^A-Za-z0-9]?");
foreach (Match item in regs1)
{
if (item.Success)
{
var tkl = item.Groups[1].Value;
if (Regex.IsMatch(tkl, @"(\d{11})"))
continue;
tklTmps.Add(tkl);
}
}
#endregion
var tklreg = GetTklReg();
regs1 = Regex.Matches(_mess, tklreg, RegexOptions.IgnoreCase);
foreach (Match item in regs1)
{
if (item.Success)
{
var tkl = _mess;// item.Groups["tkl"].Value;
tklTmps.Add(tkl);
}
}
//regs1 = Regex.Matches(_mess, @"[^A-Za-z0-9]?(?[A-Za-z0-9]{5}(?\[0x[A-Za-z0-9]{8}\]|[^A-Za-z0-9]{1,2})[A-Za-z0-9]{6})[^A-Za-z0-9]?");
//foreach (Match item in regs1)
//{
// if (item.Success)
// {
// var tkl = item.Groups["tkl"].Value.Replace(item.Groups["tmp"].Value, "");
// if (Regex.IsMatch(tkl, @"(\d{11})"))
// continue;
// tklTmps.Add(tkl);
// }
//}
//regs1 = Regex.Matches(_mess, @"[^A-Za-z0-9]?(?[A-Za-z0-9]{5}(?\[0x[A-Za-z0-9]{8}\]|[^A-Za-z0-9])[A-Za-z0-9]{6})[^A-Za-z0-9]?");
//foreach (Match item in regs1)
//{
// if (item.Success)
// {
// var tkl = item.Groups["tkl"].Value.Replace(item.Groups["tmp"].Value, "");
// if (Regex.IsMatch(tkl, @"(\d{11})"))
// continue;
// tklTmps.Add(tkl);
// }
//}
tklTmps = tklTmps.Distinct().ToList();
//if (tklTmps != null && tklTmps.Count != 0)
//{
// Dictionary tklDic = new Dictionary();
// foreach (string tkl in tklTmps)
// {
// if (!tklDic.ContainsKey(tkl))
// tklDic.Add(tkl, null);
// try
// {
// var h5 = new h5Top();
// try
// {
// item_id = h5.GetItemIdByTKL(tkl, api);
// if (!string.IsNullOrWhiteSpace(h5.activityId))
// activityId = h5.activityId;
// if (!string.IsNullOrWhiteSpace(item_id))
// return item_id;
// }
// catch (Exception ex)
// { }
// #region 调用淘宝接口
// if (api != null)
// {
// #region 推广位为空时,从数据库中获取推广位数据
// if (pids == null)
// {
// var adzoneInfo = ApiClient.GetSession().FindAdzoneInfos();
// if (adzoneInfo != null)
// {
// var adzones = adzoneInfo.Where(f => f.alliance_id == (int)CpsType.阿里妈妈 && f.adzone_pid_cps_name == api.Member.username && f.adzone_pid != "").ToList();
// if (adzones != null && adzones.Count != 0)
// {
// var adzone = adzones[0];
// var pid = adzone.adzone_pid;
// pids = pid.Split('_');
// }
// }
// }
// #endregion
// if (pids != null)
// {
// for (int i = 0; i < 3; i++)
// {
// try
// {
// var result = api.AnalysisTkPassword(tkl, pids[3], pids[2]);
// if (result != null)
// {
// if (string.IsNullOrWhiteSpace(result.num_iid) == false)
// {
// activityId = result.activityId;
// return result.num_iid;
// }
// else if (string.IsNullOrWhiteSpace(result.origin_url) == false)
// {
// var origin_url = result.origin_url;
// var itemId = h5.AnalysisItemidByTljUrl(origin_url);
// if (string.IsNullOrWhiteSpace(itemId))
// {
// //https://mo.m.tmall.com/page/4575720?shop_id=467416422&tjm_src_bp=lianmeng&ali_trackid=2%3Amm_1754690195_2267550095_112115050458%3A1652094564_031_1590174982&union_lens=lensId%3ATAPI%401651496796%4021077da2_094a_18084e14332_2603%40022DmGvXUZxOvuwwSZ0LoETU&e=zrVP7yuy4rVotn5NVqnsNSD_KSPfxwxAjbefuUrtutMvRYPtLig9CvJWHexRmZcAI4Mf8vGNB9I5gQVXM_6rcSS0mLRQv4Bd_mADjKzV7vKVZ5v92btTAHsIrYMGBr2GBYPMuFXeq-4BuPt5MbeOhNcpn7YIi5VZD6mqIygp0v5Y1G4UzsUP7C8moQkRQa_XEW7UOyhDnSkfiCPkiD6Cz3R-90eN4O9vOXCP7dzEQOKfPMuLv_j__qqFFEONMR2_oHs8zUzui2caaWnKBfgFYluKPxpVF7I8PCr7uRbxpRR5dfvaanbnRU3etiyKgMVl&type=2&tk_cps_param=1754690195&tkFlag=0&tk_cps_ut=1&bxsign=tcdZEytOnK0_AhxV5fosBNu9idGZ5_8gUin4FkyHzftdv0tMZVkZO1xpC-uzCWNPNv09ZNRd_eheS4r7pSoiZhpyKVYrAm48FRABurbYVLtTmI&sourceType=other&suid=6af02016-55bc-4c67-8d07-07cfa0fb7513&ut_sk=1.XJLlO2HWVcIDABY8xNZnqB%2B8_21646297_1652094536032.TaoPassword-WeiXin.tjm_share&un=d09271ea3d8897ed2040bd82ddc2e1ea&share_crt_v=1&un_site=0&spm=a2159r.13376460.0.0&sp_abtk=common_tjm_share_commonInfo&sp_tk=5bCP5LuW5LiK6IO95pyJ5a2Q5LqG5Y676LW35a%2B55LqG&bc_fl_src=share-480627500109-1-0
// if (origin_url.Contains("tmall.com"))
// {
// var res = HttpExtend.GetHtml(new HttpHelper(), origin_url);
// if (!string.IsNullOrWhiteSpace(res.Html))
// {
// var reg = Regex.Match(res.Html, @"item_id=""(\d+)""", RegexOptions.IgnoreCase);
// if (reg.Success)
// {
// return reg.Groups[1].Value;
// }
// }
// }
// }
// }
// }
// }
// catch (Exception ex)
// {
// //945122237(潜意识)请求阿里妈妈接口:{"error_response":{"code":15,"msg":"Remote service error","sub_code":"isv.parse-result-invalid","sub_msg":"淘口令解析结果无效","request_id":"z24mo2uo0obo"}} - 在 Api.Framework.Cps.AlimamaApi.SendTaobaoServer(String _api, Object _data, String _appkey, String _appsecret) 位置 C:\xxxxxxxxxxxxxxxxx
// LogHelper.GetSingleObj().Debug("tkl解析", tkl + " = " + mess + "; 异常:" + ex.Message);
// if (i >= 1)
// throw ex;
// }
// }
// }
// }
// #endregion
// }
// catch (Exception ex)
// {
// tklDic[tkl] = ex;
// if (tklDic.Count < tklTmps.Count)
// continue;
// LogHelper.GetSingleObj().Debug("", $"Oo:{mess} tkl:{tkl} - {ex.Message} - {ex.StackTrace}");
// throw ex;
// }
// }
// //if (tklDic.Count >= tklTmps.Count)
// //{
// // var ex = tklDic.Values.ToList()[0];
// // throw ex;
// //}
//}
mess = Util.RemoveEmoji(mess);
mess = Regex.Replace(mess, @"[]", "");//这里有两个看不见的字符,两个字符不一样,都要删除了(这个只针对Ipad协议)
item_id = GetItemInfoByPass(mess, tklTmps, api, pids);
}
return item_id;
}
catch (Exception ex)
{
//EventClient.OnEvent(this, $"mess={mess}{ex.Message},{ex.StackTrace}");
//淘口令解析结果无效,当前淘口令无效
if (ex.Message.Contains(@"""淘口令转链处理异常""") || ex.Message.Contains(@"淘口令解析结果无效") || ex.Message.Contains(@"""淘口令解析结果"))
{
throw ex;
}
return string.Empty;
}
return string.Empty;
}
private string GetItemInfoByPass(string mess, List tklTmps, AlimamaApi api, string[] pids = null)
{
var item_id = string.Empty;
var h5 = new h5Top();
foreach (string tkl in tklTmps)
{
try
{
item_id = h5.GetItemIdByTKL(tkl, api);
if (!string.IsNullOrWhiteSpace(h5.activityId))
activityId = h5.activityId;
if (!string.IsNullOrWhiteSpace(item_id))
return item_id;
}
catch (Exception ex)
{ }
}
try
{
#region 调用淘宝接口
if (api != null)
{
if (string.IsNullOrWhiteSpace(mess))
{
return string.Empty;
}
#region 推广位为空时,从数据库中获取推广位数据
if (pids == null)
{
var adzoneInfo = ApiClient.GetSession().FindAdzoneInfos();
if (adzoneInfo != null)
{
var adzones = adzoneInfo.Where(f => f.alliance_id == (int)CpsType.阿里妈妈 && f.adzone_pid_cps_name == api.Member.username && f.adzone_pid != "").ToList();
if (adzones != null && adzones.Count != 0)
{
var adzone = adzones[0];
var pid = adzone.adzone_pid;
pids = pid.Split('_');
}
}
}
#endregion
if (pids != null)
{
for (int i = 0; i < 3; i++)
{
try
{
var result = api.AnalysisTkPassword(mess, pids[3], pids[2]);
if (result != null)
{
if (string.IsNullOrWhiteSpace(result.num_iid) == false)
{
activityId = result.activityId;
return result.num_iid;
}
else if (string.IsNullOrWhiteSpace(result.origin_url) == false)
{
var origin_url = result.origin_url;
var itemId = h5.AnalysisItemidByTljUrl(origin_url);
if (string.IsNullOrWhiteSpace(itemId))
{
//https://mo.m.tmall.com/page/4575720?shop_id=467416422&tjm_src_bp=lianmeng&ali_trackid=2%3Amm_1754690195_2267550095_112115050458%3A1652094564_031_1590174982&union_lens=lensId%3ATAPI%401651496796%4021077da2_094a_18084e14332_2603%40022DmGvXUZxOvuwwSZ0LoETU&e=zrVP7yuy4rVotn5NVqnsNSD_KSPfxwxAjbefuUrtutMvRYPtLig9CvJWHexRmZcAI4Mf8vGNB9I5gQVXM_6rcSS0mLRQv4Bd_mADjKzV7vKVZ5v92btTAHsIrYMGBr2GBYPMuFXeq-4BuPt5MbeOhNcpn7YIi5VZD6mqIygp0v5Y1G4UzsUP7C8moQkRQa_XEW7UOyhDnSkfiCPkiD6Cz3R-90eN4O9vOXCP7dzEQOKfPMuLv_j__qqFFEONMR2_oHs8zUzui2caaWnKBfgFYluKPxpVF7I8PCr7uRbxpRR5dfvaanbnRU3etiyKgMVl&type=2&tk_cps_param=1754690195&tkFlag=0&tk_cps_ut=1&bxsign=tcdZEytOnK0_AhxV5fosBNu9idGZ5_8gUin4FkyHzftdv0tMZVkZO1xpC-uzCWNPNv09ZNRd_eheS4r7pSoiZhpyKVYrAm48FRABurbYVLtTmI&sourceType=other&suid=6af02016-55bc-4c67-8d07-07cfa0fb7513&ut_sk=1.XJLlO2HWVcIDABY8xNZnqB%2B8_21646297_1652094536032.TaoPassword-WeiXin.tjm_share&un=d09271ea3d8897ed2040bd82ddc2e1ea&share_crt_v=1&un_site=0&spm=a2159r.13376460.0.0&sp_abtk=common_tjm_share_commonInfo&sp_tk=5bCP5LuW5LiK6IO95pyJ5a2Q5LqG5Y676LW35a%2B55LqG&bc_fl_src=share-480627500109-1-0
if (origin_url.Contains("tmall.com"))
{
var res = HttpExtend.GetHtml(new HttpHelper(), origin_url);
if (!string.IsNullOrWhiteSpace(res.Html))
{
var reg = Regex.Match(res.Html, @"item_id=""(\d+)""", RegexOptions.IgnoreCase);
if (reg.Success)
{
return reg.Groups[1].Value;
}
}
}
}
}
}
}
catch (Exception ex)
{
//945122237(潜意识)请求阿里妈妈接口:{"error_response":{"code":15,"msg":"Remote service error","sub_code":"isv.parse-result-invalid","sub_msg":"淘口令解析结果无效","request_id":"z24mo2uo0obo"}} - 在 Api.Framework.Cps.AlimamaApi.SendTaobaoServer(String _api, Object _data, String _appkey, String _appsecret) 位置 C:\xxxxxxxxxxxxxxxxx
LogHelper.GetSingleObj().Debug("tkl解析", mess + "; 异常:" + ex.Message);
if (i >= 1)
throw ex;
}
}
}
}
#endregion
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Debug("", $"Oo:{mess} - {ex.Message} - {ex.StackTrace}");
throw ex;
}
return item_id;
}
///
/// 获取宝贝Id.解析所有的各种链接/淘口令/喵口令等,先解析商品类型的链接,在去解析其他类型的链接
///
/// 要解析内容
/// AlimamaApi对象
/// 返回宝贝Id,找不到返回空,异常返回异常的信息
[Obsolete("过时的")]
public string FindItemIdByUrlAndTklAndMkl(string mess, AlimamaApi api)
{
try
{
string item_id = string.Empty;
item_id = FindTbItemIdByStr(mess);
if (!string.IsNullOrEmpty(item_id)) return item_id;
#region 2019年6月10日09:40:31 支持用户发送的语句中存在多个连接
var regs = HttpExtend.RegexMatchesUrl(mess);
if (regs != null && regs.Count != 0)
{
foreach (var item in regs)
{
try
{
var url = item;
item_id = FindTbItemIdByStr(url);//正常的淘宝天猫链接 [ https://detail.tmall.com/item.htm?id=576795776133 && https://item.taobao.com/item.htm?id=573396652123 ]
if (!string.IsNullOrEmpty(item_id)) return item_id;
if (mess.Contains("喵口令"))
{
try
{
var _app = api.SendServer("taobao.tbk.h5.top",
new { api = "mtop.tmall.share.initdialog", param = HttpHelper.ObjectToJson(new { data = HttpHelper.ObjectToJson(new { codes = new string[] { url }, wholeCode = HttpHelper.URLEncode(mess) }) }), v = "1.0" });
if (_app != null && _app.ok)
{
var result = _app.message as Dictionary;
if (result != null && result.ContainsKey("dialog"))
{
result = result["dialog"] as Dictionary;
if (result.ContainsKey("rightBtnActionUrl"))
{
item_id = FindTbItemIdByStr(result["rightBtnActionUrl"].ToString());
if (!string.IsNullOrEmpty(item_id)) return item_id;
}
}
}
}
catch (Exception ex)
{ }
}
//var regUrl = Regex.Match(url, @"(yukhj.com|m.tb.cn|m.yeeoq.top|m.uqlsi|m.rijni|m.gkqmj|m.mulwt|uland\\.taobao\\.com|sjtm.me|aa5d.com|d11a.com|f61[a-z].com|92db.com|yqt.so|e22a.com|jd.hk|f61b.com|detail.m.tmall.hk|k.83jie.com|ewqcxz.com|items.alitrip.com|tmqd.me|detail.tmall.hk|url.cn|taobao.com|mashort.cn|tmall.com|tb.cn|t.cn|detail.yao.95095.com|laiwang.com|jd.com|dwz.cn|juhuasuan.com|detail.m.tmall.com|zmnxbc.com|s.click.taobao|detail.liangxinyao.com)");
//var regUrl = Regex.Match(url, @"(yukhj.com|m.tb.cn|m.yeeoq.top|m.uqlsi|m.rijni|m.gkqmj|m.mulwt|uland\\.taobao\\.com|sjtm.me|aa5d.com|d11a.com|f61[a-z].com|92db.com|yqt.so|e22a.com|f61b.com|detail.m.tmall.hk|k.83jie.com|ewqcxz.com|items.alitrip.com|tmqd.me|detail.tmall.hk|url.cn|taobao.com|mashort.cn|tmall.com|tb.cn|t.cn|detail.yao.95095.com|laiwang.com|dwz.cn|juhuasuan.com|detail.m.tmall.com|zmnxbc.com|s.click.taobao|detail.liangxinyao.com|m.tb.cn)");
var regUrl = Regex.Match(url, @"(yukhj.com|m.tb.cn|m.yeeoq.top|m.uqlsi|m.rijni|m.gkqmj|m.mulwt|uland\\.taobao\\.com|sjtm.me|aa5d.com|d11a.com|f61[a-z].com|92db.com|yqt.so|e22a.com|f61b.com|detail.m.tmall.hk|k.83jie.com|ewqcxz.com|items.alitrip.com|tmqd.me|detail.tmall.hk|url.cn|taobao.com|mashort.cn|tmall.com|tb.cn|detail.yao.95095.com|laiwang.com|dwz.cn|juhuasuan.com|detail.m.tmall.com|zmnxbc.com|s.click.taobao|detail.liangxinyao.com|m.tb.cn)");
if (regUrl.Success)
{
var html = string.Empty;
for (int i = 0; i < 3; i++)
{
var http = new HttpHelper();
html = http.GetHtml(url).Html;
if (html.Contains("超时操作"))
Thread.Sleep(500);
else break;
}
var reg = Regex.Match(html, @"var url = '(?.+?)';");
if (reg.Success)
item_id = CouponByItemId(reg.Groups["url"].Value, api);
if (string.IsNullOrWhiteSpace(item_id))
item_id = FindTbItemIdByStr(html);
if (!string.IsNullOrWhiteSpace(item_id)) return item_id;
if (url.Contains("uland.taobao"))
{
item_id = CouponByItemId(url, api);
if (!string.IsNullOrEmpty(item_id)) return item_id;
}
if (url.Contains("s.click.taobao"))//https://s.click.taobao.com/aFIAbOw 这种链接
{
#region 2022年9月5日15:28:32
//var locationA = TbTools.FindLocationByUrl(url);
//if (locationA != null)
//{
// if (!locationA.Contains("err.taobao.com"))
// {
// //item_id = CouponByItemId(mess, api);
// item_id = CouponByItemId(url, api);
// if (!string.IsNullOrEmpty(item_id)) return item_id;
// var locationB = TbTools.FindLocationByUrl(locationA);
// if (string.IsNullOrWhiteSpace(locationB)) { item_id = string.Empty; }
// else
// {
// var goodsUrl = HttpHelper.URLDecode(locationB.Replace("https://s.click.taobao.com/t_js?tu=", "").Replace("http://s.click.taobao.com/t_js?tu=", ""));
// var tb_url = TbTools.FindLocationByUrl(goodsUrl, locationB);//获取到的淘宝链接
// if (!string.IsNullOrEmpty(item_id)) return item_id;
// }
// }
//}
//else
//{
// var _html = GetHTML(url);
// reg = Regex.Match(_html, "real_jump_address = '(?<真正的跳转地址>[^']+)");
// if (reg.Success)
// {
// var address = reg.Groups["真正的跳转地址"].Value;
// //_html = GetHTML(HttpHelper.URLDecode(address).Replace("&", "&"), HttpHelper.URLDecode(url));
// for (int i = 0; i < 3; i++)
// {
// _html = GetHTML(address.Replace("&", "&"), url);
// item_id = FindTbItemIdByStr(_html);
// if (!string.IsNullOrWhiteSpace(item_id))
// return item_id;
// else
// {
// //访问频繁,休息重试3次
// Thread.Sleep(500);
// }
// }
// }
//}
#endregion
var result = api.AnalysisTkUrl(url, "2");
if (result != null)
{
return result.item_id;
}
}
}
mess = mess.Replace(url, "");//清除没用的连接,如果连接无法解析,name下面的淘口令解析将会减轻负担
}
catch (Exception ex)
{ }
}
}
#endregion
//if (!reg.Success || string.IsNullOrEmpty(item_id))//非链接 淘口令
if (string.IsNullOrEmpty(item_id))//非链接 淘口令
{
if (Util.IsXML(mess))
return string.Empty;
var _mess = Regex.Replace(mess, "Http:/[A-Za-z]", "", RegexOptions.IgnoreCase);
var regs1 = Regex.Matches(_mess, "[^A-Za-z0-9]?([A-Za-z0-9]{11})[^A-Za-z0-9]?");
foreach (Match item in regs1)
{
try
{
if (item.Success)
{
try
{
if (api != null)
{
try
{
var adzoneInfo = ApiClient.GetSession().FindAdzoneInfos();
if (adzoneInfo != null)
{
var adzones = adzoneInfo.Where(f => f.alliance_id == (int)CpsType.阿里妈妈 && f.adzone_pid_cps_name == api.Member.username && f.adzone_pid != "").ToList();
if (adzones != null)
{
foreach (var adzone in adzones)
{
try
{
var pid = adzone.adzone_pid;
var pids = pid.Split('_');
var result = api.AnalysisTkPassword(item.Groups[1].Value, pids[3], pids[2]);
if (result != null)
{
if (string.IsNullOrWhiteSpace(result.num_iid) == false)
{
return result.num_iid;
}
}
}
catch (Exception)
{ }
}
}
}
}
catch (Exception ex)
{
EventClient.OnEvent("", ex.Message + " _ " + ex.StackTrace);
}
}
var h5 = new h5Top();
item_id = h5.GetItemIdByTKL(item.Groups[1].Value, api);
if (!string.IsNullOrWhiteSpace(h5.activityId))
activityId = h5.activityId;
if (!string.IsNullOrWhiteSpace(item_id))
return item_id;
else
{
}
//var _temp = api.SendServer("com.taobao.redbull.getpassworddetail", new { password = item.Groups[1].Value });
//if (_temp != null && _temp.ok)
//{
// if (_temp.message.ToString().Contains("口令不存在"))
// return string.Empty;
// var _obj = _temp.message as Dictionary;
// var _url = string.Empty;
// if (_obj.ContainsKey("url"))
// _url = _obj["url"] as string;
// if (!string.IsNullOrEmpty(_url)) return CouponByItemId(_url, api);
//}
//else return "服务器繁忙,请稍后重试!";
}
catch (Exception ex)
{ throw ex; }
}
}
catch (Exception ex)
{
EventClient.OnEvent("", "C = " + ex.Message + ex.StackTrace);
// throw ex;
}
}
}
return item_id;
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"mess={mess}{ex.Message},{ex.StackTrace}");
return string.Empty;
}
}
#region 私域数据相关
///
/// 私域查詢数据的類型
///
public enum PublisherType
{
SpecialId = 0,
ExternalId = 1
}
///
/// 私域用户备案信息查询
///
///
///
/// special_id
public string FindTbPublisherInfoFirst(AlimamaApi api, object _data, PublisherType publisherType = PublisherType.SpecialId)
{
try
{
var result = api.SendTaobao("taobao.tbk.sc.publisher.info.get", _data);
if (result != null && result.ContainsKey("data"))
{
var data = result["data"] as Dictionary;
if (data != null && data.ContainsKey("inviter_list"))
{
var inviter_list = data["inviter_list"] as Dictionary;
if (inviter_list != null && inviter_list.ContainsKey("map_data"))
{
var map_data = inviter_list["map_data"] as ArrayList;
if (map_data != null && map_data.Count != 0)
{
if (map_data.Count == 1)
{
foreach (Dictionary item in map_data)
{
if (publisherType == PublisherType.SpecialId && item.ContainsKey("special_id"))
return item["special_id"].ToString();
if (publisherType == PublisherType.ExternalId && item.ContainsKey("external_id"))
return item["external_id"].ToString();
}
}
}
}
}
}
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"查询私域绑定关系异常:{ex.Message},{ex.StackTrace}");
}
return string.Empty;
}
///
/// 私域用户备案信息查询,默认查询所有
///
/// AlimamaApi对象
/// 参数
public ArrayList FindTbPublisherInfoAll(AlimamaApi api, object _data = null)
{
try
{
if (_data == null)
_data = new { info_type = 2, relation_app = "common", page_size = 1000, external_type = 1 };
var result = api.SendTaobao("taobao.tbk.sc.publisher.info.get", _data);
if (result != null && result.ContainsKey("data"))
{
var data = result["data"] as Dictionary;
if (data != null && data.ContainsKey("inviter_list"))
{
var inviter_list = data["inviter_list"] as Dictionary;
if (inviter_list != null && inviter_list.ContainsKey("map_data"))
{
var map_data = inviter_list["map_data"] as ArrayList;
if (map_data != null && map_data.Count != 0)
return map_data;
}
}
}
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"查询私域绑定关系异常:{ex.Message},{ex.StackTrace}");
}
return new ArrayList();
}
#endregion
///
/// 是否运行淘宝私域功能,用于同步私域数据
///
///
public bool IsRunTBSiYu()
{
try
{
for (int i = 0; i < 2; i++)
{
var config = Util.ReadConfig("插件-淘宝返利-配置", true);//刷新积分管理中的配置文件
if (config == null) continue;
if (config.ContainsKey("QueryComparisonSwitch"))
{
var qComSwitch = config["QueryComparisonSwitch"].ToString();
return qComSwitch == "0";
}
}
}
catch (Exception ex)
{ }
return false;
}
public static string BizSceneId(string itemId)
{
var bizSceneId = "2";
if (itemId.Contains("-"))
{
bizSceneId = "1";
}
return bizSceneId;
}
///
///
///
///
///
///
///
///
///
public Dictionary GetPrivilege(AlimamaApi api, string item_id, string[] pid_split, string biz_scene_id, string external_id = "", string special_id = "")
{
biz_scene_id = BizSceneId(item_id);
object data = null;
if (!string.IsNullOrWhiteSpace(external_id) && !string.IsNullOrWhiteSpace(special_id))
data = new { item_id = item_id, site_id = pid_split[2], adzone_id = pid_split[3], special_id = special_id, external_id = external_id, biz_scene_id = biz_scene_id };
else if (!string.IsNullOrWhiteSpace(external_id))
data = new { item_id = item_id, site_id = pid_split[2], adzone_id = pid_split[3], external_id = external_id, biz_scene_id = biz_scene_id };
else
data = new { item_id = item_id, site_id = pid_split[2], adzone_id = pid_split[3], biz_scene_id = biz_scene_id };
//data = new { item_id = item_id, site_id = pid_split[2], adzone_id = pid_split[3], special_id = special_id };
var privilege = api.SendTaobao("taobao.tbk.privilege.get", data);
if (privilege == null)
{
for (int i = 0; i <= 1; i++)
{
privilege = api.SendTaobao("taobao.tbk.privilege.get", data);
if (privilege != null) break;
Thread.Sleep(200);
}
}
if (privilege == null) throw new Exception("@高佣金转链失败");
return privilege;
}
///
/// 将淘宝url生成淘口令
///
/// 宝贝地址[优惠券地址|宝贝地址]
/// 标题
/// 图片url[宝贝图片,非本地图片]
/// AlimamaApi对象
/// 返回淘口令或空
public string FindTKL(string _url, string title, string logo, AlimamaApi api)
{
try
{
var url = _url;
//注:转淘口令的时候 title 参数存在一些管检测,需要处理。一下转不出来的,将以“淘宝精选商品”为标题
title = title.Replace("", "").Replace("总复习", "");
//title = "123456789";
Dictionary tkl_json = null;
for (int i = 0; i <= 4; i++)
{
if (title.Length < 5)
title = "淘宝商品:" + title;
try
{
tkl_json = api.SendTaobao("taobao.tbk.tpwd.create", new { url = url, text = title, logo = logo });
}
catch (Exception ex)
{
if (ex.Message.Contains("sub_msg\":\"title have illegal characters"))
{
title = "内部优惠通道";
if (i > 2)
{
var tbAnalysis = new TBHelper.TbAnalysis();
url = tbAnalysis.FindShortUrlBySrcUrl(url, api);
}
continue;
}
}
if (tkl_json == null)
{
Thread.Sleep(200);
}
else
{
if ((tkl_json["data"] as Dictionary).Count != 0)
break;
}
title = "内部优惠通道";
}
if (tkl_json == null) throw new Exception();
var data = tkl_json["data"] as Dictionary;
if (data.Count == 0) throw new Exception("生成淘口令失败");
var isoTkl = data["model"].ToString();
//Console.WriteLine(isoTkl);
var tkl = data["password_simple"].ToString();
//Console.WriteLine(tkl);
return tkl;
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"生成淘口令异常:{_url},{ex.Message},{ex.StackTrace}");
return string.Empty;
}
}
///
/// 将淘宝url生成淘口令
///
///
///
///
public TklInfo FindTKL(string url, AlimamaApi api)
{
try
{
Dictionary tkl_json = null;
for (int i = 0; i <= 4; i++)
{
try
{
tkl_json = api.SendTaobao("taobao.tbk.tpwd.create", new { url = url });
}
catch (Exception ex)
{
if (ex.Message.Contains("sub_msg\":\"title have illegal characters"))
{
if (i > 2)
{
var tbAnalysis = new TBHelper.TbAnalysis();
url = tbAnalysis.FindShortUrlBySrcUrl(url, api);
}
continue;
}
}
if (tkl_json == null)
{
Thread.Sleep(200);
}
else
{
if ((tkl_json["data"] as Dictionary).Count != 0)
break;
}
}
if (tkl_json == null) throw new Exception();
var data = tkl_json["data"] as Dictionary;
if (data.Count == 0) throw new Exception("生成淘口令失败");
var model = data["model"].ToString();
var isoTkl = string.Empty;
var urlTmp = HttpExtend.RegexMatchUrl(model);
if (!string.IsNullOrWhiteSpace(urlTmp))
isoTkl = urlTmp.Replace("m.tb", "s.tb");
//Console.WriteLine(isoTkl);
var tkl = data["password_simple"].ToString();
//Console.WriteLine(tkl);
return new TklInfo() { tkl = tkl, isoUrl = isoTkl };
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"生成淘口令异常:{url},{ex.Message},{ex.StackTrace}");
return null;
}
}
///
/// 淘口令信息
///
public class TklInfo
{
public string isoUrl { get; set; }
public string tkl { get; set; }
}
///
/// 生成淘宝短连接
///
/// url链接
/// AlimamaApi对象
/// 返回缩短后的链接或原始链接
public string FindShortUrlBySrcUrl(string url, AlimamaApi api)
{
try
{
Dictionary result = null;
for (int i = 0; i <= 2; i++)
{
result = api.SendTaobao("taobao.tbk.spread.get", new { requests = "[{\"url\":\"" + url + "\"}]" });
if (result == null)
Thread.Sleep(200);
else
{
if (result.ContainsKey("tbk_spread"))
{
var content = ((result["tbk_spread"] as ArrayList)[0] as Dictionary)["content"].ToString();
if (!string.IsNullOrEmpty(content))
return content;
}
}
}
return url;
//var tbk_spread = result["tbk_spread"] as ArrayList;
//var content = (tbk_spread[0] as Dictionary)["content"].ToString();
//return content;
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"生成短连接失败:{url},{ex.Message},{ex.StackTrace}");
return url;
}
}
///
/// 替换淘口令前后符号(系统配置)
///
/// 需要替换的淘口令
///
public string ReplaceTklModifier(string tkl)
{
try
{
//淘口令的前/后符号有没有设置.有设置将替换掉
if (!string.IsNullOrWhiteSpace(ApiClient.Setting.SystemConfig.TklStr_First))
{
var modifier = Util.FindTKlRandomModifier(ApiClient.Setting.SystemConfig.TklStr_First);
tkl = modifier + tkl.Substring(1, tkl.Length - 1);
}
if (!string.IsNullOrWhiteSpace(ApiClient.Setting.SystemConfig.TKLStr_End))
{
var modifier = Util.FindTKlRandomModifier(ApiClient.Setting.SystemConfig.TKLStr_End);
tkl = tkl.Substring(0, tkl.Length - 1) + modifier;
}
if (tkl.Length == 13 && (!Regex.IsMatch(tkl, @"(\d.[A-Za-z0-9]{11}.:\/)") || !Regex.IsMatch(tkl, @"(\d\s[A-Za-z0-9]+\s.[A-Za-z0-9]{11}.\/)")))
tkl = "8 AA1111 " + tkl + "/";
}
catch (Exception ex)
{ }
return tkl;
}
#region 通过优惠券链接获取淘宝宝贝的id
///
/// 通过优惠券链接获取淘宝宝贝的id
///
///
public string CouponByItemId(string url, AlimamaApi api)
{
try
{
var itemId = FindTbItemIdByStr(url);
if (!string.IsNullOrEmpty(itemId))
return itemId;
if (url.Contains(@"uland.taobao.com/coupon"))//这是针对淘宝联盟有优惠券的接口.//https://uland.taobao.com/coupon/edetail
{
var coupon = api.CheckCoupon(url);//将返利接口转成淘宝宝贝接口
if (coupon != null) return coupon.itemId;
}
else if (url.Contains(@"uland.taobao.com/ccoupon"))
{
var x_reg = Regex.Match(url, "e=([^&]+)");
if (x_reg.Success)
{
h5Top h5 = new h5Top();
//https://h5api.m.taobao.com/h5/mtop.taobao.baichuan.smb.get/1.0/?jsv=2.4.0&appKey=12574478&t=1580101872147&sign=0d0cd5819f67b6568a77de5867f151f9&api=mtop.taobao.baichuan.smb.get&v=1.0&type=originaljson&dataType=jsonp&timeout=10000
var rst = h5.M_GET("mtop.alimama.union.xt.biz.zhibo.api.entry", new
{
floorId = 13193,
variableMap = "{\"e\":\"" + HttpHelper.URLDecode(x_reg.Groups[1].Value) + "\",\"type\":\"nBuy\",\"buyMoreSwitch\":\"0\",\"union_lens\":\"lensId:" + HttpHelper.URLDecode(Regex.Match(url, "=lensId:([^&]+)").Groups[1].Value) + "\",\"recoveryId\":\"" + Api.Framework.Tools.Util.GetRandomString(16) + "_" + HttpExtend.GetTimeStamp() + "\"}"
});
if (rst != null && rst.ContainsKey("resultList"))
{
var resultList = rst["resultList"] as ArrayList;
if (resultList != null && resultList.Count != 0)
{
var result = resultList[0] as Dictionary;
if (result != null && result.ContainsKey("itemId"))
return result["itemId"].ToString();
}
}
//Console.WriteLine(HttpHelper.ObjectToJson(rst));
}
}
else if (url.Contains(@"s.click.taobao.com"))//这是针对淘宝联盟没有全的接口.//https://s.click.taobao.com/t?e=m
{
var html = string.Empty;
//获得首次Location 地址
bool first = false;
Next:
string location = GetLocation(url);
if (!string.IsNullOrWhiteSpace(location) && location.StartsWith("https://s.click.taobao.com/t?e="))
{
var _location = GetLocation(location);
if (!string.IsNullOrEmpty(_location)) location = _location;
}
if (!string.IsNullOrEmpty(location))//跳转地址存在
{
//if (location.Contains("uland.taobao.com/coupon/edetail?e="))
if (location.Contains("uland.taobao.com/coupon/edetail?"))
{
var reg = Regex.Match(location, @"(?:&|\?)itemId=(\d+)", RegexOptions.IgnoreCase);
if (reg.Success)
return reg.Groups[1].Value;
string tempHtml = GetHTML(location);
tempHtml = HttpHelper.URLDecode(tempHtml);
var uland = Regex.Match(tempHtml, "&req_url=([^\"]+)");
if (uland.Success)
{
var param_e = Regex.Match(uland.Groups[1].Value, "e=([^&]+)");
if (!param_e.Success)
return string.Empty;
var coupon = api.CheckCoupon(uland.Groups[1].Value);
if (coupon != null)
return coupon.itemId;
}
else
{
//Console.WriteLine(location);
var x_reg = Regex.Match(location, "e=([^&]+)");
if (x_reg.Success)
{
h5Top h5 = new h5Top();
//https://h5api.m.taobao.com/h5/mtop.taobao.baichuan.smb.get/1.0/?jsv=2.4.0&appKey=12574478&t=1580101872147&sign=0d0cd5819f67b6568a77de5867f151f9&api=mtop.taobao.baichuan.smb.get&v=1.0&type=originaljson&dataType=jsonp&timeout=10000
var rst = h5.M_GET("mtop.alimama.union.xt.biz.quan.api.entry", new { floorId = 13193, variableMap = "{\"e\":\"" + HttpHelper.URLDecode(x_reg.Groups[1].Value) + "\",\"src\":\"" + HttpHelper.URLDecode(Regex.Match(location, "&src=([^&]+)").Groups[1].Value) + "\",\"af\":\"4\",\"type\":\"nBuy\",\"buyMoreSwitch\":\"0\",\"union_lens\":\"lensId:" + HttpHelper.URLDecode(Regex.Match(location, "=lensId:([^&]+)").Groups[1].Value) + "\",\"recoveryId\":\"" + Api.Framework.Tools.Util.GetRandomString(16) + "_" + HttpExtend.GetTimeStamp() + "\"}" });
//Console.WriteLine(HttpHelper.ObjectToJson(rst));
if (rst != null && rst.ContainsKey("resultList"))
{
var resultList = rst["resultList"] as ArrayList;
for (int i = 0; i < resultList.Count; i++)
{
var dic = resultList[i] as Dictionary;
if (dic.ContainsKey("itemId"))
{
return dic["itemId"].ToString();
}
}
}
}
//"系统日志,分析地址失败:" + url;}
}
}
else if (location.Contains("uland.taobao.com"))
{
var _reg = Regex.Match(location, "itemId=(\\d+)", RegexOptions.IgnoreCase);
if (_reg.Success)
return _reg.Groups[1].Value;
}
else if (location.Contains("tu="))
{
//获得二次访问地址
string next = HttpHelper.URLDecode(location.Replace("http://s.click.taobao.com/t_js?tu=", "").Replace("https://s.click.taobao.com/t_js?tu=", ""));
html = HttpHelper.URLDecode(GetHTML(next, location));
var reg = Regex.Match(html, @"(?:&|\?)itemId=(\d+)", RegexOptions.IgnoreCase);
if (reg.Success)
return reg.Groups[1].Value;
}
else
return FindTbItemIdByStr(GetHTML(location));
}
else if (!string.IsNullOrEmpty(location) && !first)
{
url = location;
first = true;
goto Next;
}
#region
if (string.IsNullOrWhiteSpace(location))
{
var _html = GetHTML(url);
var reg = Regex.Match(_html, "real_jump_address = '(?<真正的跳转地址>[^']+)");
if (reg.Success)
{
var address = reg.Groups["真正的跳转地址"].Value;
//_html = GetHTML(HttpHelper.URLDecode(address).Replace("&", "&"), HttpHelper.URLDecode(url));
for (int i = 0; i < 3; i++)
{
_html = GetHTML(address.Replace("&", "&"), url);
itemId = FindTbItemIdByStr(_html);
if (!string.IsNullOrWhiteSpace(itemId))
return itemId;
else
{
//访问频繁,休息重试3次
Thread.Sleep(500);
}
}
}
}
#endregion
}
else if (url.Contains("m.tb.cn"))
{
string tempHtml = GetHTML(url);
tempHtml = HttpHelper.URLDecode(tempHtml);
var reg = Regex.Match(tempHtml, "url = '(?<链接>.*?)';");
if (reg.Success)
{
var _url = reg.Groups["链接"].Value;
_url = HttpHelper.URLDecode(_url);
itemId = FindTbItemIdByStr(_url);
if (!string.IsNullOrWhiteSpace(itemId)) return itemId;
}
}
else if (url.Contains("h5.m.taobao.com"))
{
var _url = HttpHelper.URLDecode(HttpHelper.URLDecode(url));
itemId = FindTbItemIdByStr(_url);
if (!string.IsNullOrWhiteSpace(itemId)) return itemId;
}
else if (url.Contains("mo.m.tmall.com"))
{
string tempHtml = GetHTML(url);
itemId = FindTbItemIdByStr(tempHtml);
if (!string.IsNullOrWhiteSpace(itemId)) return itemId;
}
else if (url.Contains("uland.taobao"))
{
}
}
catch (Exception ex)
{
//Console.WriteLine(ex.Message);
}
return string.Empty;
}
private string GetLocation(string url)
{
try
{
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = url,
Method = "get",
IsToLower = false,
Cookie = "",
Referer = "",
Postdata = "",
Timeout = 5000,
ReadWriteTimeout = 15000,
UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.154 Safari/537.36 LBBROWSER",
ContentType = "application/x-www-form-urlencoded",
Allowautoredirect = false,
ProxyIp = ""
};
HttpResult result = http.GetHtml(item);
return result.Header.Get("Location");
}
catch (Exception ex)
{
//EventClient.OnEvent(this, $"Location:{url},{ex.Message},{ex.StackTrace}");
}
return string.Empty;
}
private string GetHTML(string url, string rf = "", string postData = "")
{
try
{
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = url,
Method = (postData == "" ? "get" : "post"),
Postdata = (postData == "" ? "" : postData),
IsToLower = false,
Referer = rf,
Timeout = 5000,
ReadWriteTimeout = 15000,
UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.154 Safari/537.36 LBBROWSER",
ContentType = "application/x-www-form-urlencoded",
Allowautoredirect = true
};
HttpResult result = http.GetHtml(item);
//var location = result.Header.Get("Location");
return result.Html;
}
catch (Exception)
{ }
return string.Empty;
}
#endregion
}
public class TbTools
{
#region H5
///
/// 获取宝贝的基础信息
///
/// [比如: mtop.taobao.detail.getdetail]
/// 链接附带的参数 例如: new { itemNumId = itemId, exParams = new { id = itemId }, ttid = "2016@taobao_h5_2.0.0", isSec = "0", ecode = "0", AntiFlood = "true", AntiCreep = "true", H5Request = "true", type = "jsonp", dataType = "jsonp" }
/// 将获取到的内容以out的形式返回给调用
/// 版本号默认[6.0]
/// Dictionary
public static Dictionary GetH5Result(string api, object data, out string html, string version = "6.0")
{
//bool next = false;
int maxnumber = 5;
int number = 0;
Next:
number++;
string time = ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000).ToString();
string mh5Tk = HttpExtend.GetCookiesValue("_m_h5_tk", Cookies);
mh5Tk = string.IsNullOrEmpty(mh5Tk) ? "f64aa152f943661f750e6212ebc98804_1481170439770" : mh5Tk;
string json = (data.GetType() == typeof(string)) ? data.ToString() : HttpHelper.ObjectToJson(data).Replace("\\u0026", "&").Replace("_params", "param");
string temp_ = mh5Tk + "&" + time + "&" + appKey + "&" + json;
string sign = HttpExtend.GetMD5String(temp_);
string send = HttpExtend.UrlEncode(json);
string temp = string.Format("http://h5api.m.taobao.com/h5/{5}/{4}/?jsv=2.4.11&v={4}&api={5}&appKey={0}&t={1}&callback=mtopjsonp1&type=jsonp&sign={2}&data={3}", appKey, time, sign, send, version, api);
html = M_GET_HTML(temp).Trim();
if (html.Contains("令牌过期") || html.Contains("令牌为空") || html.Contains("失效"))
{
if (number <= 2) goto Next;
}
if (html.Contains("挤爆") && number <= maxnumber)
{
Dictionary _json = HttpExtend.JsonToDictionary(html);
string _url = (_json["data"] as Dictionary)["url"].ToString();
//next = false;
goto Next;
}
var reg = Regex.Match(html, @"^mtopjsonp1\((.*?)\)$", RegexOptions.IgnoreCase);
if (reg.Success)
{
var dic = HttpExtend.JsonToDictionary(reg.Groups[1].Value);
if (dic.ContainsKey("data") && html.Contains("SUCCESS::调用成功"))
return dic["data"] as Dictionary;
throw new Exception(reg.Groups[1].Value);
}
throw new Exception(api + " = " + html);
}
private const string _key = "wmUZgme6iOPOaMTZtPu5DKQ8Dph9fSgy6abFyQv25MD8xOMPBBo0wsLUOVt8r9sk+li11mIg1fs1HPJ75UmIle+w9xhIx/nsXWejuQhXlQV0VyJtzI+id8G+FcyYaog91MfPndJoO3m30fSjE/0KDLDmv1EeQcP24RAzeA29p7c=AQAB";
private const int _appid = 10004;
//private static string _host = "https://cps.api.52cmg.cn";
private static string _cookies = string.Empty;
private static string Cookies
{
get
{
if (string.IsNullOrEmpty(_cookies))
{
HttpHelper http = new HttpHelper();
string cookies = http.GetHtml(new HttpItem() { URL = "http://api.m.taobao.com/h5/mtop.alimama.union.hsf.coupon.get/1.0/?v=1.0&api=mtop.alimama.union.hsf.coupon.get&appKey=12574478&t=1521082116428&callback=mtopjsonp1&type=jsonp&sign=e102e09c3da2505790412f4b5904cfec&data=%7B%22e%22%3A%22kKwRS8jKFeIGQASttHIRqX4ccS%252BmEB0fPkvI%252B9vDGidk3qypIGt1zv02HjWWzK8QrVVJXxMdEXoJP%252FpVy45HN79fwBwwUiqlbZt%252F%252F9VQxkYKu2xm%252BXzUVW7PVn13QcLNcISolD8QJ4rvZt%252BicRrQwg%253D%253D%22%2C%22pid%22%3A%22mm_96747532_17602904_63786428%22%7D", Timeout = 5000, ReadWriteTimeout = 5000 }).Cookie;
_cookies = HttpHelper.GetSmallCookie(cookies);
}
return _cookies;
}
set { _cookies = value; }
}
private const string appKey = "12574478";
const string keyword = "亲,小二正忙,滑动一下马上回来|挤爆|rgv587_flag";
private static string M_GET_HTML(string tempUrl)
{
try
{
HttpItem item = new HttpItem()
{
URL = tempUrl,//URL 必需项
Method = "get",//URL 可选项 默认为Get
IsToLower = false,//得到的HTML代码是否转成小写 可选项默认转小写
Cookie = Cookies + ";random=" + new Random().Next(),//字符串Cookie 可选项
Referer = "http://m.taobao.com",//来源URL 可选项
Timeout = 5000,//连接超时时间 可选项默认为100000
ReadWriteTimeout = 5000,//写入Post数据超时时间 可选项默认为30000
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",//用户的浏览器类型,版本,操作系统 可选项有默认值
ContentType = "text/html",//返回类型 可选项有默认值
Allowautoredirect = false,//是否根据301跳转 可选项
};
HttpHelper http = new HttpHelper();
int i = 0;
Next:
HttpResult result = http.GetHtml(item);
string html = result.Html;
if (Regex.IsMatch(html, keyword))
{
var r = item.SetProxyIP(http, new AuthEndpoint()
{
Host = ApiClient.Setting.SystemConfig.cps_server_api + "api/webtool.asmx/send_data",
Appid = _appid,
Enckey = _key,
Method = "find_proxy"
});
i++;
if (r && i < 3) goto Next;
}
if (!string.IsNullOrEmpty(result.Cookie))
{
Cookies = HttpExtend.UpdateCookies(Cookies, result.Cookie);
}
return html;
}
catch (Exception)
{
return string.Empty;
}
}
#endregion
///
/// 链接跳转获取Location
///
/// 要获取Location的链接
/// 来源
/// 是否跳转
///
public static string FindLocationByUrl(string url, string referer = "", bool allowautoredirect = false)
{
try
{
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = url,
IsToLower = false,
Timeout = 5000,
ReadWriteTimeout = 30000,
UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.154 Safari/537.36 LBBROWSER",
ContentType = "application/x-www-form-urlencoded",
Referer = referer,
Allowautoredirect = allowautoredirect
};
HttpResult result = http.GetHtml(item);
return result.Header.Get("Location");
}
catch (Exception)
{ }
return string.Empty;
}
///
/// 发送API数据
///
/// API接口
/// 参数
///
public static WebResult SendData(string method, object param = null, bool flag = true)
{
int num = 0;
Next:
try
{
AuthEndpoint end = new AuthEndpoint()
{
Appid = _appid,
Enckey = _key,
Host = ApiClient.Setting.SystemConfig.cps_server_api + (flag ? "api/alimama.asmx/send_data" : "api/webtool.asmx/send_data"),
Method = method
};
if (param != null)
{
if (param.GetType() == typeof(Dictionary))
{
var _param = param as Dictionary;
foreach (var item in _param)
{
end.Param[item.Key] = item.Value;
}
}
else
{
var _param = param.GetType().GetProperties();
foreach (var item in _param)
{
end.Param[item.Name] = item.GetValue(param);
}
}
}
HttpHelper http = new HttpHelper(); return http.SendData(end, true);
}
catch (Exception ex)
{
if (ex.Message == "未将对象引用设置到对象的实例。" && num <= 4)
{
num++;
goto Next;
}
return new CsharpHttpHelper.WebResult() { ok = false, message = ex.Message };
}
}
public static string GetLocation(string url)
{
try
{
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = url
};
HttpResult result = http.GetHtml(item);
var _url = result.Header.Get("Location");
if (string.IsNullOrEmpty(_url))
{
return url;
}
else
return _url;
}
catch (Exception)
{
}
return string.Empty;
}
public static string GetLocation(string url, string referer = "", bool allowautoredirect = false)
{
try
{
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = url,
IsToLower = false,
Timeout = 5000,
ReadWriteTimeout = 30000,
UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.154 Safari/537.36 LBBROWSER",
ContentType = "application/x-www-form-urlencoded",
Referer = referer,
Allowautoredirect = allowautoredirect
};
HttpResult result = http.GetHtml(item);
return result.Header.Get("Location");
}
catch (Exception)
{
}
return string.Empty;
}
}
}
}