修改登录获取信息脚本
This commit is contained in:
101
plugin/task-get-plugin.go
Normal file
101
plugin/task-get-plugin.go
Normal file
@@ -0,0 +1,101 @@
|
||||
package plugin
|
||||
|
||||
import (
|
||||
"go-account-register/config"
|
||||
"go-account-register/models"
|
||||
"go-account-register/services"
|
||||
paramsTypes "go-account-register/types"
|
||||
"log"
|
||||
"math"
|
||||
"runtime/debug"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
type TaskGetPlugin struct{}
|
||||
|
||||
func (*TaskGetPlugin) Run(task *paramsTypes.Task) {
|
||||
|
||||
// 查询当前所有账号
|
||||
userService := services.InitTwitterAccountService()
|
||||
// 判断是否是补偿任务
|
||||
var userList []models.TwitterAccount
|
||||
userList = userService.GetAvailableAccount(&models.TwitterAccount{
|
||||
Type: "get",
|
||||
})
|
||||
|
||||
if task.Data.Compensate == 1 {
|
||||
// 补偿任务
|
||||
userList = userService.GetAccountListByStatus(&models.TwitterAccount{
|
||||
Status: "成功",
|
||||
Type: "get",
|
||||
})
|
||||
} else {
|
||||
// 清空当前运行的账号状态
|
||||
userService.ClearAccountStatus(&models.TwitterAccount{
|
||||
Type: "get",
|
||||
})
|
||||
}
|
||||
log.Println("可用账号数量:", len(userList))
|
||||
// 获取并发数
|
||||
appConfig, _ := config.LoadConfig()
|
||||
num := math.Ceil(float64(len(userList)) / float64(appConfig.Limit.BrowserRunMax))
|
||||
sem := make(chan struct{}, appConfig.Limit.BrowserRunMax) // 全局并发上限
|
||||
var globalWait sync.WaitGroup
|
||||
for i := 0; i < int(num); i++ {
|
||||
select {
|
||||
case <-task.Ctx.Done():
|
||||
log.Println("中断任务")
|
||||
return
|
||||
default:
|
||||
}
|
||||
log.Println("批次:", i+1)
|
||||
for j := 0; j < appConfig.Limit.BrowserRunMax; j++ {
|
||||
log.Println(i*appConfig.Limit.BrowserRunMax + j)
|
||||
taskIndex := i*appConfig.Limit.BrowserRunMax + j
|
||||
if taskIndex >= len(userList) {
|
||||
break
|
||||
}
|
||||
time.Sleep(5 * time.Second)
|
||||
globalWait.Add(1)
|
||||
sem <- struct{}{} // 阻塞直到有空位
|
||||
go func() {
|
||||
defer func() {
|
||||
<-sem // 释放信号量
|
||||
globalWait.Done()
|
||||
}()
|
||||
getAccountWork(task, userList[taskIndex].ID)
|
||||
}()
|
||||
}
|
||||
}
|
||||
globalWait.Wait()
|
||||
|
||||
task.Message <- "Success"
|
||||
}
|
||||
|
||||
func getAccountWork(task *paramsTypes.Task, id int64) {
|
||||
UserService := services.InitTwitterAccountService()
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
log.Printf("Goroutine panic: %v\nStack: %s", r, debug.Stack())
|
||||
UserService.ChangeAccountLoginStatus(int(id), "账号下线")
|
||||
TwitterService.Logout(int(id))
|
||||
}
|
||||
}()
|
||||
|
||||
// 开始登录
|
||||
|
||||
res := TwitterService.Login(int(id))
|
||||
UserService.ChangeAccountLoginStatus(int(id), res.Msg)
|
||||
if res.Code == 200 {
|
||||
// 开始拟人
|
||||
// res = TwitterService.LoopViewPost(int(id))
|
||||
|
||||
time.Sleep(2 * time.Second)
|
||||
UserService.ChangeAccountStatus(int(id), "成功")
|
||||
TwitterService.Logout(int(id))
|
||||
UserService.ChangeAccountLoginStatus(int(id), "账号下线")
|
||||
}
|
||||
|
||||
log.Println(task.ID)
|
||||
}
|
||||
Reference in New Issue
Block a user