mirror of
https://github.com/ProudMuBai/GoFilm.git
synced 2026-02-03 22:44:47 +08:00
178 lines
4.4 KiB
Go
178 lines
4.4 KiB
Go
package system
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"github.com/redis/go-redis/v9"
|
|
"log"
|
|
"server/config"
|
|
"server/plugin/common/util"
|
|
"server/plugin/db"
|
|
)
|
|
|
|
/*
|
|
影视采集站点信息
|
|
*/
|
|
|
|
type SourceGrade int
|
|
|
|
const (
|
|
MasterCollect SourceGrade = iota
|
|
SlaveCollect
|
|
)
|
|
|
|
type CollectResultModel int
|
|
|
|
const (
|
|
JsonResult CollectResultModel = iota
|
|
XmlResult
|
|
)
|
|
|
|
type ResourceType int
|
|
|
|
func (rt ResourceType) GetActionType() string {
|
|
var ac string = ""
|
|
switch rt {
|
|
case CollectVideo:
|
|
ac = "detail"
|
|
case CollectArticle:
|
|
ac = "article"
|
|
case CollectActor:
|
|
ac = "actor"
|
|
case CollectRole:
|
|
ac = "role"
|
|
case CollectWebSite:
|
|
ac = "web"
|
|
default:
|
|
ac = "detail"
|
|
}
|
|
return ac
|
|
}
|
|
|
|
const (
|
|
CollectVideo = iota
|
|
CollectArticle
|
|
CollectActor
|
|
CollectRole
|
|
CollectWebSite
|
|
)
|
|
|
|
// FilmSource 影视站点信息保存结构体
|
|
type FilmSource struct {
|
|
Id string `json:"id"` // 唯一ID
|
|
Name string `json:"name"` // 采集站点备注名
|
|
Uri string `json:"uri"` // 采集链接
|
|
ResultModel CollectResultModel `json:"resultModel"` // 接口返回类型, json || xml
|
|
Grade SourceGrade `json:"grade"` // 采集站等级 主站点 || 附属站
|
|
SyncPictures bool `json:"syncPictures"` // 是否同步图片到服务器
|
|
CollectType ResourceType `json:"collectType"` // 采集资源类型
|
|
State bool `json:"state"` // 是否启用
|
|
Interval int `json:"interval"` // 采集时间间隔 单位/ms
|
|
}
|
|
|
|
// SaveCollectSourceList 保存采集站Api列表
|
|
func SaveCollectSourceList(list []FilmSource) error {
|
|
var zl []redis.Z
|
|
for _, v := range list {
|
|
m, _ := json.Marshal(v)
|
|
zl = append(zl, redis.Z{Score: float64(v.Grade), Member: m})
|
|
}
|
|
return db.Rdb.ZAdd(db.Cxt, config.FilmSourceListKey, zl...).Err()
|
|
}
|
|
|
|
// GetCollectSourceList 获取采集站API列表
|
|
func GetCollectSourceList() []FilmSource {
|
|
l, err := db.Rdb.ZRange(db.Cxt, config.FilmSourceListKey, 0, -1).Result()
|
|
if err != nil {
|
|
log.Println(err)
|
|
return nil
|
|
}
|
|
return getCollectSource(l)
|
|
}
|
|
|
|
// GetCollectSourceListByGrade 返回指定类型的采集Api信息 Master | Slave
|
|
func GetCollectSourceListByGrade(grade SourceGrade) []FilmSource {
|
|
s := fmt.Sprintf("%d", grade)
|
|
zl, err := db.Rdb.ZRangeByScore(db.Cxt, config.FilmSourceListKey, &redis.ZRangeBy{Max: s, Min: s}).Result()
|
|
if err != nil {
|
|
log.Println(err)
|
|
return nil
|
|
}
|
|
return getCollectSource(zl)
|
|
}
|
|
|
|
// FindCollectSourceById 通过Id标识获取对应的资源站信息
|
|
func FindCollectSourceById(id string) *FilmSource {
|
|
for _, v := range GetCollectSourceList() {
|
|
if v.Id == id {
|
|
return &v
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// 将 []string 转化为 []FilmSourceApi
|
|
func getCollectSource(sl []string) []FilmSource {
|
|
var l []FilmSource
|
|
for _, s := range sl {
|
|
f := FilmSource{}
|
|
_ = json.Unmarshal([]byte(s), &f)
|
|
l = append(l, f)
|
|
}
|
|
return l
|
|
}
|
|
|
|
// DelCollectResource 通过Id删除对应的采集站点信息
|
|
func DelCollectResource(id string) {
|
|
for _, v := range GetCollectSourceList() {
|
|
if v.Id == id {
|
|
data, _ := json.Marshal(v)
|
|
db.Rdb.ZRem(db.Cxt, config.FilmSourceListKey, data)
|
|
}
|
|
}
|
|
}
|
|
|
|
// AddCollectSource 添加采集站信息
|
|
func AddCollectSource(s FilmSource) error {
|
|
for _, v := range GetCollectSourceList() {
|
|
if v.Uri == s.Uri {
|
|
return errors.New("当前采集站点信息已存在, 请勿重复添加")
|
|
}
|
|
}
|
|
// 生成一个短uuid
|
|
s.Id = util.GenerateSalt()
|
|
data, _ := json.Marshal(s)
|
|
return db.Rdb.ZAddNX(db.Cxt, config.FilmSourceListKey, redis.Z{Score: float64(s.Grade), Member: data}).Err()
|
|
}
|
|
|
|
// UpdateCollectSource 更新采集站信息
|
|
func UpdateCollectSource(s FilmSource) error {
|
|
for _, v := range GetCollectSourceList() {
|
|
if v.Id != s.Id && v.Uri == s.Uri {
|
|
return errors.New("当前采集站链接已存在其他站点中, 请勿重复添加")
|
|
} else if v.Id == s.Id {
|
|
// 删除当前旧的采集信息
|
|
DelCollectResource(s.Id)
|
|
// 将新的采集信息存入list中
|
|
data, _ := json.Marshal(s)
|
|
db.Rdb.ZAdd(db.Cxt, config.FilmSourceListKey, redis.Z{Score: float64(s.Grade), Member: data})
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// ClearAllCollectSource 删除所有采集站信息
|
|
func ClearAllCollectSource() {
|
|
db.Rdb.Del(db.Cxt, config.FilmSourceListKey)
|
|
}
|
|
|
|
// ExistCollectSourceList 查询是否已经存在站点list相关数据
|
|
func ExistCollectSourceList() bool {
|
|
if db.Rdb.Exists(db.Cxt, config.FilmSourceListKey).Val() == 0 {
|
|
return false
|
|
}
|
|
return true
|
|
|
|
}
|