完成用户名更新,粉丝数获取的基础功能

This commit is contained in:
2022-12-20 21:45:52 +08:00
commit 511d889557
28 changed files with 2084 additions and 0 deletions

12
pkg/task/config.toml Normal file
View 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
View 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
View 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()
}