public async Task Init() { if (InitStatus) { return; } var list = await spiderHandler.ListWeChatAccountAsync(); if (list.Count <= 0) { LogService.Error("当前没有取到公众号名称,请在数据库中写入数据"); return; } SpiderTaskList.Clear(); list.ForEach(item => { var spider = new SpiderTask(item.NickName) { SpiderId = item.Id, Alias = item.Alias, LastUpdateDate = item.LastUpdate }; item.SpiderRoles.ForEach(role => { spider.Roles.Add(role.Role); }); SpiderTaskList.Add(spider); }); JavascriptCallback.OnSearchHandler += SearchHandlerCallback; JavascriptCallback.OnArticleResponseHandler += ArticleResponseHandlerCallback; InitStatus = true; }
private async Task NextTask() { LogService.Info("准备开始下一个任务"); SpiderTaskList.Remove(CurrentTask); await spiderHandler.SetAccountSpiderStop(CurrentTask.SpiderId); CurrentTask = null; TaskRuning = false; if (SpiderTaskList.Count == 0) { InitStatus = false; } }
private async void TaskTimer_Tick(object sender, EventArgs e) { try { await spiderHandler.UpdateClientSgin(IdWorkContext.CLIENT_ID); } catch (NullReferenceException) { LogService.Error("更新客户端时间时未找到实体,尝试重新写入"); await spiderHandler.InsertClientSgin(IdWorkContext.CLIENT_ID); } if (TaskRuning) { return; } DateTime now = DateTime.Now; string role = $"{now.Day.ToString().PadLeft(2, '0')}:{now.Hour.ToString().PadLeft(2, '0')}"; string runDate = now.ToString("yyyyMMddHH"); foreach (var item in SpiderTaskList) { try { if (await spiderHandler.QuerySpaderStatus(item.SpiderId)) { LogService.Info($"公众号{item.NickName}正在执行中"); continue; } } catch (NullReferenceException) { LogService.Error($"未找到公众号{item.NickName}:({item.SpiderId})"); continue; } if (item.Ready(role, runDate)) { LogService.Info($"当前规则{role}"); CurrentTask = item; CurrentTask.CurrentPage = 1; await spiderHandler.SetAccountSpiderStart(item.SpiderId, IdWorkContext.CLIENT_ID); item.Run(); TaskRuning = true; break; } } }
/// <summary> /// 创建爬虫任务 /// </summary> /// <returns></returns> private async Task CreateSpiderTask(TaskAddOrEditInput input) { SpiderTask task = input.SpiderTask.MapTo <SpiderTask>(); await _spiderRepository.InsertAsync(task); }