namespace molilian.core { public partial class TkPoolCore { /// /// 选择万能解析账号。解析池独立于转链节点及 enable_parse 配置。 /// public static async Task GetGeneralLinkParseAccountAsync() { var accounts = await ListAsync().ConfigureAwait(false); if (accounts == null) return null; foreach (var account in accounts.OrderBy(_ => Random.Shared.Next())) { if (!account.status || account.is_banned || !account.enable_general_link_parse_pool || !HasGeneralLinkParseCredentials(account) || !PassesFastAccountChecks(account, TkAction.all)) continue; DateTime now = DateTime.Now; if (account.daily_calls_limit > 0 && RiskControlCore.GetCalls(TkChannelEnum.tb, account.id, now.ToString("yyyyMMdd")) >= account.daily_calls_limit) continue; if (account.hourly_calls_limit > 0 && RiskControlCore.GetCalls(TkChannelEnum.tb, account.id, now.ToString("yyyyMMddHH")) >= account.hourly_calls_limit) continue; if (TryAcquireQps(account)) return account; } return null; } private static bool HasGeneralLinkParseCredentials(TkPoolDTO account) { if (string.IsNullOrWhiteSpace(account.appkey) || string.IsNullOrWhiteSpace(account.appSecret) || string.IsNullOrWhiteSpace(account.open_pid)) return false; string[] pidParts = account.open_pid.Split('_'); return pidParts.Length == 4 && pidParts[0] == "mm" && !string.IsNullOrWhiteSpace(pidParts[1]) && !string.IsNullOrWhiteSpace(pidParts[2]) && long.TryParse(pidParts[3], out long adzoneId) && adzoneId > 0; } } }