106 lines
2.4 KiB
Go
106 lines
2.4 KiB
Go
package imitate
|
|
|
|
import (
|
|
"time"
|
|
|
|
crontab "474420502.top/eson/crontabex"
|
|
"474420502.top/eson/curl2info"
|
|
"474420502.top/eson/requests"
|
|
)
|
|
|
|
// Task 任务
|
|
type Task struct {
|
|
ITask
|
|
|
|
crontab *crontab.Crontab
|
|
curl *curl2info.CURL
|
|
workflow *requests.Workflow
|
|
session *requests.Session
|
|
proxies YamlProxies
|
|
}
|
|
|
|
// SetCurl 设置任务的curl信息类
|
|
func (task *Task) SetCurl(curl *curl2info.CURL) {
|
|
task.curl = curl
|
|
}
|
|
|
|
// GetCurl 获取任务的curl信息类
|
|
// func (task *Task) GetCurl() *curl2info.CURL {
|
|
// return task.curl
|
|
// }
|
|
|
|
// AppendProxies 添加代理集合
|
|
func (task *Task) AppendProxies(proxies ...string) {
|
|
for _, proxy := range proxies {
|
|
task.proxies = append(task.proxies, proxy)
|
|
}
|
|
}
|
|
|
|
// GetProxies 获取代理的字符串
|
|
func (task *Task) GetProxies() []string {
|
|
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()
|
|
}
|
|
|
|
// InitTask 生成一个新任务
|
|
func InitTask(task ITask, Curl *curl2info.CURL) {
|
|
task.SetCurl(Curl)
|
|
}
|
|
|
|
// ExecuteOnPlan 按照计划执行任务并返回结果
|
|
func ExecuteOnPlan(task ITask) {
|
|
for {
|
|
if task.TimeUp() {
|
|
task.Execute() // 事件 在这里变化
|
|
}
|
|
interval := task.NextTime().Sub(time.Now())
|
|
time.Sleep(interval)
|
|
}
|
|
|
|
}
|
|
|
|
// Workflow 根据现有session获取Workflow的信息, 便于设置或者更改参数, Session持久化
|
|
func (task *Task) Workflow(persistent bool) *requests.Workflow {
|
|
if task.workflow == nil {
|
|
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) {
|
|
return task.curl.CreateWorkflow(nil).Execute()
|
|
}
|
|
|
|
// Session 获取Session的信息 只保留session的数据和url参数.
|
|
func (task *Task) Session() *requests.Session {
|
|
if task.session == nil {
|
|
task.session = task.curl.CreateSession()
|
|
}
|
|
return task.session
|
|
}
|