package imitater import ( "time" "474420502.top/eson/structure/circular_linked" "474420502.top/eson/crontabex" "474420502.top/eson/curl2info" "474420502.top/eson/requests" ) // Task 任务 type Task struct { ITask name string crontab *crontab.Crontab curl *curl2info.CURL workflow *requests.Workflow session *requests.Session proxies clinked.CircularLinked } // SetName 任务的名字 func (task *Task) SetName(name string) { task.name = name } // GetName 获取任务的名字 func (task *Task) GetName() string { return task.name } // SetCurl 设置任务的curl信息类 func (task *Task) SetCurl(curl *curl2info.CURL) { task.curl = curl } // GetCurl 获取任务的curl信息类 func (task *Task) GetCurl() *curl2info.CURL { return task.curl } // AddProxies 添加代理集合 func (task *Task) AddProxies(proxy string) { for _, cnode := range task.proxies.GetLoopValues() { proxy := cnode.GetValue().(string) task.proxies.Append(proxy) } } // GetProxies 获取代理的字符串 func (task *Task) GetProxies() *clinked.CircularLinked { return &task.proxies } // SetCrontab 设置crontab的控制规则字符串 func (task *Task) SetCrontab(cron string) { task.crontab = crontab.NewCrontab(cron) } // SetLastStatus 设置上次执行的状态 成功true 失败false func (task *Task) SetLastStatus(status bool) { task.crontab.SetStatus(status) } // TimeUp 判断是否到了下次执行的时间点 func (task *Task) TimeUp() bool { return task.crontab.TimeUp() } // NextTime 下次执行的时间点 func (task *Task) NextTime() time.Time { return task.crontab.NextTime() } // Workflow 根据persistent 是否返回现有session(or 新建 session),创建Workflow的信息, 便于设置或者更改参数, Session持久化 func (task *Task) Workflow(persistent bool) *requests.Workflow { task.workflow = task.curl.CreateWorkflow(task.Session()) if persistent { return task.workflow } return task.curl.CreateWorkflow(nil) } // Request 根据curl信息执行,没持久化 func (task *Task) Request() (*requests.Response, error) { proxies := task.GetProxies() ses := task.curl.CreateSession() if proxies.Size() > 0 { ses.SetConfig(requests.CProxy, proxies.Cursor().GetValue().(string)) proxies.MoveNext() } return task.curl.CreateWorkflow(ses).Execute() } // Session 获取Session的信息 只保留session的数据和url参数. func (task *Task) Session() *requests.Session { if task.session == nil { task.session = task.curl.CreateSession() } if task.proxies.Size() > 0 { task.session.SetConfig(requests.CProxy, task.proxies.Cursor().GetValue().(string)) task.proxies.MoveNext() } return task.session }