/// <summary> /// 数据解析 /// </summary> /// <param name="context">处理上下文</param> /// <returns></returns> public override async Task <DataFlowResult> HandleAsync(DataFlowContext context) { if (context?.Response == null) { Logger?.LogError("数据上下文或者响应内容为空"); return(DataFlowResult.Failed); } try { // 如果不匹配则跳过,不影响其它数据流处理器的执行 if (CanParse != null && !CanParse(context.Response.Request)) { return(DataFlowResult.Success); } SelectableFactory?.Invoke(context); var parserResult = await Parse(context); var urls = QueryFollowRequests?.Invoke(context); AddTargetRequests(context, urls); if (parserResult == DataFlowResult.Failed || parserResult == DataFlowResult.Terminated) { return(parserResult); } return(DataFlowResult.Success); } catch (Exception e) { Logger?.LogError($"任务 {context.Response.Request.OwnerId} 数据解析发生异常: {e}"); return(DataFlowResult.Failed); } }
/// <summary> /// Data analysis /// </summary> /// <param name="context">Processing context</param> /// <returns></returns> public override async Task <DataFlowResult> HandleAsync(DataFlowContext context) { if (context?.Response == null) { Logger?.LogError("Data context or response content is empty"); return(DataFlowResult.Failed); } try { // Skip if not matched, does not affect the execution of other data stream processors if (CanParse != null && !CanParse(context.Response.Request)) { return(DataFlowResult.Success); } // [Doanh]: call this first to initialize _selectable Instance for the context. SelectableFactory?.Invoke(context); var parserResult = await Parse(context); var urls = QueryFollowRequests?.Invoke(context); AddTargetRequests(context, urls); if (parserResult == DataFlowResult.Failed || parserResult == DataFlowResult.Terminated) { return(parserResult); } return(DataFlowResult.Success); } catch (Exception e) { Logger?.LogError($"任务 {context.Response.Request.OwnerId} 数据解析发生异常: {e}"); return(DataFlowResult.Failed); } }