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

371 lines
15 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.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;
}
}
}