From e223bb0decd85f67d2d1ddfe175712dfadfab7c9 Mon Sep 17 00:00:00 2001 From: runstp Date: Thu, 26 Jan 2023 22:20:09 +0800 Subject: [PATCH] =?UTF-8?q?[perf]=20=E8=A2=AB=E5=88=A0=E9=99=A4=E7=9A=84?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E4=B9=9F=E4=BC=9A=E5=90=8C=E6=AD=A5=E5=88=A0?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/app/api/idl/bilbil_video.go | 5 ++++- internal/app/spider/update.go | 17 ++++++++++++----- internal/app/spider/video.go | 6 +++--- internal/repository/bilbil_video.go | 12 ++++++++++++ 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/internal/app/api/idl/bilbil_video.go b/internal/app/api/idl/bilbil_video.go index 10223e9..121cf81 100644 --- a/internal/app/api/idl/bilbil_video.go +++ b/internal/app/api/idl/bilbil_video.go @@ -1,8 +1,9 @@ package idl import ( - "git.vtb.link/eoefans/internal/app/api/util/query_parser" "time" + + "git.vtb.link/eoefans/internal/app/api/util/query_parser" ) type BilibiliVideoSearchReq struct { @@ -20,6 +21,7 @@ type BilibiliVideoSearchResp struct { } const ( + BilibiliVideoFailureStatus = 2 BilibiliVideoEnabledStatus = 1 BilibiliVideoDisabledStatus = 0 ) @@ -64,6 +66,7 @@ const ( type BilibiliVideoRepository interface { Save(e *BilibiliVideo) error Shield(bvid string) error + Failure(bvid string) error FindAllByBvidList(bvidList []string) (list []*BilibiliVideo, err error) FindAllByPubDate(from time.Time, to time.Time, page, size int64) (list []*BilibiliVideo, total int64, err error) diff --git a/internal/app/spider/update.go b/internal/app/spider/update.go index 5f7d648..2892cc1 100644 --- a/internal/app/spider/update.go +++ b/internal/app/spider/update.go @@ -92,10 +92,17 @@ func (u *Update) spider() error { if err != nil { if bErr, ok := err.(*bilibili.Error); ok { //bErr.Code == 62022 // 视频被删除 - u.logger.Warn("VideoWebInfo error", zap.String("bvid", video.Bvid), zap.Int("code", bErr.Code), zap.String("message", bErr.Message)) - } else { - u.logger.Error("VideoWebInfo error", zap.String("bvid", video.Bvid), zap.Error(err)) + if bErr.Code == 62022 { + if err := repository.NewBilibiliVideo(tx).Failure(vInfo.Bvid); err != nil { + u.logger.Error("update error", zap.String("bvid", video.Bvid), zap.Error(err)) + } + } else { + u.logger.Warn("VideoWebInfo error", zap.String("bvid", video.Bvid), zap.Int("code", bErr.Code), zap.String("message", bErr.Message)) + } + continue } + + u.logger.Error("VideoWebInfo error", zap.String("bvid", video.Bvid), zap.Error(err)) continue } @@ -118,8 +125,8 @@ func (u *Update) spider() error { continue } - if err := insertDB(tx, vInfo, strings.Join(tags, ",")); err != nil { - u.logger.Error("insertDB error", zap.String("bvid", video.Bvid), zap.Error(err)) + if err := InsertDB(tx, vInfo, strings.Join(tags, ",")); err != nil { + u.logger.Error("InsertDB error", zap.String("bvid", video.Bvid), zap.Error(err)) } } diff --git a/internal/app/spider/video.go b/internal/app/spider/video.go index c530452..63ef5d5 100644 --- a/internal/app/spider/video.go +++ b/internal/app/spider/video.go @@ -130,8 +130,8 @@ func (v *Video) spider() error { continue } - if err := insertDB(v.db.WithContext(context.TODO()), info, sInfo.Tag); err != nil { - v.logger.Error("insertDB error", zap.String("bvid", sInfo.Bvid), zap.Error(err)) + if err := InsertDB(v.db.WithContext(context.TODO()), info, sInfo.Tag); err != nil { + v.logger.Error("InsertDB error", zap.String("bvid", sInfo.Bvid), zap.Error(err)) _, _ = failBvFile.WriteString(sInfo.Bvid + "\n") } @@ -147,7 +147,7 @@ func (v *Video) spider() error { return nil } -func insertDB(tx *gorm.DB, info *bilibili.VideoInfoResponse, strTag string) error { +func InsertDB(tx *gorm.DB, info *bilibili.VideoInfoResponse, strTag string) error { e := &idl.BilibiliVideo{ Bvid: info.Bvid, Aid: uint64(info.Aid), diff --git a/internal/repository/bilbil_video.go b/internal/repository/bilbil_video.go index 9b02d78..2e53deb 100644 --- a/internal/repository/bilbil_video.go +++ b/internal/repository/bilbil_video.go @@ -130,6 +130,18 @@ func (impl *BilibiliVideoMysqlImpl) Shield(bvid string) error { return nil } +func (impl *BilibiliVideoMysqlImpl) Failure(bvid string) error { + result := impl.tx.Table(bilibiliVideoTableName). + Where("bvid = ? AND status = ?", bvid, idl.BilibiliVideoEnabledStatus). + UpdateColumn("status", idl.BilibiliVideoFailureStatus) + + if result.Error != nil { + return errors.Wrap(result.Error, fmt.Sprintf("update %s fail", bilibiliVideoTableName)) + } + + return nil +} + func (impl *BilibiliVideoMysqlImpl) Save(e *idl.BilibiliVideo) error { return impl.tx.Transaction(func(_tx *gorm.DB) error { result := _tx.Table(bilibiliVideoTableName).Where("bvid = ?", e.Bvid).Select("id").Find(&e.Id)