Fix: bili validate

pull/43/head
zijiren233 1 year ago
parent a8ab155cc5
commit c6d30d97eb

@ -28,7 +28,7 @@ require (
github.com/sirupsen/logrus v1.9.3 github.com/sirupsen/logrus v1.9.3
github.com/soheilhy/cmux v0.1.5 github.com/soheilhy/cmux v0.1.5
github.com/spf13/cobra v1.8.0 github.com/spf13/cobra v1.8.0
github.com/synctv-org/vendors v0.1.1-0.20231204154145-d6bf737a7c0b github.com/synctv-org/vendors v0.1.1-0.20231209122754-ebad9251fa7a
github.com/ulule/limiter/v3 v3.11.2 github.com/ulule/limiter/v3 v3.11.2
github.com/zencoder/go-dash/v3 v3.0.3 github.com/zencoder/go-dash/v3 v3.0.3
github.com/zijiren233/gencontainer v0.0.0-20231209055719-473cab2b7931 github.com/zijiren233/gencontainer v0.0.0-20231209055719-473cab2b7931

@ -350,6 +350,8 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/synctv-org/vendors v0.1.1-0.20231204154145-d6bf737a7c0b h1:QsHSl+bzDrY8oiPv/KcoBPjHa7R1VeyDNlChJrEHzus= github.com/synctv-org/vendors v0.1.1-0.20231204154145-d6bf737a7c0b h1:QsHSl+bzDrY8oiPv/KcoBPjHa7R1VeyDNlChJrEHzus=
github.com/synctv-org/vendors v0.1.1-0.20231204154145-d6bf737a7c0b/go.mod h1:DQHEXvrsnX9Ke6B0KVJ+w8uMgM/DZKNkvi6cJmRn+zk= github.com/synctv-org/vendors v0.1.1-0.20231204154145-d6bf737a7c0b/go.mod h1:DQHEXvrsnX9Ke6B0KVJ+w8uMgM/DZKNkvi6cJmRn+zk=
github.com/synctv-org/vendors v0.1.1-0.20231209122754-ebad9251fa7a h1:6X8PXLGHd41f1Fbr1HMxcceD+HQ4x/d9/FZL3XXc+Jk=
github.com/synctv-org/vendors v0.1.1-0.20231209122754-ebad9251fa7a/go.mod h1:Jo6+rczhFeZ2iLk8f89sVh8pdQygEUaUMZp3zmtHdy4=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=

@ -52,16 +52,18 @@ type BilibiliVendorInfo struct {
} }
func (b *BilibiliVendorInfo) Validate() error { func (b *BilibiliVendorInfo) Validate() error {
if b.Bvid == "" && b.Epid == 0 { switch {
return fmt.Errorf("bvid and epid are empty") // 先判断epid是否为0来确定是否是pgc
} case b.Epid != 0:
if b.Bvid == "" || b.Cid == 0 {
if b.Bvid != "" && b.Epid != 0 { return fmt.Errorf("bvid or cid is empty")
return fmt.Errorf("bvid and epid can't be set at the same time") }
} case b.Bvid != "":
if b.Cid == 0 {
if b.Bvid != "" && b.Cid == 0 { return fmt.Errorf("cid is empty")
return fmt.Errorf("cid is empty") }
default:
return fmt.Errorf("bvid or epid is empty")
} }
return nil return nil

@ -226,19 +226,7 @@ func (movie *Movie) Validate() error {
func (movie *Movie) validateVendorMovie() error { func (movie *Movie) validateVendorMovie() error {
switch movie.Movie.Base.VendorInfo.Vendor { switch movie.Movie.Base.VendorInfo.Vendor {
case model.StreamingVendorBilibili: case model.StreamingVendorBilibili:
err := movie.Movie.Base.VendorInfo.Bilibili.Validate() return movie.Movie.Base.VendorInfo.Bilibili.Validate()
if err != nil {
return err
}
if movie.Movie.Base.Headers == nil {
movie.Movie.Base.Headers = map[string]string{
"Referer": "https://www.bilibili.com",
"User-Agent": utils.UA,
}
} else {
movie.Movie.Base.Headers["Referer"] = "https://www.bilibili.com"
movie.Movie.Base.Headers["User-Agent"] = utils.UA
}
case model.StreamingVendorAlist: case model.StreamingVendorAlist:

@ -33,6 +33,7 @@ import (
"github.com/zencoder/go-dash/v3/mpd" "github.com/zencoder/go-dash/v3/mpd"
"github.com/zijiren233/livelib/protocol/hls" "github.com/zijiren233/livelib/protocol/hls"
"github.com/zijiren233/livelib/protocol/httpflv" "github.com/zijiren233/livelib/protocol/httpflv"
"golang.org/x/exp/maps"
) )
func GetPageAndPageSize(ctx *gin.Context) (int, int, error) { func GetPageAndPageSize(ctx *gin.Context) (int, int, error) {
@ -680,11 +681,11 @@ func initBilibiliMPDCache(ctx context.Context, movie dbModel.Movie) func() (any,
cli := vendor.BilibiliClient(movie.Base.VendorInfo.Backend) cli := vendor.BilibiliClient(movie.Base.VendorInfo.Backend)
var m, hevcM *mpd.MPD var m, hevcM *mpd.MPD
biliInfo := movie.Base.VendorInfo.Bilibili biliInfo := movie.Base.VendorInfo.Bilibili
if biliInfo.Bvid != "" && biliInfo.Cid != 0 { switch {
resp, err := cli.GetDashVideoURL(ctx, &bilibili.GetDashVideoURLReq{ case biliInfo.Epid != 0:
resp, err := cli.GetDashPGCURL(ctx, &bilibili.GetDashPGCURLReq{
Cookies: utils.HttpCookieToMap(cookies), Cookies: utils.HttpCookieToMap(cookies),
Bvid: biliInfo.Bvid, Epid: biliInfo.Epid,
Cid: biliInfo.Cid,
}) })
if err != nil { if err != nil {
return nil, err return nil, err
@ -698,10 +699,11 @@ func initBilibiliMPDCache(ctx context.Context, movie dbModel.Movie) func() (any,
return nil, err return nil, err
} }
} else if biliInfo.Epid != 0 { case biliInfo.Bvid != "":
resp, err := cli.GetDashPGCURL(ctx, &bilibili.GetDashPGCURLReq{ resp, err := cli.GetDashVideoURL(ctx, &bilibili.GetDashVideoURLReq{
Cookies: utils.HttpCookieToMap(cookies), Cookies: utils.HttpCookieToMap(cookies),
Epid: biliInfo.Epid, Bvid: biliInfo.Bvid,
Cid: biliInfo.Cid,
}) })
if err != nil { if err != nil {
return nil, err return nil, err
@ -714,8 +716,7 @@ func initBilibiliMPDCache(ctx context.Context, movie dbModel.Movie) func() (any,
if err != nil { if err != nil {
return nil, err return nil, err
} }
default:
} else {
return nil, errors.New("bvid and epid are empty") return nil, errors.New("bvid and epid are empty")
} }
m.BaseURL = append(m.BaseURL, fmt.Sprintf("/api/movie/proxy/%s/", movie.RoomID)) m.BaseURL = append(m.BaseURL, fmt.Sprintf("/api/movie/proxy/%s/", movie.RoomID))
@ -773,28 +774,33 @@ func initBilibiliShareCache(ctx context.Context, movie dbModel.Movie) func() (an
cli := vendor.BilibiliClient(movie.Base.VendorInfo.Backend) cli := vendor.BilibiliClient(movie.Base.VendorInfo.Backend)
var u string var u string
biliInfo := movie.Base.VendorInfo.Bilibili biliInfo := movie.Base.VendorInfo.Bilibili
if biliInfo.Bvid != "" { switch {
resp, err := cli.GetVideoURL(ctx, &bilibili.GetVideoURLReq{ case biliInfo.Epid != 0:
resp, err := cli.GetPGCURL(ctx, &bilibili.GetPGCURLReq{
Cookies: utils.HttpCookieToMap(cookies), Cookies: utils.HttpCookieToMap(cookies),
Bvid: biliInfo.Bvid, Epid: biliInfo.Epid,
Cid: biliInfo.Cid,
}) })
if err != nil { if err != nil {
return nil, err return nil, err
} }
u = resp.Url u = resp.Url
} else if biliInfo.Epid != 0 {
resp, err := cli.GetPGCURL(ctx, &bilibili.GetPGCURLReq{ case biliInfo.Bvid != "":
resp, err := cli.GetVideoURL(ctx, &bilibili.GetVideoURLReq{
Cookies: utils.HttpCookieToMap(cookies), Cookies: utils.HttpCookieToMap(cookies),
Epid: biliInfo.Epid, Bvid: biliInfo.Bvid,
Cid: biliInfo.Cid,
}) })
if err != nil { if err != nil {
return nil, err return nil, err
} }
u = resp.Url u = resp.Url
} else {
default:
return nil, errors.New("bvid and epid are empty") return nil, errors.New("bvid and epid are empty")
} }
return u, nil return u, nil
} }
} }
@ -881,7 +887,17 @@ func proxyVendorMovie(ctx *gin.Context, movie *op.Movie) {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorStringResp("stream id out of range")) ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorStringResp("stream id out of range"))
return return
} }
proxyURL(ctx, mpd.urls[streamId], movie.Movie.Base.Headers) headers := maps.Clone(movie.Movie.Base.Headers)
if headers == nil {
headers = map[string]string{
"Referer": "https://www.bilibili.com",
"User-Agent": utils.UA,
}
} else {
headers["Referer"] = "https://www.bilibili.com"
headers["User-Agent"] = utils.UA
}
proxyURL(ctx, mpd.urls[streamId], headers)
return return
} }

Loading…
Cancel
Save