mirror of
https://github.com/ProudMuBai/GoFilm.git
synced 2026-06-12 05:13:09 +08:00
New version trial
This commit is contained in:
@@ -1,17 +1,27 @@
|
||||
FROM golang:latest
|
||||
FROM golang:tip-alpine3.23 AS builder
|
||||
|
||||
ENV GO111MODULE=auto \
|
||||
CGO_ENABLED=0 \
|
||||
GOOS=linux \
|
||||
GOARCH=amd64 \
|
||||
GOPROXY=https://goproxy.cn,direct
|
||||
RUN apk add --no-cache ca-certificates git build-base
|
||||
|
||||
MAINTAINER "bai"
|
||||
|
||||
WORKDIR /opt/server
|
||||
|
||||
ADD ./server /opt/server
|
||||
|
||||
RUN go build main.go
|
||||
|
||||
EXPOSE 3061
|
||||
|
||||
|
||||
WORKDIR /build
|
||||
|
||||
COPY ./server/go.mod ./server/go.sum ./
|
||||
RUN --mount=type=cache,target=/go/pkg/mod \
|
||||
go mod download
|
||||
|
||||
|
||||
COPY ./server .
|
||||
|
||||
|
||||
RUN --mount=type=cache,target=/root/.cache/go-build \
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
|
||||
go build -ldflags="-s -w" -o /build/gofilm ./main.go
|
||||
|
||||
|
||||
FROM scratch
|
||||
|
||||
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
|
||||
COPY --from=builder /build/gofilm /gofilm
|
||||
|
||||
ENTRYPOINT ["/gofilm"]
|
||||
|
||||
@@ -136,7 +136,9 @@ mysql:
|
||||
|
||||
### 5. 管理后台基本使用说明
|
||||
|
||||
- 访问 http://xxx.xxx.xxx/manage 进行登录, 用户名 密码: `admin admin` , 登录成功后自行修改
|
||||
- 详情使用说明前往: [MuBaiBoat](https://blog.mubai.link/procedure/application/github/GoFilm/)个人博客观看
|
||||
|
||||
- 访问 http://xxx.xxx.xxx/manage 进行登录, 初始用户名/密码: `admin admin` , 登录成功后自行修改
|
||||
- 使用 `采集管理 -> 影视采集` 功能进行采集站信息的添加和更新, 系统初始化时有预留站点信息, 自行斟酌选择
|
||||
- 首先选择一个站点为主站点, 然后选择 采集一周, 一天, 或 全部, 进行主站点的数据采集, (前台数据全来自于主站点, 因此主站点只需要存在一个, 否则会冲突)
|
||||
- 主站点信息采集完成后则可在 影片管理 -> 影视分类 中进行主页分类展示信息的设置, 选择需要展示的分类信息, 以及分类的名称管理 (自行摸索如何使用)
|
||||
@@ -144,4 +146,6 @@ mysql:
|
||||
- 定时任务:
|
||||
- 系统默认添加一条规则, 但未启用, 该规则为每20分钟更新一次所有已开启的采集站的近3小时内更新的数据, 开启后则基本满足资源更新需求
|
||||
- 可自定义定时任务, 使用相关功能可自主选择对某些站点进行定时更新功能
|
||||
- 每周日对采集失败的记录进行二次采集处理
|
||||
- 每周日对近期采集数据进行同步入库
|
||||
|
||||
|
||||
290
film/data/nginx/html/assets/index-C7tICDmk.js
Normal file
290
film/data/nginx/html/assets/index-C7tICDmk.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
film/data/nginx/html/assets/index-DYf3Lkog.css
Normal file
1
film/data/nginx/html/assets/index-DYf3Lkog.css
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -11,8 +11,8 @@
|
||||
<meta charset="UTF-8"/>
|
||||
<title>(╥﹏╥)</title>
|
||||
<link rel="stylesheet" href="//at.alicdn.com/t/c/font_3992367_d9xdu8zk04f.css">
|
||||
<script type="module" crossorigin src="/assets/index-ChHS3BBc.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-b0J83Qwy.css">
|
||||
<script type="module" crossorigin src="/assets/index-C7tICDmk.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-DYf3Lkog.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
@@ -102,7 +102,6 @@ const (
|
||||
FailureRecordTableName = "failure_records"
|
||||
|
||||
//mysql服务配置信息 root:root 设置mysql账户的用户名和密码
|
||||
|
||||
MysqlDsn = "root:root@(mysql:3306)/FilmSite?charset=utf8mb4&parseTime=True&loc=Local"
|
||||
|
||||
// Redis连接信息
|
||||
|
||||
@@ -177,6 +177,7 @@ func DelSlaveMovieInfos(id string) {
|
||||
//}
|
||||
}
|
||||
|
||||
// AddMovieDetailIndex 添加详情表索引
|
||||
func AddMovieDetailIndex() {
|
||||
var m MovieDetail
|
||||
tableName := m.TableName()
|
||||
@@ -184,14 +185,16 @@ func AddMovieDetailIndex() {
|
||||
db.Mdb.Exec(fmt.Sprintf("CREATE UNIQUE INDEX idx_mid ON %s (mid)", tableName))
|
||||
}
|
||||
|
||||
// AddSlaveMovieInfoIndex 添加附属站点信息表索引
|
||||
func AddSlaveMovieInfoIndex() {
|
||||
var s SlaveMovieInfo
|
||||
tableName := s.TableName()
|
||||
// 如果不存在索引则创建对应索引
|
||||
if !db.Mdb.Migrator().HasIndex(&s, "idx_mid") {
|
||||
// 添加索引
|
||||
db.Mdb.Exec(fmt.Sprintf("CREATE INDEX idx_mid ON %s (mid)", tableName))
|
||||
db.Mdb.Exec(fmt.Sprintf("CREATE INDEX idx_dbId ON %s (db_id)", tableName))
|
||||
db.Mdb.Exec(fmt.Sprintf("CREATE INDEX idx_sid ON %s (sid DESC)", tableName))
|
||||
db.Mdb.Exec(fmt.Sprintf("CREATE INDEX idx_mid ON %s (mid DESC)", tableName))
|
||||
db.Mdb.Exec(fmt.Sprintf("CREATE INDEX idx_dbId ON %s (db_id DESC", tableName))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -312,7 +315,7 @@ func BatchUpdateDetails(ml []MovieDetail) (err error) {
|
||||
// ExistMovieDetailByMid 通过mid判断是否存在对应信息
|
||||
func ExistMovieDetailByMid(mid int64) bool {
|
||||
var count int64
|
||||
db.Mdb.Model(&SearchInfo{}).Where("mid", mid).Count(&count)
|
||||
db.Mdb.Model(&MovieDetail{}).Where("mid", mid).Count(&count)
|
||||
return count > 0
|
||||
}
|
||||
|
||||
@@ -440,12 +443,32 @@ func SlaveDetailCache(id string, ml []MovieDetail) error {
|
||||
// 只执行保存操作, 不考虑更新情况
|
||||
s := SlaveMovieInfo{Sid: id, Mid: GenerateHashKey(m.Name), DbId: m.DbId, PlayList: m.PlayList}
|
||||
r, _ := json.Marshal(s)
|
||||
data[s.Mid] = string(r)
|
||||
// redis中的存储key优先db_id
|
||||
if s.DbId > 0 {
|
||||
data[fmt.Sprintf("%d", s.DbId)] = string(r)
|
||||
} else {
|
||||
data[s.Mid] = string(r)
|
||||
}
|
||||
}
|
||||
// 使用 Sid:Mid为key, 用以区分不同站点数据
|
||||
return db.Rdb.HSet(db.Cxt, fmt.Sprintf(config.MultipleSiteDetailKey, id), data).Err()
|
||||
}
|
||||
|
||||
// GetSlaveDetailInCache 从redis缓存中获取播放信息
|
||||
func GetSlaveDetailInCache(sid, mid string) SlaveMovieInfo {
|
||||
// 初始化返回值
|
||||
var s SlaveMovieInfo
|
||||
v, err := db.Rdb.HGet(db.Cxt, fmt.Sprintf(config.MultipleSiteDetailKey, sid), mid).Result()
|
||||
if err != nil {
|
||||
// 如果没有获取到对应值, 则直接continue
|
||||
//log.Println("Get MultipleSiteDetail Failed: ", err)
|
||||
return s
|
||||
}
|
||||
// 如果获取到数据则直接退出本次循环
|
||||
_ = json.Unmarshal([]byte(v), &s)
|
||||
return s
|
||||
}
|
||||
|
||||
// SyncMovieDetail 同步redis中的影片数据到mysql中
|
||||
func SyncMovieDetail(sid string, grade SourceGrade, mode int) {
|
||||
// 初始化游标
|
||||
@@ -554,8 +577,7 @@ func GetDetailByMid(mid int64) MovieDetail {
|
||||
if err != nil {
|
||||
// 如果没有获取到对应值, 则去mysql中进行查找
|
||||
if errors.Is(err, redis.Nil) {
|
||||
if err := db.Mdb.Model(&MovieDetail{}).Select("id, mid, cid, pid, name, sub_title, c_name, state, picture, actor, director,"+
|
||||
" content, remarks, area, year").Where("mid = ?", mid).Find(&m).Error; err != nil {
|
||||
if err := db.Mdb.Where("mid = ?", mid).Find(&m).Error; err != nil {
|
||||
log.Println("Find BasicInfo Failed: ", err)
|
||||
return m
|
||||
}
|
||||
@@ -631,7 +653,7 @@ func GetBasicInfoByIds(ids []int64) []MovieBasicInfo {
|
||||
// 如果存在nil值,则去mysql进行补全
|
||||
if len(newIds) > 0 {
|
||||
if err := db.Mdb.Model(&MovieDetail{}).Select("id, mid, cid, pid, name, sub_title, c_name, state, picture, actor, director,"+
|
||||
" content, remarks, area, year").Where("mid IN (?)", ids).Find(&ml).Error; err != nil {
|
||||
" content, remarks, area, year").Where("mid IN (?)", newIds).Find(&ml).Error; err != nil {
|
||||
log.Println("BatchFind BasicInfo Failed: ", err)
|
||||
return nil
|
||||
}
|
||||
@@ -747,17 +769,26 @@ func GetMultiplePlay(mIds []string, dbId int64) []SlaveMovieInfo {
|
||||
continue
|
||||
}
|
||||
var s SlaveMovieInfo
|
||||
// 优先使用dbID为key去redis中获取
|
||||
if s = GetSlaveDetailInCache(c.Id, fmt.Sprintf("%d", dbId)); s.Mid != "" {
|
||||
l = append(l, s)
|
||||
continue
|
||||
}
|
||||
for _, mid := range mIds {
|
||||
// 初始化临时变量 SlaveMovieInfo
|
||||
v, err := db.Rdb.HGet(db.Cxt, fmt.Sprintf(config.MultipleSiteDetailKey, c.Id), mid).Result()
|
||||
if err != nil {
|
||||
// 如果没有获取到对应值, 则直接continue
|
||||
continue
|
||||
if s = GetSlaveDetailInCache(c.Id, mid); s.Mid != "" {
|
||||
l = append(l, s)
|
||||
break
|
||||
}
|
||||
// 如果获取到数据则直接退出本次循环
|
||||
_ = json.Unmarshal([]byte(v), &s)
|
||||
l = append(l, s)
|
||||
break
|
||||
//v, err := db.Rdb.HGet(db.Cxt, fmt.Sprintf(config.MultipleSiteDetailKey, c.Id), mid).Result()
|
||||
//if err != nil {
|
||||
// // 如果没有获取到对应值, 则直接continue
|
||||
// continue
|
||||
//}
|
||||
//// 如果获取到数据则直接退出本次循环
|
||||
//_ = json.Unmarshal([]byte(v), &s)
|
||||
//l = append(l, s)
|
||||
//break
|
||||
}
|
||||
// 如果迭代完s依旧为空,则去mysql中进行匹配
|
||||
if s.Mid == "" {
|
||||
|
||||
@@ -27,8 +27,8 @@ func InitMysql() (err error) {
|
||||
//NameReplacer: strings.NewReplacer("spider_", ""), // 替表名和字段中的 Me 为 空
|
||||
},
|
||||
//Logger: logger.Default.LogMode(logger.Warn), //设置日志级别为Info
|
||||
Logger: logger.Default.LogMode(logger.Info), //设置日志级别为Info
|
||||
//Logger: logger.Default.LogMode(logger.Error), //设置日志级别为Info
|
||||
//Logger: logger.Default.LogMode(logger.Info), //设置日志级别为Info
|
||||
Logger: logger.Default.LogMode(logger.Error), //设置日志级别为Info
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user