结构调整
This commit is contained in:
@@ -1,174 +0,0 @@
|
||||
using Newtonsoft.Json;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
|
||||
namespace dy.net.utils
|
||||
{
|
||||
public class BogusManager
|
||||
{
|
||||
/// <summary>
|
||||
/// 字符串方法生成X-Bogus参数
|
||||
/// </summary>
|
||||
/// <param name="endpoint">请求端点</param>
|
||||
/// <param name="userAgent">用户代理</param>
|
||||
/// <returns>带X-Bogus的完整端点</returns>
|
||||
public static string XbStr2Endpoint(string endpoint, string userAgent)
|
||||
{
|
||||
try
|
||||
{
|
||||
var (finalEndpoint, _) = XBogusManager.GetXBogus(endpoint, userAgent);
|
||||
return finalEndpoint;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new InvalidOperationException($"生成X-Bogus失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 字典方法生成X-Bogus参数
|
||||
/// </summary>
|
||||
/// <param name="baseEndpoint">基础端点</param>
|
||||
/// <param name="parameters">请求参数</param>
|
||||
/// <param name="userAgent">用户代理</param>
|
||||
/// <returns>带X-Bogus的完整端点</returns>
|
||||
public static string XbModel2Endpoint(string baseEndpoint, Dictionary<string, string> parameters, string userAgent)
|
||||
{
|
||||
if (parameters == null)
|
||||
throw new ArgumentException("参数必须是字典类型");
|
||||
|
||||
// 构建参数字符串
|
||||
var paramStr = string.Join("&", parameters.Select(kv => $"{kv.Key}={HttpUtility.UrlEncode(kv.Value)}"));
|
||||
|
||||
try
|
||||
{
|
||||
var (_, xbValue) = XBogusManager.GetXBogus(paramStr, userAgent);
|
||||
// 检查基础端点是否已有查询参数
|
||||
var separator = baseEndpoint.Contains("?") ? "&" : "?";
|
||||
return $"{baseEndpoint}{separator}{paramStr}&X-Bogus={xbValue}";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new InvalidOperationException($"生成X-Bogus失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class XBogusManager
|
||||
{
|
||||
/// <summary>
|
||||
/// 生成X-Bogus签名
|
||||
/// </summary>
|
||||
/// <param name="input">输入字符串(参数或完整URL)</param>
|
||||
/// <param name="userAgent">用户代理</param>
|
||||
/// <returns>(带签名的URL,签名值)</returns>
|
||||
public static (string, string) GetXBogus(string input, string userAgent)
|
||||
{
|
||||
// X-Bogus核心算法实现(参考公开逆向分析结果)
|
||||
// 注意:该算法可能随版本更新而变化,需根据实际情况调整
|
||||
|
||||
// 1. 提取关键信息
|
||||
var isUrl = input.Contains("http") || input.Contains("?");
|
||||
string queryString = isUrl ? HttpUtility.ParseQueryString(new Uri(input).Query).ToString() : input;
|
||||
|
||||
// 2. 生成基础哈希
|
||||
var hash = GenerateBaseHash(queryString, userAgent);
|
||||
|
||||
// 3. 应用签名算法
|
||||
var xbValue = ComputeXBogus(hash, userAgent);
|
||||
|
||||
// 4. 构建结果
|
||||
if (isUrl)
|
||||
{
|
||||
var uri = new Uri(input);
|
||||
var newQuery = string.IsNullOrWhiteSpace(uri.Query)
|
||||
? $"X-Bogus={xbValue}"
|
||||
: $"{uri.Query.Substring(1)}&X-Bogus={xbValue}";
|
||||
return ($"{uri.Scheme}://{uri.Host}{uri.AbsolutePath}?{newQuery}", xbValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
return ($"X-Bogus={xbValue}", xbValue);
|
||||
}
|
||||
}
|
||||
|
||||
private static string GenerateBaseHash(string input, string userAgent)
|
||||
{
|
||||
// 基础哈希计算逻辑
|
||||
using (var sha1 = System.Security.Cryptography.SHA1.Create())
|
||||
{
|
||||
var bytes = Encoding.UTF8.GetBytes($"{input}_{userAgent}_3.0.0");
|
||||
var hashBytes = sha1.ComputeHash(bytes);
|
||||
return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
|
||||
}
|
||||
}
|
||||
|
||||
private static string ComputeXBogus(string baseHash, string userAgent)
|
||||
{
|
||||
// 核心签名计算(模拟算法,实际需根据最新逆向结果调整)
|
||||
var time = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;
|
||||
var rand = new Random();
|
||||
var randStr = new string(Enumerable.Repeat("abcdefghijklmnopqrstuvwxyz0123456789", 6)
|
||||
.Select(s => s[rand.Next(s.Length)]).ToArray());
|
||||
|
||||
// 组合签名
|
||||
return $"DFSz{time:x8}{randStr}{baseHash.Substring(0, 16)}";
|
||||
}
|
||||
}
|
||||
|
||||
// 其他辅助类示例
|
||||
public class TokenManager
|
||||
{
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 生成msToken
|
||||
/// </summary>
|
||||
public static async Task<string> GenRealMsTokenAsync()
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
using HttpClient _httpClient = new HttpClient();
|
||||
var payload = new
|
||||
{
|
||||
magic = 538969122,
|
||||
version = 1,
|
||||
dataType = 8,
|
||||
strData = @"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",
|
||||
tspFromClient = DateTimeUtil.GetUnixTimestampMilliseconds()
|
||||
};
|
||||
|
||||
var content = new StringContent(JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json");
|
||||
_httpClient.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.47");
|
||||
|
||||
var response = await _httpClient.PostAsync("https://mssdk.bytedance.com/web/report", content);
|
||||
response.EnsureSuccessStatusCode();
|
||||
var sss = await response.Content.ReadAsStringAsync();
|
||||
//var cookies = response.Headers.GetValues("Set-Cookie");
|
||||
|
||||
var msToken = response.Headers.GetValues("X-Ms-Token").FirstOrDefault();
|
||||
|
||||
//var msToken = cookies.FirstOrDefault(c => c.StartsWith("msToken="))?.Split(';')[0].Split('=')[1];
|
||||
|
||||
if (msToken != null && (msToken.Length != 120 || msToken.Length != 128))
|
||||
return msToken;
|
||||
|
||||
throw new Exception("msToken格式不正确");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 生成虚假token
|
||||
return GenFalseMsToken();
|
||||
}
|
||||
}
|
||||
|
||||
public static string GenFalseMsToken()
|
||||
{
|
||||
var rand = new Random();
|
||||
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
||||
return new string(Enumerable.Repeat(chars, 126)
|
||||
.Select(s => s[rand.Next(s.Length)]).ToArray()) + "==";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,337 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace dy.net.utils
|
||||
{
|
||||
/// <summary>
|
||||
/// 抖音网页端请求参数字典管理类
|
||||
/// 提供各类接口的标准化参数字典,对外暴露的属性名称和返回类型保持不变
|
||||
/// </summary>
|
||||
public static class DouyinBaseParamDics
|
||||
{
|
||||
/// <summary>
|
||||
/// 收藏列表参数(用户收藏的内容)
|
||||
/// </summary>
|
||||
public static Dictionary<string, string> CollectParams { get; } = InitializeUserCollectParams();
|
||||
|
||||
/// <summary>
|
||||
/// 用户收藏参数(与 CollectParams 功能区分,保留原始定义)
|
||||
/// </summary>
|
||||
public static Dictionary<string, string> FavoriteParams { get; } = InitializeUserFavoriteParams();
|
||||
|
||||
/// <summary>
|
||||
/// 博主发布作品参数
|
||||
/// </summary>
|
||||
public static Dictionary<string, string> UpderPostParams { get; } = InitializeUpderPostParams();
|
||||
|
||||
/// <summary>
|
||||
/// 我关注的博主列表参数
|
||||
/// </summary>
|
||||
public static Dictionary<string, string> MyFollowParams { get; } = InitializeMyFollowParams();
|
||||
|
||||
/// <summary>
|
||||
/// 视频详情
|
||||
/// </summary>
|
||||
public static Dictionary<string, string> ViedoDetailParam { get; } = InitializeViedoDetailParam();
|
||||
|
||||
/// <summary>
|
||||
/// 抖音作品列表请求参数(适配接口:https://www.douyin.com/aweme/v1/web/aweme/post/)
|
||||
/// </summary>
|
||||
public static Dictionary<string, string> InitializeDouyinPostParams()
|
||||
{
|
||||
// 基于基础参数扩展,减少冗余
|
||||
var parameters = GetBaseParameters();
|
||||
|
||||
// 覆盖基础参数中不同的值
|
||||
parameters["version_code"] = "290100";
|
||||
parameters["version_name"] = "29.1.0";
|
||||
parameters["screen_width"] = "1707";
|
||||
parameters["screen_height"] = "1067";
|
||||
parameters["browser_name"] = "Chrome";
|
||||
parameters["browser_version"] = "142.0.0.0";
|
||||
parameters["engine_version"] = "142.0.0.0";
|
||||
parameters["cpu_core_num"] = "32";
|
||||
parameters["support_h265"] = "1";
|
||||
parameters["support_dash"] = "1";
|
||||
|
||||
// 添加特有参数
|
||||
parameters.AddRange(new Dictionary<string, string>
|
||||
{
|
||||
{"sec_user_id", ""},
|
||||
{"max_cursor", "0"},
|
||||
{"locate_item_id", "7576282367263807451"},
|
||||
{"locate_query", "false"},
|
||||
{"count", "18"},
|
||||
{"show_live_replay_strategy", "1"},
|
||||
{"need_time_list", "1"},
|
||||
{"time_list_query", "0"},
|
||||
{"publish_video_strategy_type", "2"},
|
||||
{"from_user_page", "1"},
|
||||
{"webid", "7574080345697584675"},
|
||||
{"uifid", ""},
|
||||
{"msToken", ""},
|
||||
{"a_bogus", ""},
|
||||
{"verifyFp", ""},
|
||||
{"fp", ""},
|
||||
{"x-secsdk-web-expire", ""},
|
||||
{"x-secsdk-web-signature", ""},
|
||||
{"cut_version", "1"}
|
||||
});
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
#region 私有初始化方法
|
||||
|
||||
/// <summary>
|
||||
/// 初始化收藏列表参数
|
||||
/// </summary>
|
||||
private static Dictionary<string, string> InitializeUserCollectParams()
|
||||
{
|
||||
var parameters = GetBaseParameters();
|
||||
|
||||
// 覆盖基础参数
|
||||
parameters["version_code"] = "290100";
|
||||
parameters["version_name"] = "29.1.0";
|
||||
parameters["screen_width"] = "1920";
|
||||
parameters["screen_height"] = "1080";
|
||||
parameters["browser_version"] = "130.0.0.0";
|
||||
parameters["engine_version"] = "130.0.0.0";
|
||||
parameters["cpu_core_num"] = "12";
|
||||
|
||||
// 添加特有参数
|
||||
parameters.AddRange(new Dictionary<string, string>
|
||||
{
|
||||
{"from_user_page", "1"},
|
||||
{"locate_query", "false"},
|
||||
{"need_time_list", "1"},
|
||||
{"show_live_replay_strategy", "1"},
|
||||
{"time_list_query", "0"}
|
||||
});
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化用户收藏参数
|
||||
/// </summary>
|
||||
private static Dictionary<string, string> InitializeUserFavoriteParams()
|
||||
{
|
||||
var parameters = GetBaseParameters();
|
||||
|
||||
// 覆盖基础参数
|
||||
parameters["version_code"] = "170400";
|
||||
parameters["version_name"] = "17.4.0";
|
||||
parameters["screen_width"] = "1536";
|
||||
parameters["screen_height"] = "960";
|
||||
parameters["browser_version"] = "140.0.0.0";
|
||||
parameters["engine_version"] = "140.0.0.0";
|
||||
parameters["cpu_core_num"] = "20";
|
||||
parameters["support_h265"] = "1";
|
||||
parameters["support_dash"] = "1";
|
||||
|
||||
// 添加特有参数
|
||||
parameters.AddRange(new Dictionary<string, string>
|
||||
{
|
||||
{"min_cursor", "0"},
|
||||
{"cut_version", "1"},
|
||||
{"count", "18"}
|
||||
});
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化博主发布作品参数
|
||||
/// </summary>
|
||||
private static Dictionary<string, string> InitializeUpderPostParams()
|
||||
{
|
||||
// 该接口参数差异较大,单独初始化(保留原始参数完整)
|
||||
return new Dictionary<string, string>
|
||||
{
|
||||
{"WebIdLastTime", "1714385892"},
|
||||
{"aid", "1988"},
|
||||
{"app_language", "zh-Hans"},
|
||||
{"app_name", "tiktok_web"},
|
||||
{"browser_language", "zh-CN"},
|
||||
{"browser_name", "Mozilla"},
|
||||
{"browser_online", "true"},
|
||||
{"browser_platform", "Win32"},
|
||||
{"browser_version", "5.0%20%28Windows%29"},
|
||||
{"cookie_enabled", "true"},
|
||||
{"count", "18"},
|
||||
{"coverFormat", "2"},
|
||||
{"cursor", "0"},
|
||||
{"data_collection_enabled", "true"},
|
||||
{"device_id", "7380187414842836523"},
|
||||
{"device_platform", "webapp"},
|
||||
{"channel", "channel_pc_web"},
|
||||
{"focus_state", "true"},
|
||||
{"from_page", "user"},
|
||||
{"history_len", "3"},
|
||||
{"is_fullscreen", "false"},
|
||||
{"is_page_visible", "true"},
|
||||
{"language", "zh-Hans"},
|
||||
{"locate_item_id", ""},
|
||||
{"needPinnedItemIds", "true"},
|
||||
{"odinId", "7404669909585003563"},
|
||||
{"os", "windows"},
|
||||
{"post_item_list_request_type", "0"},
|
||||
{"priority_region", "US"},
|
||||
{"referer", ""},
|
||||
{"region", "US"},
|
||||
{"screen_height", "827"},
|
||||
{"screen_width", "1323"},
|
||||
{"secUid", ""},
|
||||
{"sec_user_id", ""},
|
||||
{"tz_name", "America%2FLos_Angeles"},
|
||||
{"user_is_login", "true"},
|
||||
{"webcast_language", "zh-Hans"},
|
||||
{"msToken", ""}
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化我关注的博主列表参数
|
||||
/// </summary>
|
||||
private static Dictionary<string, string> InitializeMyFollowParams()
|
||||
{
|
||||
var parameters = GetBaseParameters();
|
||||
|
||||
// 覆盖基础参数
|
||||
parameters["version_code"] = "170400";
|
||||
parameters["version_name"] = "17.4.0";
|
||||
parameters["screen_width"] = "1707";
|
||||
parameters["screen_height"] = "1067";
|
||||
parameters["browser_name"] = "Edge";
|
||||
parameters["browser_version"] = "141.0.0.0";
|
||||
parameters["engine_version"] = "141.0.0.0";
|
||||
parameters["cpu_core_num"] = "32";
|
||||
parameters["support_h265"] = "1";
|
||||
parameters["support_dash"] = "1";
|
||||
|
||||
// 添加特有参数
|
||||
parameters.AddRange(new Dictionary<string, string>
|
||||
{
|
||||
{"user_id", ""},//空着
|
||||
{"sec_user_id", ""},
|
||||
{"offset", "40"},
|
||||
{"min_time", "0"},
|
||||
{"max_time", "0"},
|
||||
{"count", "20"},
|
||||
{"source_type", "4"},
|
||||
{"gps_access", "0"},
|
||||
{"address_book_access", "0"},
|
||||
{"is_top", "1"},
|
||||
{"webid", "7577203855940994560"},
|
||||
{"uifid", ""},
|
||||
{"msToken", ""},
|
||||
{"a_bogus", ""},
|
||||
{"verifyFp", ""},
|
||||
{"fp", ""}
|
||||
});
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 基础参数与扩展方法
|
||||
|
||||
/// <summary>
|
||||
/// 获取抖音网页端基础参数字典(所有接口的公共参数)
|
||||
/// </summary>
|
||||
private static Dictionary<string, string> GetBaseParameters()
|
||||
{
|
||||
return new Dictionary<string, string>
|
||||
{
|
||||
{"device_platform", "webapp"},
|
||||
{"aid", "6383"},
|
||||
{"channel", "channel_pc_web"},
|
||||
{"pc_client_type", "1"},
|
||||
{"pc_libra_divert", "Windows"},
|
||||
{"cookie_enabled", "true"},
|
||||
{"browser_language", "zh-CN"},
|
||||
{"browser_platform", "Win32"},
|
||||
{"browser_name", "Chrome"},
|
||||
{"browser_online", "true"},
|
||||
{"engine_name", "Blink"},
|
||||
{"os_name", "Windows"},
|
||||
{"os_version", "10"},
|
||||
{"device_memory", "8"},
|
||||
{"platform", "PC"},
|
||||
{"downlink", "10"},
|
||||
{"effective_type", "4g"},
|
||||
{"round_trip_time", "0"},
|
||||
{"update_version_code", "170400"},
|
||||
{"whale_cut_token", ""}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
private static Dictionary<string, string> InitializeViedoDetailParam()
|
||||
{
|
||||
|
||||
Dictionary<string, string> requestParams = new Dictionary<string, string>
|
||||
{
|
||||
{ "device_platform", "webapp" },
|
||||
{ "aid", "6383" },
|
||||
{ "channel", "channel_pc_web" },
|
||||
{ "aweme_id", "" },
|
||||
{ "request_source", "600" },
|
||||
{ "origin_type", "video_page" },
|
||||
{ "update_version_code", "170400" },
|
||||
{ "pc_client_type", "1" },
|
||||
{ "pc_libra_divert", "Windows" },
|
||||
{ "support_h265", "1" },
|
||||
{ "support_dash", "1" },
|
||||
{ "cpu_core_num", "32" },
|
||||
{ "version_code", "190500" },
|
||||
{ "version_name", "19.5.0" },
|
||||
{ "cookie_enabled", "true" },
|
||||
{ "screen_width", "1707" },
|
||||
{ "screen_height", "1067" },
|
||||
{ "browser_language", "zh-CN" },
|
||||
{ "browser_platform", "Win32" },
|
||||
{ "browser_name", "Edge" },
|
||||
{ "browser_version", "141.0.0.0" },
|
||||
{ "browser_online", "true" },
|
||||
{ "engine_name", "Blink" },
|
||||
{ "engine_version", "141.0.0.0" },
|
||||
{ "os_name", "Windows" },
|
||||
{ "os_version", "10" },
|
||||
{ "device_memory", "8" },
|
||||
{ "platform", "PC" },
|
||||
{ "downlink", "10" },
|
||||
{ "effective_type", "4g" },
|
||||
{ "round_trip_time", "0" },
|
||||
{ "webid", "7577203855940994560" },
|
||||
{ "uifid", "0e81ba593d64ebaca259bdbe302de8d7e55ac2e982f7412f10fbc5c77c64bb8b8830ffed112ea8b3bc54f3b6e2af3856daafa4efaafef18953612820da493aeaebdeac0537b99b8e68f343c2476cf6347f7751a87d92952128116470f147215cf46b949f43f31aedcb660fd3c5c7eb2145183cc93d1b4202205b4af7d7c69ab55e860f96e315899a2ee74a262273694ec973ba682bb6fdc351e0e66250b21cf9aef3ccaa3e0c28b085fd095e947d92a5336b9e65706d649a7b79541feab3487f" },
|
||||
{ "verifyFp", "verify_migsr5je_BJ1YiVbY_uR2U_4VXu_8Uje_GgwhVf7Y6hb8" },
|
||||
{ "fp", "verify_migsr5je_BJ1YiVbY_uR2U_4VXu_8Uje_GgwhVf7Y6hb8" },
|
||||
//{ "msToken", "zVKqVOb-uBF-Opse1B5y9u0hw7SlRa49w8HB56cVSY0Uymjqs17JJ9qOUXv7IK0j3de1ErBjSVAm0JSd5SH1sYg7jeriVvGNJoDUM3dKwVCrqlapZgU9g2aYAeHs5oHddTGtZ3Pri9MIRltXVRdirZWMewfH8MlqmIVaCiTuGzRcZ6va9aWe0CyR" },
|
||||
//{ "a_bogus", "dy45kFWjOxRfOdFtmOnc9WxlY8L%2FNTuy6Pi2SYAP9PKGcwFcaWNpBNCfrxLuRUd%2FzuBzhe3HqdlMYDnc0zX0ZenkKmkkupv6Bt%2FC9L0LZZHvbBJZ7rgiemSxzk4O8KsOmAIbiM75AsBEIxo5VrCwAdlCu%2F-xBbmD%2Fp3vVATCE2ysUAujwn%2FVa-JDNw7qaf%3D%3D" },
|
||||
//{ "x-secsdk-web-expire", "1764378577130" },
|
||||
//{ "x-secsdk-web-signature", "3b8aa32e9457ebe3b65afdae11e2fe86" }
|
||||
};
|
||||
return requestParams;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 字典扩展方法:批量添加键值对(避免重复 Add 调用)
|
||||
/// </summary>
|
||||
private static void AddRange(this Dictionary<string, string> target, Dictionary<string, string> source)
|
||||
{
|
||||
foreach (var item in source)
|
||||
{
|
||||
// 避免键重复(如果有重复以源字典为准)
|
||||
if (target.ContainsKey(item.Key))
|
||||
target[item.Key] = item.Value;
|
||||
else
|
||||
target.Add(item.Key, item.Value);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,440 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace dy.net.utils
|
||||
{
|
||||
/// <summary>
|
||||
/// 抖音网页端请求参数字典管理类
|
||||
/// 统一管理各类接口的标准化参数字典,提供全局常量和静态只读参数属性
|
||||
/// </summary>
|
||||
public static class DouyinRequestParamManager
|
||||
{
|
||||
#region 全局常量(接口调用公共配置)
|
||||
/// <summary>
|
||||
/// 抖音全局域名
|
||||
/// </summary>
|
||||
public static readonly string DouyinHost = "https://www.douyin.com";
|
||||
|
||||
/// <summary>
|
||||
/// 数据请求客户端标识
|
||||
/// </summary>
|
||||
public const string DY_HTTP_CLIENT = "douyin-client";
|
||||
|
||||
/// <summary>
|
||||
/// 下载客户端标识
|
||||
/// </summary>
|
||||
public const string DY_HTTP_CLIENT_DOWN = "douyin-client_down";
|
||||
|
||||
/// <summary>
|
||||
/// 请求头User-Agent标识
|
||||
/// </summary>
|
||||
public const string DY_USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36";
|
||||
#endregion
|
||||
|
||||
#region 静态只读参数属性(对外暴露的标准化参数字典)
|
||||
/// <summary>
|
||||
/// 收藏列表参数(用户收藏的内容)
|
||||
/// </summary>
|
||||
public static Dictionary<string, string> DouyinCollectParams { get; } = InitUserCollectParams();
|
||||
|
||||
/// <summary>
|
||||
/// 用户喜欢参数(用户点赞的内容)
|
||||
/// </summary>
|
||||
public static Dictionary<string, string> DouyinFavoriteParams { get; } = InitUserFavoriteParams();
|
||||
|
||||
/// <summary>
|
||||
/// 博主发布作品参数
|
||||
/// </summary>
|
||||
public static Dictionary<string, string> DouyinUpderPostParams { get; } = InitDouyinPostParams();
|
||||
|
||||
/// <summary>
|
||||
/// 我的关注列表参数
|
||||
/// </summary>
|
||||
public static Dictionary<string, string> DouyinMyFollowParams { get; } = InitMyFollowParams();
|
||||
|
||||
/// <summary>
|
||||
/// 收藏夹按收藏文件夹名称获取作品列表完整请求参数字典
|
||||
/// </summary>
|
||||
public static Dictionary<string, string> DouyinFolderCollectParams { get; } = InitCollectFolderParams();
|
||||
|
||||
/// <summary>
|
||||
/// 抖音收藏列表接口完整参数字典(对应目标URL)
|
||||
/// </summary>
|
||||
public static Dictionary<string, string> DouyinCollectListParams { get; } = InitCollectListParams();
|
||||
|
||||
/// <summary>
|
||||
/// 抖音合集列表参数
|
||||
/// </summary>
|
||||
public static Dictionary<string, string> DouyinMixListParams { get; } = InitMixListParams();
|
||||
|
||||
/// <summary>
|
||||
/// 合集视频请求参数字典
|
||||
/// </summary>
|
||||
public static Dictionary<string, string> DouyinMixVideoParams { get; } = InitMixVideoParams();
|
||||
|
||||
/// <summary>
|
||||
/// 抖音短剧列表参数
|
||||
/// </summary>
|
||||
public static Dictionary<string, string> DouyinSeriesListParams { get; } = InitSeriesListParams();
|
||||
|
||||
/// <summary>
|
||||
/// 抖音短剧视频参数(修正拼写:Viedos→Videos)
|
||||
/// </summary>
|
||||
public static Dictionary<string, string> DouyinSeriesVideosParams { get; } = InitSeriesVideosParams();
|
||||
#endregion
|
||||
|
||||
#region 私有初始化方法(短剧相关)
|
||||
/// <summary>
|
||||
/// 初始化抖音短剧视频参数(获取短剧内的视频列表)
|
||||
/// </summary>
|
||||
private static Dictionary<string, string> InitSeriesVideosParams()
|
||||
{
|
||||
var parameters = InitBaseParams();
|
||||
|
||||
// 覆盖基础参数(直接赋值,仅修改与基础参数不一致的项)
|
||||
parameters["version_code"] = "170400";
|
||||
parameters["version_name"] = "17.4.0";
|
||||
parameters["screen_width"] = "1707";
|
||||
parameters["screen_height"] = "1067";
|
||||
parameters["browser_name"] = "Edge";
|
||||
parameters["browser_version"] = "141.0.0.0";
|
||||
parameters["engine_version"] = "141.0.0.0";
|
||||
parameters["cpu_core_num"] = "32";
|
||||
parameters["support_h265"] = "1";
|
||||
parameters["support_dash"] = "1";
|
||||
parameters["round_trip_time"] = "50";
|
||||
parameters["webid"] = "7584476599598188067";
|
||||
|
||||
// 新增特有参数(使用Add方法,明确区分"覆盖"与"新增",提高可读性)
|
||||
parameters.Add("pull_type", "2");
|
||||
|
||||
parameters.Add("series_id", ""); // 动态参数:短剧系列唯一标识,后续赋值
|
||||
parameters.Add("cursor", "0"); // 动态参数:分页游标,默认从0开始
|
||||
parameters.Add("count", "20"); // 动态参数:每页获取数量,默认20条
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化抖音短剧列表参数
|
||||
/// </summary>
|
||||
private static Dictionary<string, string> InitSeriesListParams()
|
||||
{
|
||||
var parameters = InitBaseParams();
|
||||
|
||||
// 直接赋值覆盖基础参数
|
||||
parameters["version_code"] = "170400";
|
||||
parameters["version_name"] = "17.4.0";
|
||||
parameters["screen_width"] = "1707";
|
||||
parameters["screen_height"] = "1067";
|
||||
parameters["browser_name"] = "Edge";
|
||||
parameters["browser_version"] = "141.0.0.0";
|
||||
parameters["engine_version"] = "141.0.0.0";
|
||||
parameters["cpu_core_num"] = "32";
|
||||
parameters["support_h265"] = "1";
|
||||
parameters["support_dash"] = "1";
|
||||
parameters["round_trip_time"] = "50";
|
||||
parameters["webid"] = "7584476599598188067";
|
||||
|
||||
// 新增特有分页参数
|
||||
parameters.Add("cursor", "0");
|
||||
parameters.Add("count", "20");
|
||||
|
||||
return parameters;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 私有初始化方法(合集相关)
|
||||
/// <summary>
|
||||
/// 初始化抖音合集列表请求参数
|
||||
/// </summary>
|
||||
private static Dictionary<string, string> InitMixListParams()
|
||||
{
|
||||
var parameters = InitBaseParams();
|
||||
|
||||
// 直接赋值覆盖基础参数(严格对应目标接口)
|
||||
parameters["version_code"] = "170400";
|
||||
parameters["version_name"] = "17.4.0";
|
||||
parameters["screen_width"] = "1707";
|
||||
parameters["screen_height"] = "1067";
|
||||
parameters["browser_name"] = "Edge";
|
||||
parameters["browser_version"] = "141.0.0.0";
|
||||
parameters["engine_version"] = "141.0.0.0";
|
||||
parameters["cpu_core_num"] = "32";
|
||||
parameters["support_h265"] = "1";
|
||||
parameters["support_dash"] = "1";
|
||||
parameters["webid"] = "7584476599598188067";
|
||||
|
||||
// 新增特有分页参数
|
||||
parameters.Add("cursor", "0");
|
||||
parameters.Add("count", "20");
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化合集视频请求参数(复用基础参数,消除冗余)
|
||||
/// </summary>
|
||||
private static Dictionary<string, string> InitMixVideoParams()
|
||||
{
|
||||
var parameters = InitBaseParams();
|
||||
|
||||
// 覆盖基础参数,无需重复定义全部公共参数
|
||||
parameters["version_code"] = "170400";
|
||||
parameters["version_name"] = "17.4.0";
|
||||
parameters["screen_width"] = "1707";
|
||||
parameters["screen_height"] = "1067";
|
||||
parameters["browser_name"] = "Edge";
|
||||
parameters["browser_version"] = "141.0.0.0";
|
||||
parameters["engine_version"] = "141.0.0.0";
|
||||
parameters["cpu_core_num"] = "32";
|
||||
parameters["support_h265"] = "1";
|
||||
parameters["support_dash"] = "1";
|
||||
parameters["webid"] = "7584476599598188067";
|
||||
|
||||
// 新增特有参数
|
||||
parameters.Add("mix_id", ""); // 动态参数:合集唯一标识,后续赋值
|
||||
parameters.Add("cursor", "0"); // 动态参数:分页游标,默认从0开始
|
||||
parameters.Add("count", "20"); // 动态参数:每页获取数量,默认20条
|
||||
|
||||
return parameters;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 私有初始化方法(收藏相关)
|
||||
/// <summary>
|
||||
/// 初始化抖音收藏列表接口参数
|
||||
/// </summary>
|
||||
private static Dictionary<string, string> InitCollectListParams()
|
||||
{
|
||||
var parameters = InitBaseParams();
|
||||
|
||||
// 覆盖基础参数
|
||||
parameters["version_code"] = "170400";
|
||||
parameters["version_name"] = "17.4.0";
|
||||
parameters["screen_width"] = "1707";
|
||||
parameters["screen_height"] = "1067";
|
||||
parameters["browser_name"] = "Edge";
|
||||
parameters["browser_version"] = "141.0.0.0";
|
||||
parameters["engine_version"] = "141.0.0.0";
|
||||
parameters["cpu_core_num"] = "32";
|
||||
parameters["support_h265"] = "1";
|
||||
parameters["support_dash"] = "1";
|
||||
parameters["webid"] = "7584476599598188067";
|
||||
|
||||
// 新增特有动态参数
|
||||
parameters.Add("cursor", "0"); // 默认分页游标为0,后续可修改
|
||||
parameters.Add("count", ""); // 动态参数:每页获取数量,后续赋值
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化收藏夹按文件夹查询作品参数
|
||||
/// </summary>
|
||||
private static Dictionary<string, string> InitCollectFolderParams()
|
||||
{
|
||||
var parameters = InitBaseParams();
|
||||
|
||||
// 覆盖基础参数
|
||||
parameters["version_code"] = "170400";
|
||||
parameters["version_name"] = "17.4.0";
|
||||
parameters["screen_width"] = "1707";
|
||||
parameters["screen_height"] = "1067";
|
||||
parameters["browser_name"] = "Edge";
|
||||
parameters["browser_version"] = "141.0.0.0";
|
||||
parameters["engine_version"] = "141.0.0.0";
|
||||
parameters["cpu_core_num"] = "32";
|
||||
parameters["support_h265"] = "1";
|
||||
parameters["support_dash"] = "1";
|
||||
parameters["webid"] = "7584476599598188067";
|
||||
|
||||
// 新增特有动态参数
|
||||
parameters.Add("collects_id", ""); // 动态参数:收藏夹ID,后续赋值 collect.CollectsId
|
||||
parameters.Add("cursor", ""); // 动态参数:分页游标,后续赋值
|
||||
parameters.Add("count", ""); // 动态参数:每页获取数量,后续赋值
|
||||
|
||||
return parameters;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 私有初始化方法(作品/收藏/关注相关)
|
||||
/// <summary>
|
||||
/// 初始化抖音博主发布作品参数(修正访问修饰符:public→private)
|
||||
/// </summary>
|
||||
private static Dictionary<string, string> InitDouyinPostParams()
|
||||
{
|
||||
var parameters = InitBaseParams();
|
||||
|
||||
// 覆盖基础参数
|
||||
parameters["version_code"] = "290100";
|
||||
parameters["version_name"] = "29.1.0";
|
||||
parameters["screen_width"] = "1707";
|
||||
parameters["screen_height"] = "1067";
|
||||
parameters["browser_name"] = "Chrome";
|
||||
parameters["browser_version"] = "142.0.0.0";
|
||||
parameters["engine_version"] = "142.0.0.0";
|
||||
parameters["cpu_core_num"] = "32";
|
||||
parameters["support_h265"] = "1";
|
||||
parameters["support_dash"] = "1";
|
||||
parameters["webid"] = "7574080345697584675";
|
||||
|
||||
// 新增特有参数(含签名相关空参数,后续补充)
|
||||
parameters.Add("locate_item_id", "7576282367263807451");
|
||||
parameters.Add("locate_query", "false");
|
||||
parameters.Add("show_live_replay_strategy", "1");
|
||||
parameters.Add("need_time_list", "1");
|
||||
parameters.Add("time_list_query", "0");
|
||||
parameters.Add("publish_video_strategy_type", "2");
|
||||
parameters.Add("from_user_page", "1");
|
||||
parameters.Add("uifid", "");
|
||||
parameters.Add("msToken", "");
|
||||
parameters.Add("a_bogus", "");
|
||||
parameters.Add("verifyFp", "");
|
||||
parameters.Add("fp", "");
|
||||
parameters.Add("x-secsdk-web-expire", "");
|
||||
parameters.Add("x-secsdk-web-signature", "");
|
||||
parameters.Add("cut_version", "1");
|
||||
|
||||
|
||||
|
||||
parameters.Add("sec_user_id", ""); // 动态参数:博主加密ID,后续赋值
|
||||
parameters.Add("max_cursor", "0"); // 分页游标,默认从0开始
|
||||
parameters.Add("count", "18"); // 每页默认获取18条作品
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化默认的收藏列表参数
|
||||
/// </summary>
|
||||
private static Dictionary<string, string> InitUserCollectParams()
|
||||
{
|
||||
var parameters = InitBaseParams();
|
||||
|
||||
// 覆盖基础参数
|
||||
parameters["version_code"] = "290100";
|
||||
parameters["version_name"] = "29.1.0";
|
||||
parameters["screen_width"] = "1920";
|
||||
parameters["screen_height"] = "1080";
|
||||
parameters["browser_version"] = "130.0.0.0";
|
||||
parameters["engine_version"] = "130.0.0.0";
|
||||
parameters["cpu_core_num"] = "12";
|
||||
|
||||
parameters["from_user_page"] = "1";
|
||||
parameters["locate_query"] = "false";
|
||||
parameters["need_time_list"] = "1";
|
||||
parameters["show_live_replay_strategy"] = "1";
|
||||
parameters["time_list_query"] = "0";
|
||||
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化用户喜欢(点赞)列表参数
|
||||
/// </summary>
|
||||
private static Dictionary<string, string> InitUserFavoriteParams()
|
||||
{
|
||||
var parameters = InitBaseParams();
|
||||
|
||||
// 覆盖基础参数
|
||||
parameters["version_code"] = "170400";
|
||||
parameters["version_name"] = "17.4.0";
|
||||
parameters["screen_width"] = "1536";
|
||||
parameters["screen_height"] = "960";
|
||||
parameters["browser_version"] = "140.0.0.0";
|
||||
parameters["engine_version"] = "140.0.0.0";
|
||||
parameters["cpu_core_num"] = "20";
|
||||
parameters["support_h265"] = "1";
|
||||
parameters["support_dash"] = "1";
|
||||
|
||||
// 新增特有参数
|
||||
parameters.Add("min_cursor", "0");
|
||||
parameters.Add("cut_version", "1");
|
||||
parameters.Add("count", "18");
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化我关注的博主列表参数
|
||||
/// </summary>
|
||||
private static Dictionary<string, string> InitMyFollowParams()
|
||||
{
|
||||
var parameters = InitBaseParams();
|
||||
|
||||
// 覆盖基础参数
|
||||
parameters["version_code"] = "170400";
|
||||
parameters["version_name"] = "17.4.0";
|
||||
parameters["screen_width"] = "1707";
|
||||
parameters["screen_height"] = "1067";
|
||||
parameters["browser_name"] = "Edge";
|
||||
parameters["browser_version"] = "141.0.0.0";
|
||||
parameters["engine_version"] = "141.0.0.0";
|
||||
parameters["cpu_core_num"] = "32";
|
||||
parameters["support_h265"] = "1";
|
||||
parameters["support_dash"] = "1";
|
||||
parameters["webid"] = "7577203855940994560";
|
||||
|
||||
// 新增特有参数(含动态用户ID和签名参数)
|
||||
parameters.Add("min_time", "0");
|
||||
parameters.Add("max_time", "0");
|
||||
parameters.Add("source_type", "4");
|
||||
parameters.Add("gps_access", "0");
|
||||
parameters.Add("address_book_access", "0");
|
||||
parameters.Add("is_top", "1");
|
||||
//parameters.Add("uifid", "");
|
||||
//parameters.Add("msToken", "");
|
||||
//parameters.Add("a_bogus", "");
|
||||
//parameters.Add("verifyFp", "");
|
||||
//parameters.Add("fp", "");
|
||||
|
||||
|
||||
parameters.Add("user_id", ""); // 动态参数:用户ID,后续赋值
|
||||
parameters.Add("sec_user_id", ""); // 动态参数:加密用户ID,后续赋值
|
||||
parameters.Add("offset", "0"); // 分页偏移量,默认从0开始
|
||||
parameters.Add("count", "20"); // 每页默认获取20个关注博主
|
||||
|
||||
return parameters;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 基础参数(直接返回模板引用,存在交叉修改风险)
|
||||
/// <summary>
|
||||
/// 私有静态只读基础参数模板(仅创建1次)
|
||||
/// </summary>
|
||||
private static readonly Dictionary<string, string> _baseParamTemplate = new Dictionary<string, string>
|
||||
{
|
||||
{"device_platform", "webapp"},
|
||||
{"aid", "6383"},
|
||||
{"channel", "channel_pc_web"},
|
||||
{"pc_client_type", "1"},
|
||||
{"pc_libra_divert", "Windows"},
|
||||
{"cookie_enabled", "true"},
|
||||
{"browser_language", "zh-CN"},
|
||||
{"browser_platform", "Win32"},
|
||||
{"browser_name", "Chrome"},
|
||||
{"browser_online", "true"},
|
||||
{"engine_name", "Blink"},
|
||||
{"os_name", "Windows"},
|
||||
{"os_version", "10"},
|
||||
{"device_memory", "8"},
|
||||
{"platform", "PC"},
|
||||
{"downlink", "10"},
|
||||
{"effective_type", "4g"},
|
||||
{"round_trip_time", "0"},
|
||||
{"update_version_code", "170400"},
|
||||
{"whale_cut_token", ""}
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private static Dictionary<string, string> InitBaseParams()
|
||||
{
|
||||
return new Dictionary<string, string>(_baseParamTemplate);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
using dy.net.dto;
|
||||
using dy.net.model.dto;
|
||||
using Serilog;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
@@ -28,10 +28,5 @@ namespace dy.net.utils
|
||||
string hashString = sb.ToString();
|
||||
return hashString;
|
||||
}
|
||||
|
||||
public static string UPLOAD_PATH_PRO = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "upload");
|
||||
public static string UPLOAD_PATH_DEV = Path.Combine(Directory.GetCurrentDirectory(), "upload");
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using dy.net.dto;
|
||||
using dy.net.model;
|
||||
using dy.net.model.dto;
|
||||
using dy.net.model.entity;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Xml.Linq;
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
namespace dy.net.utils
|
||||
{
|
||||
public class SystemStaticUtil
|
||||
{
|
||||
//public static string DOWN_IMAGE_VIDEO_ENABLE="DOWN_IMGVIDEO";
|
||||
|
||||
public static string APP_PORT = "appPort";
|
||||
|
||||
|
||||
public static string DY_FOLLOWEDS = "dy_followeds";
|
||||
public static string DY_COLLECTS = "dy_collects";
|
||||
public static string DY_FAVORITES = "dy_favorites";
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
using dy.net.dto;
|
||||
using dy.net.model.dto;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace dy.net.utils
|
||||
|
||||
Reference in New Issue
Block a user