diff --git a/avsource.go b/avsource.go
new file mode 100644
index 0000000..c07dd2c
--- /dev/null
+++ b/avsource.go
@@ -0,0 +1,32 @@
+package main
+
+// epDataProvider中
+
+// AVData av视频信息
+type AVData struct {
+ Cid int64 `json:"cid"`
+ Dimension struct {
+ Height int64 `json:"height"`
+ Rotate int64 `json:"rotate"`
+ Width int64 `json:"width"`
+ } `json:"dimension"`
+ Duration int64 `json:"duration"`
+ From string `json:"from"`
+ Page int64 `json:"page"`
+ Part string `json:"part"`
+ Vid string `json:"vid"`
+ Weblink string `json:"weblink"`
+}
+
+// AVResponse av视频信息请求接口返回数据
+type AVResponse struct {
+ Code int64 `json:"code"`
+ Data []AVData `json:"data"`
+ Message string `json:"message"`
+ TTL int64 `json:"ttl"`
+}
+
+// GetAVData 根据videoNo从bilibili获取av数据
+func (*episodeDataProvider) GetAVData(avNo int64) (avdatas []AVData, err error) {
+ return
+}
diff --git a/datasource.go b/datasource.go
index 3488257..1dc0a1d 100644
--- a/datasource.go
+++ b/datasource.go
@@ -1,31 +1,17 @@
package main
-// EPData 视频信息
-type EPData struct {
- Cid int64 `json:"cid"`
- Dimension struct {
- Height int64 `json:"height"`
- Rotate int64 `json:"rotate"`
- Width int64 `json:"width"`
- } `json:"dimension"`
- Duration int64 `json:"duration"`
- From string `json:"from"`
- Page int64 `json:"page"`
- Part string `json:"part"`
- Vid string `json:"vid"`
- Weblink string `json:"weblink"`
-}
+// 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
-// EPResponse 视频信息请求接口返回数据
-type EPResponse struct {
- Code int64 `json:"code"`
- Data []EPData `json:"data"`
- Message string `json:"message"`
- TTL int64 `json:"ttl"`
-}
-
-// EPDataProvider 定义数据来源接口
-type EPDataProvider interface {
+// EpisodeDataProvider 定义数据来源接口
+type EpisodeDataProvider interface {
// GetEPData 根据视频号获取视频的集数据
- GetEPData(videoNo string) (epdatas []EPData, err error)
+ GetEPData(videoNo int64) (epdatas []EPData, err error)
+ // GetAvData 根据av号获取av视频的集数据
+ GetAVData(avNo int64) (avdatas []AVData, err error)
+}
+
+type episodeDataProvider struct {
}
diff --git a/epsource.go b/epsource.go
new file mode 100644
index 0000000..2c9c63b
--- /dev/null
+++ b/epsource.go
@@ -0,0 +1,41 @@
+package main
+
+// EPData 视频信息
+type EPData struct {
+ Aid int64 `json:"aid"`
+ Badge string `json:"badge"`
+ BadgeType int64 `json:"badge_type"`
+ Cid int64 `json:"cid"`
+ Cover string `json:"cover"`
+ From string `json:"from"`
+ ID int64 `json:"id"`
+ LongTitle string `json:"long_title"`
+ ShareURL string `json:"share_url"`
+ Stat struct {
+ Danmakus int64 `json:"danmakus"`
+ Play int64 `json:"play"`
+ } `json:"stat"`
+ Status int64 `json:"status"`
+ Title string `json:"title"`
+ Vid string `json:"vid"`
+}
+
+// SectionResponse 获取section数据的返回
+type SectionResponse struct {
+ Code int64 `json:"code"`
+ Message string `json:"message"`
+ Result struct {
+ MainSection struct {
+ Episodes []EPData `json:"episodes"`
+ ID int64 `json:"id"`
+ Title string `json:"title"`
+ Type int64 `json:"type"`
+ } `json:"main_section"`
+ Section []interface{} `json:"section"`
+ } `json:"result"`
+}
+
+// GetEPData 根据videoNo从bilibili获取av数据
+func (*episodeDataProvider) GetEPData(epNo int64) (epdatas []EPData, err error) {
+ return
+}
diff --git a/main.go b/main.go
index 5ad8539..2c85fe9 100644
--- a/main.go
+++ b/main.go
@@ -2,15 +2,59 @@ package main
import (
"fmt"
+ "strconv"
)
+type episode struct {
+ Index int64 `json:"index"`
+ Cid int64 `json:"cid"`
+ Title string `json:"title"`
+}
+
func main() {
- epProvider := new(mockProvider)
- epdatas, err := epProvider.GetEPData("av1742161")
+ episodeProvider := new(mockProvider)
+ // epdatas, err := getEPData(episodeProvider, "av1742161")
+ epdatas, err := getEPData(episodeProvider, "ep173262")
if err != nil {
panic(err)
}
for i, epdata := range epdatas {
- fmt.Printf("ep %d Cid: %v, Part: %s\n", i, epdata.Cid, epdata.Part)
+ fmt.Printf("ep %d Cid: %v, Title: %s\n", i, epdata.Cid, epdata.Title)
}
}
+
+func getEPData(provider EpisodeDataProvider, videoNo string) (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 {
+ episodes = append(episodes, episode{
+ Index: int64(i),
+ Cid: avdata.Cid,
+ Title: avdata.Part,
+ })
+ }
+ case "ep":
+ epdatas, err := provider.GetEPData(videoID)
+ if err != nil {
+ return episodes, err
+ }
+ for i, epdata := range epdatas {
+ episodes = append(episodes, episode{
+ Index: int64(i),
+ Cid: epdata.Cid,
+ Title: epdata.LongTitle,
+ })
+ }
+ }
+ return
+}
diff --git a/mock.go b/mock.go
index f40fb29..4c950c6 100644
--- a/mock.go
+++ b/mock.go
@@ -2,20 +2,52 @@ package main
import (
"encoding/json"
- "os"
+ "errors"
+ "io/ioutil"
+ "regexp"
+ "strconv"
)
-type mockProvider struct{}
+type mockProvider struct {
+ *episodeDataProvider
+}
-func (mock *mockProvider) GetEPData(videoNo string) (epdatas []EPData, err error) {
- file, err := os.Open("mock/" + videoNo + ".json")
+func (mock *mockProvider) GetAVData(avNo int64) (avdatas []AVData, err error) {
+ file, err := ioutil.ReadFile("mock/av" + strconv.FormatInt(avNo, 10) + ".json")
if err != nil {
- return epdatas, err
+ return avdatas, err
}
- var resp EPResponse
- err = json.NewDecoder(file).Decode(&resp)
+ var resp AVResponse
+ err = json.Unmarshal(file, &resp)
if err != nil {
- return epdatas, err
+ return avdatas, err
}
return resp.Data, nil
}
+
+func (mock *mockProvider) GetEPData(epNo int64) (epdatas []EPData, err error) {
+ htmlByte, err := ioutil.ReadFile("mock/ep" + strconv.FormatInt(epNo, 10) + ".html")
+ if err != nil {
+ return
+ }
+ // the regex rule is: \"ssId\":\d+
+ re, err := regexp.Compile("\\\"ssId\\\":(\\d+)")
+ if err != nil {
+ return
+ }
+ ssidResult := re.Find(htmlByte)
+ if len(ssidResult) == 0 {
+ return epdatas, errors.New("ssid not found")
+ }
+ ssid := string(ssidResult)[7:]
+ ssByte, err := ioutil.ReadFile("mock/ss" + ssid + ".json")
+ if err != nil {
+ return
+ }
+ var resp SectionResponse
+ err = json.Unmarshal(ssByte, &resp)
+ if err != nil {
+ return
+ }
+ return resp.Result.MainSection.Episodes, err
+}
diff --git a/mock/ep173262.html b/mock/ep173262.html
new file mode 100644
index 0000000..2f86e73
--- /dev/null
+++ b/mock/ep173262.html
@@ -0,0 +1,7 @@
+
齐木楠雄的灾难 第二季:第1话_番剧_bilibili_哔哩哔哩
齐木楠雄的灾难 系列
第一季 日播&精选版
全120话
1.8亿播放 · 122.5万追番
第一季 TV
全24话
6739.2万播放 · 127.3万追番
完结篇
全2话
225.5万播放 · 27.1万追番
diff --git a/mock/ss21469.json b/mock/ss21469.json
new file mode 100644
index 0000000..19e9cfa
--- /dev/null
+++ b/mock/ss21469.json
@@ -0,0 +1 @@
+{"code":0,"message":"success","result":{"main_section":{"episodes":[{"aid":19700194,"badge":"会员","badge_type":0,"cid":32122281,"cover":"http://i0.hdslb.com/bfs/archive/d108d360396598785385a735b8941c5fae4ca262.jpg","from":"bangumi","id":173262,"long_title":"再次开始!「一如既往」的日常","share_url":"https://m.bilibili.com/bangumi/play/ep173262","stat":{"danmakus":65662,"play":1966888},"status":13,"title":"1","vid":""},{"aid":19702568,"badge":"会员","badge_type":0,"cid":32557171,"cover":"http://i0.hdslb.com/bfs/archive/0d3156123aaebec4b4508a45f82d5c7ce5c67d9c.jpg","from":"bangumi","id":173263,"long_title":"体验科幻","share_url":"https://m.bilibili.com/bangumi/play/ep173263","stat":{"danmakus":30677,"play":1800222},"status":13,"title":"2","vid":""},{"aid":19702582,"badge":"会员","badge_type":0,"cid":32558324,"cover":"http://i0.hdslb.com/bfs/archive/b7badd031bf22117702eefdf0a9c5221fc7a6a63.jpg","from":"bangumi","id":173264,"long_title":"深冬的灾难","share_url":"https://m.bilibili.com/bangumi/play/ep173264","stat":{"danmakus":25947,"play":1691486},"status":13,"title":"3","vid":""},{"aid":19700180,"badge":"会员","badge_type":0,"cid":32558368,"cover":"http://i0.hdslb.com/bfs/archive/f642d65f3b5d85af1941293cf15758a276dfbf1b.jpg","from":"bangumi","id":173265,"long_title":"梨歩田依舞的灾难","share_url":"https://m.bilibili.com/bangumi/play/ep173265","stat":{"danmakus":36589,"play":1770511},"status":13,"title":"4","vid":""},{"aid":19705516,"badge":"会员","badge_type":0,"cid":32561680,"cover":"http://i0.hdslb.com/bfs/archive/91cdabe6aab9bee89ca7613a4e33a6775fb0048e.jpg","from":"bangumi","id":173266,"long_title":"再战!梨歩田VS照桥","share_url":"https://m.bilibili.com/bangumi/play/ep173266","stat":{"danmakus":35948,"play":1813462},"status":13,"title":"5","vid":""},{"aid":19824773,"badge":"会员","badge_type":0,"cid":32339915,"cover":"http://i0.hdslb.com/bfs/archive/6e5b6ca3249c6e69620e62ae8e07885370e14722.jpg","from":"bangumi","id":173267,"long_title":"才虎财阀的豪华海上观光","share_url":"https://m.bilibili.com/bangumi/play/ep173267","stat":{"danmakus":36502,"play":1804184},"status":13,"title":"6","vid":""},{"aid":20140783,"badge":"会员","badge_type":0,"cid":32877155,"cover":"http://i0.hdslb.com/bfs/archive/88f6e4bdaad48e9bf5d707b077cfcdde08f4df3c.jpg","from":"bangumi","id":173268,"long_title":"齐木楠雄的遇难","share_url":"https://m.bilibili.com/bangumi/play/ep173268","stat":{"danmakus":31277,"play":1860626},"status":13,"title":"7","vid":""},{"aid":20445220,"badge":"会员","badge_type":0,"cid":33422928,"cover":"http://i0.hdslb.com/bfs/archive/e1ef45ad2480d50c48c698c0dc1ecb3e8a6292ab.jpg","from":"bangumi","id":173269,"long_title":"神烦!超级不妙的转学生出现!","share_url":"https://m.bilibili.com/bangumi/play/ep173269","stat":{"danmakus":36403,"play":1994403},"status":13,"title":"8","vid":""},{"aid":20728312,"badge":"会员","badge_type":0,"cid":34220196,"cover":"http://i0.hdslb.com/bfs/archive/0a65e298faa2c4d25662b6376b665409ac7898e7.jpg","from":"bangumi","id":173270,"long_title":"超能力者要留心注意(前/后篇) / 梦幻的超能力马戏表演(前/后篇) / 祈祷你无病无灾!!","share_url":"https://m.bilibili.com/bangumi/play/ep173270","stat":{"danmakus":31942,"play":2012814},"status":13,"title":"9","vid":""},{"aid":21010313,"badge":"会员","badge_type":0,"cid":34452753,"cover":"http://i0.hdslb.com/bfs/archive/f69992201125329de9b7fcd7418ee4b493ba0be4.jpg","from":"bangumi","id":173271,"long_title":"齐木家集结!!","share_url":"https://m.bilibili.com/bangumi/play/ep173271","stat":{"danmakus":24486,"play":1941983},"status":13,"title":"10","vid":""},{"aid":21302575,"badge":"会员","badge_type":0,"cid":35232337,"cover":"http://i0.hdslb.com/bfs/archive/a53545910f48dd0e8ac4765ced043a9b16e42a98.jpg","from":"bangumi","id":173272,"long_title":"笨拙 晴天霹雳","share_url":"https://m.bilibili.com/bangumi/play/ep173272","stat":{"danmakus":38340,"play":2079286},"status":13,"title":"11","vid":""},{"aid":21590125,"badge":"会员","badge_type":0,"cid":35821836,"cover":"http://i0.hdslb.com/bfs/archive/9988769902e7d0c0dbe4b3d04bd8a495915528dc.jpg","from":"bangumi","id":173273,"long_title":"心跳加速的交往宣言","share_url":"https://m.bilibili.com/bangumi/play/ep173273","stat":{"danmakus":32899,"play":2116143},"status":13,"title":"12","vid":""},{"aid":21908227,"badge":"会员","badge_type":0,"cid":36175756,"cover":"http://i0.hdslb.com/bfs/archive/dc93ac0a5d4d5503503ca2d702750698bd6db991.jpg","from":"bangumi","id":173274,"long_title":"目良千里的再会","share_url":"https://m.bilibili.com/bangumi/play/ep173274","stat":{"danmakus":31807,"play":1964402},"status":13,"title":"13","vid":""},{"aid":22216117,"badge":"会员","badge_type":0,"cid":36759045,"cover":"http://i0.hdslb.com/bfs/archive/dc68a1d0a959b5f1ceaf623c5dca1ebaecc18cd4.jpg","from":"bangumi","id":173275,"long_title":"才虎一族最大的试炼","share_url":"https://m.bilibili.com/bangumi/play/ep173275","stat":{"danmakus":26905,"play":1915760},"status":13,"title":"14","vid":""},{"aid":22516657,"badge":"会员","badge_type":0,"cid":37328174,"cover":"http://i0.hdslb.com/bfs/archive/766328b3c47aa69b456bf7d389befac7c58d10cb.jpg","from":"bangumi","id":173276,"long_title":"重建棒球部吧!","share_url":"https://m.bilibili.com/bangumi/play/ep173276","stat":{"danmakus":24182,"play":1861328},"status":13,"title":"15","vid":""},{"aid":22844368,"badge":"会员","badge_type":0,"cid":37949322,"cover":"http://i0.hdslb.com/bfs/archive/573dcddf6e26271cde7760359eaf4207a2feb3ee.jpg","from":"bangumi","id":173277,"long_title":"如果要找交往对象…","share_url":"https://m.bilibili.com/bangumi/play/ep173277","stat":{"danmakus":23780,"play":1978674},"status":13,"title":"16","vid":""},{"aid":23153902,"badge":"会员","badge_type":0,"cid":38533394,"cover":"http://i0.hdslb.com/bfs/archive/4fac64de0b4b3a22422e528509fa6282e25438af.jpg","from":"bangumi","id":173278,"long_title":"再访!哥哥的5个指令","share_url":"https://m.bilibili.com/bangumi/play/ep173278","stat":{"danmakus":41008,"play":2025735},"status":13,"title":"17","vid":""},{"aid":23480245,"badge":"会员","badge_type":0,"cid":39162226,"cover":"http://i0.hdslb.com/bfs/archive/ec41d7be6c26866b83191eefe271d8571f42deb0.jpg","from":"bangumi","id":173279,"long_title":"神烦转校生!明智透真","share_url":"https://m.bilibili.com/bangumi/play/ep173279","stat":{"danmakus":24780,"play":1796057},"status":13,"title":"18","vid":""},{"aid":23787887,"badge":"会员","badge_type":0,"cid":40715221,"cover":"http://i0.hdslb.com/bfs/archive/dcf6951c9e82a96e260008304e93b3b85cd832e8.jpg","from":"bangumi","id":173280,"long_title":"全班的灾难","share_url":"https://m.bilibili.com/bangumi/play/ep173280","stat":{"danmakus":34012,"play":1844974},"status":13,"title":"19","vid":""},{"aid":24109953,"badge":"会员","badge_type":0,"cid":40715298,"cover":"http://i0.hdslb.com/bfs/archive/b84818a2871753ad44e1abdbeb49d0761510f3a3.jpg","from":"bangumi","id":173281,"long_title":"用催眠能力来冒充!","share_url":"https://m.bilibili.com/bangumi/play/ep173281","stat":{"danmakus":21042,"play":1753147},"status":13,"title":"20","vid":""},{"aid":24421253,"badge":"会员","badge_type":0,"cid":41007826,"cover":"http://i0.hdslb.com/bfs/archive/63177aad74e8831d151bad8552278d2be748eb2f.jpg","from":"bangumi","id":173282,"long_title":"再次来访!外公外婆流浪记","share_url":"https://m.bilibili.com/bangumi/play/ep173282","stat":{"danmakus":33178,"play":1824989},"status":13,"title":"21","vid":""},{"aid":24753887,"badge":"会员","badge_type":0,"cid":41652762,"cover":"http://i0.hdslb.com/bfs/archive/e25b642474fd9cf6aa1a47828a0f2fb64322fcb7.jpg","from":"bangumi","id":173283,"long_title":"放学同行的最佳选择","share_url":"https://m.bilibili.com/bangumi/play/ep173283","stat":{"danmakus":20739,"play":1765913},"status":13,"title":"22","vid":""},{"aid":25215328,"badge":"会员","badge_type":0,"cid":42754693,"cover":"http://i0.hdslb.com/bfs/archive/c089a16ed1678bf52f8df2db6340e4a4c3ca9e4f.jpg","from":"bangumi","id":173284,"long_title":"微调非日常的过去 1-5","share_url":"https://m.bilibili.com/bangumi/play/ep173284","stat":{"danmakus":17431,"play":1594832},"status":13,"title":"23","vid":""},{"aid":25641568,"badge":"会员","badge_type":0,"cid":43719898,"cover":"http://i0.hdslb.com/bfs/archive/4171f596c6484406a080eca6e020b7c10e59797b.jpg","from":"bangumi","id":173285,"long_title":"看穿差异!完美美少女的试炼","share_url":"https://m.bilibili.com/bangumi/play/ep173285","stat":{"danmakus":53564,"play":1805549},"status":13,"title":"24","vid":""}],"id":30429,"title":"正片","type":0},"section":[]}}