371 lines
15 KiB
C#
371 lines
15 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Text;
|
||
using AllBase;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Threading;
|
||
|
||
namespace Work.CollectClass
|
||
{
|
||
public class ServerTemp
|
||
{
|
||
/// <summary>
|
||
/// 获取服务器缓存
|
||
/// </summary>
|
||
/// <param name="siteId">来源网站</param>
|
||
/// <param name="pid">商品ID</param>
|
||
/// <param name="canUse">缓存是否可用</param>
|
||
/// <returns></returns>
|
||
public static string Get(int siteId, string pid, out bool canUse)
|
||
{
|
||
canUse = false;
|
||
if (siteId == -1)
|
||
pid = "key-" + pid;
|
||
else if (siteId == 1)
|
||
pid = "tb-" + pid;
|
||
else if (siteId == 2)
|
||
pid = "pd-" + pid;
|
||
else if (siteId == 3)
|
||
pid = "al-" + pid;
|
||
else if (siteId == 4)
|
||
pid = "wd-" + pid;
|
||
else if (siteId == 5)//京喜商品的前缀约定为:jx-
|
||
pid = "jx-" + pid;
|
||
else if (siteId == 6)
|
||
pid = "dy-" + pid;
|
||
//string domain = "t3.1n11.com"; //domain = "t1.taojinhu.com:6788";
|
||
//Random rd = new Random();
|
||
//var iR = rd.Next(1, 100);
|
||
//if (iR > 35)
|
||
string domain = "temp-new1.taojinhu.com:10019";
|
||
bool first = true;
|
||
Again:
|
||
string url = "https://" + domain + "/cache.php?id=" + pid;
|
||
string data = UserLogin.GetSignaturex();
|
||
//获取服务器加密
|
||
long timeStamp;
|
||
string getCse = CacheService(pid, out timeStamp);
|
||
if (!string.IsNullOrEmpty(getCse))
|
||
{
|
||
url += "&csign=" + getCse + "&tsign=" + timeStamp;
|
||
}
|
||
string html = GetHtml.Utf8(url, 20);
|
||
if (string.IsNullOrEmpty(html) && first)
|
||
{
|
||
first = false;
|
||
domain = "t3.1n11.com";
|
||
goto Again;
|
||
}
|
||
if (string.IsNullOrEmpty(html) || html.Length < 10 || html == "none" || html == "out time")
|
||
return "";
|
||
string date = BaseRegex.GetMatchRegexString(ref html, @"([\d]{4}-[\d]{2}-[\d]{2})");
|
||
if (string.IsNullOrEmpty(date))
|
||
return "";
|
||
DateTime time;
|
||
if (!DateTime.TryParse(date, out time))
|
||
return "";
|
||
if (time.AddDays(14) > BaseClass.GetServerTimeString()) //time.AddDays(7)
|
||
canUse = true;
|
||
if (time.AddDays(180) > BaseClass.GetServerTimeString() && pid.Contains("content")) //time.AddDays(7)
|
||
canUse = true;
|
||
return html;
|
||
}
|
||
/// <summary>
|
||
/// 获取淘宝服务器缓存
|
||
/// </summary>
|
||
/// <param name="siteId">来源网站</param>
|
||
/// <param name="pid">商品ID</param>
|
||
/// <param name="canUse">缓存是否可用</param>
|
||
/// <returns></returns>
|
||
public static string GetTaoBao(int siteId, string pid, out bool canUse)
|
||
{
|
||
canUse = false;
|
||
if (siteId == -1)
|
||
pid = "key-" + pid;
|
||
if (siteId == 1)
|
||
pid = "tb-" + pid;
|
||
if (siteId == 2)
|
||
pid = "pd-" + pid;
|
||
if (siteId == 3)
|
||
pid = "al-" + pid;
|
||
//string domain = "t3.1n11.com"; //domain = "t1.taojinhu.com:6788";//备用
|
||
//Random rd = new Random();
|
||
//var iR = rd.Next(1, 100);
|
||
//if (iR > 35)
|
||
string domain = "temp-new1.taojinhu.com:10019";
|
||
bool first = true;
|
||
Again:
|
||
string url = "https://" + domain + "/cache.php?id=" + pid;
|
||
//获取服务器加密
|
||
long timeStamp;
|
||
string getCse = CacheService(pid, out timeStamp);
|
||
if (!string.IsNullOrEmpty(getCse))
|
||
{
|
||
url += "&csign=" + getCse + "&tsign=" + timeStamp;
|
||
}
|
||
string html = GetHtml.Utf8(url, 20);
|
||
if (string.IsNullOrEmpty(html) && first)
|
||
{
|
||
first = false;
|
||
domain = "t3.1n11.com";//tempx.1n11.com
|
||
goto Again;
|
||
}
|
||
if (string.IsNullOrEmpty(html) || html.Length < 10 || html == "none" || html == "out time" || html == "error time" || html == "error code")
|
||
return "";
|
||
string date = BaseRegex.GetMatchRegexString(ref html, @"([\d]{4}-[\d]{2}-[\d]{2})");
|
||
if (string.IsNullOrEmpty(date))
|
||
return "";
|
||
DateTime time;
|
||
if (!DateTime.TryParse(date, out time))
|
||
return "";
|
||
if (time.AddDays(7) > BaseClass.GetServerTimeString())//time.AddDays(7)
|
||
canUse = true;
|
||
if (time.AddDays(180) > BaseClass.GetServerTimeString() && pid.Contains("content")) //time.AddDays(7)
|
||
canUse = true;
|
||
|
||
return html;
|
||
}
|
||
|
||
public static bool Set(int siteId, string pid, string content)
|
||
{
|
||
if (siteId == -1)
|
||
pid = "key-" + pid;
|
||
else if (siteId == 1)
|
||
pid = "tb-" + pid;
|
||
else if (siteId == 2)
|
||
pid = "pd-" + pid;
|
||
else if (siteId == 3)
|
||
pid = "al-" + pid;
|
||
else if (siteId == 4)
|
||
pid = "wd-" + pid;
|
||
else if (siteId == 5)
|
||
pid = "jx-" + pid;
|
||
else if (siteId == 6)
|
||
pid = "dy-" + pid;
|
||
string domain = "t3a.1n11.com";
|
||
string domainx = "temp-new1.taojinhu.com:10018";
|
||
|
||
byte[] contentByte = Encoding.UTF8.GetBytes(content);
|
||
string url = "https://" + domain + "/cache.php?act=savex&id=" + pid;
|
||
string urlx = "https://" + domainx + "/cache.php?act=savex&id=" + pid;
|
||
//获取服务器加密
|
||
long timeStamp;
|
||
string getCse = CacheService(pid, out timeStamp);
|
||
if (!string.IsNullOrEmpty(getCse))
|
||
{
|
||
url += "&csign=" + getCse + "&tsign=" + timeStamp;
|
||
urlx += "&csign=" + getCse + "&tsign=" + timeStamp;
|
||
}
|
||
string html = GetHtml.RequestImg(url, contentByte);
|
||
html = GetHtml.RequestImg(urlx, contentByte);
|
||
return html == "ok";
|
||
}
|
||
|
||
//密码 = 当前月份(202003)+ dfhjew&*4<>.,/-=+~`8sazfhy&6544#^fdg/DfgJSB
|
||
//签名变量csign算法 = md5(密码 + 时间戳(秒)+ $id(例子:tb-main-123456)+ 密码)
|
||
private static string EncryptionPassword = "dfhjew&*4<>.,/-=+~`8sazfhy&6544#^fdg/DfgJSB";
|
||
public static string CacheService(string ProductId, out long time)
|
||
{
|
||
string NewEncryptionPassword = BaseClass.GetServerTimeString().ToString("yyyyMM") + EncryptionPassword;
|
||
time = BaseClass.DateTimeToTimestampSeconds(DateTime.Now) + BaseClass.TimeDifferent;
|
||
if (string.IsNullOrEmpty(ProductId))
|
||
{
|
||
return "";
|
||
}
|
||
string csign = "";
|
||
csign = Md5Base.GetMd5(NewEncryptionPassword + time + ProductId + NewEncryptionPassword).ToLower();
|
||
return csign;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取微店缓存上家数据
|
||
/// </summary>
|
||
/// <param name="upProduct"></param>
|
||
/// <returns></returns>
|
||
public static List<Tuple<string, int, int>> GetWeiDianCache(ProductCollectBase upProduct)
|
||
{
|
||
var mappingResultWd = new List<Tuple<string, int, int>>();
|
||
string tagStr = "vd";
|
||
string vdHtml = "";
|
||
string fromStr = "";
|
||
if (upProduct.from_site_id == 1)
|
||
fromStr = "tb-";
|
||
if (upProduct.from_site_id == 3)
|
||
fromStr = "al-";
|
||
else if (upProduct.from_site_id == 2)
|
||
fromStr = "pd-";
|
||
|
||
string url = BaseClass.BuildObjString("data_change&act=get_pid");
|
||
string data = "";
|
||
// 根据商品id查找缓存
|
||
if (string.IsNullOrEmpty(vdHtml) || vdHtml.ToLower().Contains("error"))
|
||
{
|
||
long insertGoodId = Convert.ToInt64(upProduct.from_id) % 1024;
|
||
data = "&product_id=" + fromStr + tagStr + upProduct.from_id
|
||
+ "&img_id="
|
||
+ "&suffix=" + insertGoodId
|
||
+ "&site_id=&" + UserLogin.GetSignaturex();
|
||
|
||
vdHtml = GetHtml.PostUtf8(url, data);
|
||
if (string.IsNullOrEmpty(vdHtml) || vdHtml.ToLower().Contains("error"))
|
||
vdHtml = GetHtml.PostUtf8(url, data);
|
||
// 读取缓存成功
|
||
if (!string.IsNullOrEmpty(vdHtml) && !vdHtml.ToLower().Contains("error"))
|
||
{
|
||
string siteId = BaseRegex.GetMatchRegexString(vdHtml, "\"site_id\":\"([\\s\\S]+?)\"");
|
||
string content = BaseRegex.GetMatchRegexString(vdHtml, "\"content\":\"([\\s\\S]+?)(])\"");
|
||
if (content != null)
|
||
{
|
||
content = content.Replace("\\", "") + "]";
|
||
}
|
||
else
|
||
{
|
||
content = BaseRegex.GetMatchRegexString(vdHtml, "\"content\":\"([\\s\\S]+?)\"");
|
||
}
|
||
try
|
||
{
|
||
var tupleItems = content.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
|
||
foreach (var tupleItem in tupleItems)
|
||
{
|
||
var items = tupleItem.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
|
||
if (items.Length >= 2 && items[0].Length > 5)
|
||
{
|
||
try
|
||
{
|
||
var item1 = items[0];
|
||
var item2 = items[1];
|
||
var item3 = items.Length >= 3 ? items[2] : items[1];
|
||
mappingResultWd.Add(new Tuple<string, int, int>(item1, Convert.ToInt32(item2), Convert.ToInt32(item3)));
|
||
}
|
||
catch
|
||
{
|
||
}
|
||
}
|
||
else if (items.Length == 1 && items[0].StartsWith("tit_"))
|
||
{
|
||
// 微店商品标题
|
||
//if (string.IsNullOrEmpty(prod.ProductTitle))
|
||
//{
|
||
// prod.ProductTitle = items[0].Replace("tit_", "");
|
||
// prod.ProductTitle = GetHtml.Unicode2String(prod.ProductTitle).Replace("\\/", "/");
|
||
//}
|
||
}
|
||
}
|
||
}
|
||
catch
|
||
{
|
||
}
|
||
}
|
||
}
|
||
return mappingResultWd;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据商品标题寻找微店商品缓存
|
||
/// </summary>
|
||
/// <param name="title">商品标题</param>
|
||
/// <param name="mappingFrom"></param>
|
||
/// <param name="isVDian"></param>
|
||
/// <returns></returns>
|
||
public static List<Tuple<string, int, int>> GetFakeCacheVDianTitle(string productTitle)
|
||
{
|
||
var result = new List<Tuple<string, int, int>>();
|
||
var html = "";
|
||
|
||
if (string.IsNullOrEmpty(productTitle))
|
||
return result;
|
||
|
||
string url = BaseClass.BuildObjString("data_change&act=get_cache_title");
|
||
string data = "";
|
||
// 根据商品id查找缓存
|
||
if (string.IsNullOrEmpty(html) || html.ToLower().Contains("error"))
|
||
{
|
||
string tid = Md5Base.GetMd5(productTitle).Substring(8, 16);
|
||
long suffix = Math.Abs(BaseClass.GetLong(tid)) % 1024;
|
||
data = "&tid=" + tid
|
||
+ "&suffix=" + suffix
|
||
+ "&" + UserLogin.GetSignaturex();
|
||
|
||
html = GetHtml.PostUtf8(url, data);
|
||
if (string.IsNullOrEmpty(html))
|
||
html = GetHtml.PostUtf8(url, data);
|
||
}
|
||
// 读取缓存成功
|
||
if (!string.IsNullOrEmpty(html) && !html.ToLower().Contains("error"))
|
||
{
|
||
string content = BaseRegex.GetMatchRegexString(html, "\"content\":\"([\\s\\S]+?)(])\"");
|
||
if (content != null)
|
||
{
|
||
content = content.Replace("\\", "") + "]";
|
||
}
|
||
else
|
||
{
|
||
content = BaseRegex.GetMatchRegexString(html, "\"content\":\"([\\s\\S]+?)\"");
|
||
}
|
||
|
||
try
|
||
{
|
||
var tupleItems = content.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
|
||
foreach (var tupleItem in tupleItems)
|
||
{
|
||
var items = tupleItem.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
|
||
if (items.Length >= 2 && items[0].Length > 5)
|
||
{
|
||
try
|
||
{
|
||
var item1 = items[0];
|
||
var item2 = items[1];
|
||
var item3 = items.Length >= 3 ? items[2] : items[1];
|
||
result.Add(new Tuple<string, int, int>(item1, Convert.ToInt32(item2), Convert.ToInt32(item3)));
|
||
}
|
||
catch
|
||
{
|
||
}
|
||
}
|
||
}
|
||
}
|
||
catch
|
||
{
|
||
}
|
||
return result;
|
||
}
|
||
return null;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据价格区间筛选可以满足Relation条件的微店商品
|
||
/// </summary>
|
||
/// <param name="prodList"></param>
|
||
/// <param name="minPrice"></param>
|
||
/// <param name="maxPrice"></param>
|
||
/// <returns></returns>
|
||
public static List<Tuple<string, int, int>> FilteWeiDianProducts(List<Tuple<string, int, int>> prodList, int minPrice, int maxPrice)
|
||
{
|
||
if (prodList == null)
|
||
return new List<Tuple<string, int, int>>();
|
||
if (prodList.Count == 0)
|
||
return prodList;
|
||
var result = prodList.Where(p => !string.IsNullOrEmpty(p.Item1) && p.Item2 >= minPrice && p.Item3 >= maxPrice && ((p.Item3 < maxPrice * 3.5M) || (p.Item3 < maxPrice + 3000))).ToList();
|
||
return result;
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 获取净化数据
|
||
/// </summary>
|
||
/// <param name="upProduct"></param>
|
||
/// <returns></returns>
|
||
public static string GetJinHuaCache(string pid)
|
||
{
|
||
string url = BaseClass.LoginApiUrl + "?obj=pinbaobao/fession_api&act=get_detail";
|
||
StringBuilder sb = new StringBuilder();
|
||
sb.Append("&fession_id=" + pid);
|
||
string data = UserLogin.GetSignaturex() + sb;
|
||
string html = GetHtml.PostUtf8(url, data);
|
||
html = GetHtml.Decode(html).Replace("\\/", "/").Replace(@"\", "");
|
||
return html;
|
||
}
|
||
}
|
||
}
|