完成用户名更新,粉丝数获取的基础功能
This commit is contained in:
12
pkg/task/config.toml
Normal file
12
pkg/task/config.toml
Normal file
@@ -0,0 +1,12 @@
|
||||
[common]
|
||||
|
||||
[database]
|
||||
host = "localhost"
|
||||
port = 5432
|
||||
user = "postgres"
|
||||
password = "postrootpwd"
|
||||
db = "furryboard"
|
||||
|
||||
[spider_core]
|
||||
host = "localhost"
|
||||
port = 9101
|
||||
103
pkg/task/user.go
Normal file
103
pkg/task/user.go
Normal file
@@ -0,0 +1,103 @@
|
||||
package task
|
||||
|
||||
import (
|
||||
"github.com/eigeen/furryboard/spider-scheduler/pkg/dao"
|
||||
"github.com/eigeen/furryboard/spider-scheduler/pkg/dao/model"
|
||||
"github.com/eigeen/furryboard/spider-scheduler/pkg/exception"
|
||||
"github.com/eigeen/furryboard/spider-scheduler/pkg/log"
|
||||
"github.com/eigeen/furryboard/spider-scheduler/pkg/logic"
|
||||
"math"
|
||||
"time"
|
||||
)
|
||||
|
||||
// UpdateUserInfo 更新数据库内用户信息
|
||||
// 会对原始表进行更改,并将更改记录写入changelogs
|
||||
func UpdateUserInfo() {
|
||||
// 预查询数量
|
||||
// TODO: 预查询数量和分页策略功能可复用
|
||||
var count int64
|
||||
tx := dao.DB().Model(&model.Furry{}).Count(&count)
|
||||
if tx.Error != nil {
|
||||
err := exception.ErrFetchFurries("获取furries数量失败:" + tx.Error.Error())
|
||||
log.Logger().Errorf("获取furries数量失败:%s", err)
|
||||
return
|
||||
}
|
||||
|
||||
pageSize := 32
|
||||
maxPage := int(math.Ceil(float64(count) / float64(pageSize)))
|
||||
for page := 0; page <= maxPage; page++ {
|
||||
// 获取目标用户列表(分页)
|
||||
users, err := logic.GetUsers(page, pageSize)
|
||||
if err != nil {
|
||||
log.Logger().Errorf("获取用户列表时发生错误:%s", err)
|
||||
continue
|
||||
}
|
||||
// 已获取完毕
|
||||
if users == nil {
|
||||
return
|
||||
}
|
||||
// 抽取uid列表
|
||||
var uids []uint
|
||||
for _, user := range users {
|
||||
uids = append(uids, user.UID)
|
||||
}
|
||||
// 通过API获取用户信息
|
||||
infos := logic.BatchGetUserInfo(&uids)
|
||||
|
||||
// 检查更新内容,更新furries表,插入changelogs(使用事务)
|
||||
c, err := logic.UpdateUserInfo(users, infos)
|
||||
if err != nil {
|
||||
log.Logger().Errorf("更新数据时发生错误:%s", err)
|
||||
continue
|
||||
}
|
||||
log.Logger().Infof("成功更新了%d个用户信息", c)
|
||||
// delay
|
||||
time.Sleep(2 * time.Second)
|
||||
}
|
||||
}
|
||||
|
||||
func UpdateFans() {
|
||||
// TODO: 与UpdateUserInfo有大量重复,可抽离复用代码
|
||||
// 预查询数量
|
||||
var count int64
|
||||
tx := dao.DB().Model(&model.Furry{}).Count(&count)
|
||||
if tx.Error != nil {
|
||||
err := exception.ErrFetchFurries("获取furries数量失败:" + tx.Error.Error())
|
||||
log.Logger().Errorf("获取furries数量失败:%s", err)
|
||||
return
|
||||
}
|
||||
|
||||
pageSize := 4
|
||||
maxPage := int(math.Ceil(float64(count) / float64(pageSize)))
|
||||
for page := 0; page <= maxPage; page++ {
|
||||
// 获取目标用户列表(分页)
|
||||
users, err := logic.GetUsers(page, pageSize)
|
||||
if err != nil {
|
||||
log.Logger().Errorf("获取用户列表时发生错误:%s", err)
|
||||
continue
|
||||
}
|
||||
// 已获取完毕
|
||||
if users == nil {
|
||||
return
|
||||
}
|
||||
// 抽取uid列表
|
||||
var uids []uint
|
||||
for _, user := range users {
|
||||
uids = append(uids, user.UID)
|
||||
}
|
||||
// 通过API获取用户统计信息
|
||||
stats := logic.BatchGetUserStat(&uids)
|
||||
// 插入表
|
||||
c, err := logic.UpdateFansToDB(stats)
|
||||
if err != nil {
|
||||
log.Logger().Errorf("更新粉丝数量时发生错误:%s", err)
|
||||
return
|
||||
}
|
||||
log.Logger().Infof("成功更新了%d个用户粉丝数", c)
|
||||
time.Sleep(2 * time.Second)
|
||||
}
|
||||
}
|
||||
|
||||
func UpdateFansAndInfo() {
|
||||
|
||||
}
|
||||
22
pkg/task/user_test.go
Normal file
22
pkg/task/user_test.go
Normal file
@@ -0,0 +1,22 @@
|
||||
package task
|
||||
|
||||
import (
|
||||
"github.com/eigeen/furryboard/spider-scheduler/pkg/conf"
|
||||
"github.com/eigeen/furryboard/spider-scheduler/pkg/log"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func BeforeTesting() {
|
||||
log.InitLogger(false)
|
||||
conf.InitConfig("config.toml")
|
||||
}
|
||||
|
||||
func TestUpdateUserInfo(t *testing.T) {
|
||||
BeforeTesting()
|
||||
UpdateUserInfo()
|
||||
}
|
||||
|
||||
func TestUpdateFans(t *testing.T) {
|
||||
BeforeTesting()
|
||||
UpdateFans()
|
||||
}
|
||||
Reference in New Issue
Block a user