83 lines
2.0 KiB
Go
83 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"github.com/ikuiki/go-component/language"
|
|
)
|
|
|
|
// AV:
|
|
// [GET]https://api.bilibili.com/x/player/pagelist?aid=1742929&jsonp=jsonp
|
|
// EP:
|
|
// [GET]https://api.bilibili.com/pgc/web/season/section?season_id=53&season_type=1
|
|
|
|
// EpisodeDataProvider 定义数据来源接口
|
|
type EpisodeDataProvider interface {
|
|
// GetEpisodeData 获取分集数据
|
|
GetEpisodeData(videoNo string, skipIndex ...int64) (episodes []episode, err error)
|
|
// GetEPData 根据视频号获取视频的集数据
|
|
GetEPData(videoNo int64) (epdatas []EPData, err error)
|
|
// GetAvData 根据av号获取av视频的集数据
|
|
GetAVData(avNo int64) (avdatas []AVData, err error)
|
|
}
|
|
|
|
type episode struct {
|
|
Index int64 `json:"index"`
|
|
Cid int64 `json:"cid"`
|
|
Title string `json:"title"`
|
|
}
|
|
|
|
type episodeDataProvider struct {
|
|
dataSource DataSource
|
|
}
|
|
|
|
// NewEpisodeDataProvider 创建episodeDataProvider
|
|
func NewEpisodeDataProvider(dataSource DataSource) EpisodeDataProvider {
|
|
provider := new(episodeDataProvider)
|
|
provider.dataSource = dataSource
|
|
return provider
|
|
}
|
|
|
|
func (provider *episodeDataProvider) GetEpisodeData(videoNo string, skipIndex ...int64) (episodes []episode, err error) {
|
|
videoType := videoNo[0:2]
|
|
videoID, err := strconv.ParseInt(videoNo[2:], 10, 64)
|
|
if err != nil {
|
|
return
|
|
}
|
|
fmt.Println(videoType, videoID)
|
|
switch videoType {
|
|
case "av":
|
|
avdatas, err := provider.GetAVData(videoID)
|
|
if err != nil {
|
|
return episodes, err
|
|
}
|
|
for i, avdata := range avdatas {
|
|
index := int64(i) + 1
|
|
if language.ArrayIn(skipIndex, index) == -1 {
|
|
episodes = append(episodes, episode{
|
|
Index: index,
|
|
Cid: avdata.Cid,
|
|
Title: avdata.Part,
|
|
})
|
|
}
|
|
}
|
|
case "ep":
|
|
epdatas, err := provider.GetEPData(videoID)
|
|
if err != nil {
|
|
return episodes, err
|
|
}
|
|
for i, epdata := range epdatas {
|
|
index := int64(i) + 1
|
|
if language.ArrayIn(skipIndex, index) == -1 {
|
|
episodes = append(episodes, episode{
|
|
Index: index,
|
|
Cid: epdata.Cid,
|
|
Title: epdata.LongTitle,
|
|
})
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|