bilibili-rename/epsource.go

73 lines
1.7 KiB
Go

package main
import (
"encoding/json"
"errors"
"io/ioutil"
"regexp"
"strconv"
)
// 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) {
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
}