collect optimization

This commit is contained in:
mubai
2026-03-30 21:47:26 +08:00
parent 0d258e90bd
commit 8a6bc33cad
23 changed files with 827 additions and 354 deletions

View File

@@ -3,7 +3,6 @@ package conver
import (
"encoding/xml"
"log"
"regexp"
"server/config"
"server/model/collect"
"server/model/system"
@@ -77,7 +76,6 @@ func ConvertFilmDetail(detail collect.FilmDetail) system.MovieDetail {
1.对常见分割符进行统一化处理
2.如果演员和导演名单过长,则进行截断, 最多只保留3个
*/
detail.VodActor = regexp.MustCompile(`[$&#%]`).ReplaceAllString(detail.VodActor, ",")
md := system.MovieDetail{
Mid: detail.VodID,
@@ -113,7 +111,7 @@ func ConvertFilmDetail(detail collect.FilmDetail) system.MovieDetail {
md.PlayFrom = strings.Split(detail.VodPlayFrom, detail.VodPlayNote)
// v2 只保留m3u8播放源
md.PlayList = GenFilmPlayList(detail.VodPlayURL, detail.VodPlayNote)
md.DownloadList = GenFilmPlayList(detail.VodDownURL, detail.VodPlayNote)
//md.DownloadList = GenFilmPlayList(detail.VodDownURL, detail.VodPlayNote)
return md
}

View File

@@ -13,41 +13,40 @@ import (
func CovertFilmDetailVo(fd system.FilmDetailVo) (system.MovieDetail, error) {
t, err := time.ParseInLocation(time.DateTime, fd.AddTime, time.Local)
md := system.MovieDetail{
Id: fd.Id,
Cid: fd.Cid,
Pid: fd.Pid,
Name: fd.Name,
Picture: fd.Picture,
DownFrom: fd.DownFrom,
MovieDescriptor: system.MovieDescriptor{
SubTitle: fd.SubTitle,
CName: fd.CName,
EnName: fd.EnName,
Initial: fd.Initial,
ClassTag: fd.ClassTag,
Actor: fd.Actor,
Director: fd.Director,
Writer: fd.Writer,
Blurb: fd.Content,
Remarks: fd.Remarks,
ReleaseDate: fd.ReleaseDate,
Area: fd.Area,
Language: fd.Language,
Year: fd.Year,
State: fd.State,
UpdateTime: fd.UpdateTime,
AddTime: t.Unix(),
DbId: fd.DbId,
DbScore: fd.DbScore,
Hits: fd.Hits,
Content: fd.Content,
},
Mid: fd.Id,
Cid: fd.Cid,
Pid: fd.Pid,
Name: fd.Name,
Picture: fd.Picture,
SubTitle: fd.SubTitle,
CName: fd.CName,
EnName: fd.EnName,
Initial: fd.Initial,
ClassTag: fd.ClassTag,
Actor: fd.Actor,
Director: fd.Director,
Writer: fd.Writer,
Blurb: fd.Content,
Remarks: fd.Remarks,
ReleaseDate: fd.ReleaseDate,
Area: fd.Area,
Language: fd.Language,
Year: fd.Year,
State: fd.State,
UpdateTime: fd.UpdateTime,
AddTime: t.Unix(),
DbId: fd.DbId,
DbScore: fd.DbScore,
Hits: fd.Hits,
Content: fd.Content,
PlayFrom: fd.PlayFrom,
DownFrom: fd.DownFrom,
}
// 通过分割符切分播放源信息 PlaySeparator $$$
//md.PlayFrom = strings.Split(fd.VodPlayFrom, fd.VodPlayNote)
// v2 只保留m3u8播放源
md.PlayList = GenFilmPlayList(fd.PlayLink, "$$$")
//md.DownloadList = GenFilmPlayList(fd.DownloadLink, fd.VodPlayNote)
md.DownloadList = GenFilmPlayList(fd.DownloadLink, "$$$")
return md, err
}

View File

@@ -2,14 +2,15 @@ package util
import (
"fmt"
"github.com/gocolly/colly/v2"
"github.com/gocolly/colly/v2/extensions"
"log"
"net/http"
"net/url"
"strconv"
"strings"
"time"
"github.com/gocolly/colly/v2"
"github.com/gocolly/colly/v2/extensions"
)
/*
@@ -29,6 +30,18 @@ type RequestInfo struct {
Err string `json:"err"` // 错误信息
}
// CopyRequestInfo 属性复制, 隔离地址引用造成的并发问题
func CopyRequestInfo(r RequestInfo) RequestInfo {
// 初始化返回值
newInfo := RequestInfo{Uri: r.Uri, Params: url.Values{}}
// 循环拷贝r的每个k,v
for k, v := range r.Params {
newInfo.Params[k] = append([]string(nil), v...)
}
return newInfo
}
// RefererUrl 记录上次请求的url
var RefererUrl string

View File

@@ -3,7 +3,6 @@ package util
import (
"crypto/md5"
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/hex"
"encoding/pem"
@@ -61,24 +60,24 @@ func PasswordEncrypt(password, salt string) string {
}
// ParsePriKeyBytes 解析私钥
func ParsePriKeyBytes(buf []byte) (*rsa.PrivateKey, error) {
func ParsePriKeyBytes(buf []byte) (any, error) {
p := &pem.Block{}
p, buf = pem.Decode(buf)
if p == nil {
return nil, errors.New("private key parse error")
}
return x509.ParsePKCS1PrivateKey(p.Bytes)
return x509.ParsePKCS8PrivateKey(p.Bytes)
}
// ParsePubKeyBytes 解析公钥
func ParsePubKeyBytes(buf []byte) (*rsa.PublicKey, error) {
func ParsePubKeyBytes(buf []byte) (any, error) {
p, _ := pem.Decode(buf)
if p == nil {
return nil, errors.New("parse publicKey content nil")
}
pubKey, err := x509.ParsePKCS1PublicKey(p.Bytes)
pubKey, err := x509.ParsePKIXPublicKey(p.Bytes)
if err != nil {
return nil, errors.New("x509.ParsePKCS1PublicKey error")
return nil, errors.New("x509.ParsePKIXPublicKey error")
}
return pubKey, nil
}
@@ -130,7 +129,7 @@ func ValidPwd(s string) error {
// TruncateBySep 截断字符串,保留指定数量的结果
func TruncateBySep(s string, limit int) string {
// 如果保留数量小于等于0则返回空值
if limit <= 0 {
if len(s) <= 0 || limit <= 0 {
return ""
}
// 先强制对不同的分割符进行统一替换为 ,
@@ -139,6 +138,9 @@ func TruncateBySep(s string, limit int) string {
// Split 会在分隔符连续出现或出现在首尾时产生空字符串,这通常符合预期
parts := strings.Split(s, ",")
// 片段数量小于或等于限制,直接返回原字符串
if len(parts) <= limit {
return strings.Join(parts, ",")
}
// 返回原字符串是为了保留原始的格式(比如末尾是否有分隔符)
// 即使不截断也重新 Join 一遍(去除多余的空片段等)
return strings.Join(parts[:limit], ",")