dd8eaef97d
- Reorganize code into cmd/bilidown and internal/ packages - Rename client/ to web/ for frontend source - Remove systray dependency for headless web service - Embed static files into binary using go:embed - Update import paths to use internal/ prefix - Update .gitignore with common patterns Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
147 lines
3.1 KiB
Go
147 lines
3.1 KiB
Go
package bilibili_test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"bilidown/bilibili"
|
|
"bilidown/util"
|
|
|
|
"github.com/skip2/go-qrcode"
|
|
_ "modernc.org/sqlite"
|
|
)
|
|
|
|
const TEST_SESSDATA = ""
|
|
const TEST_BVID = "BV1KX4y1V7sA" // 普通合集
|
|
const TEST_CID = 305542578 // 普通分集
|
|
const TEST_BVID_HDR = "BV1rp4y1e745" // HDR 合集
|
|
const TEST_CID_HDR = 244954665 // HDR 分集
|
|
const TEST_EPID = 835909 // 剧集
|
|
const TEST_SSID = 48744 // 番剧
|
|
|
|
func TestBiliClient(t *testing.T) {
|
|
client := bilibili.BiliClient{SESSDATA: TEST_SESSDATA}
|
|
check, err := client.CheckLogin()
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if check {
|
|
fmt.Println("SESSDATA 有效")
|
|
} else {
|
|
fmt.Println("SESSDATA 无效")
|
|
}
|
|
}
|
|
|
|
func TestNewQRInfo(t *testing.T) {
|
|
client := bilibili.BiliClient{}
|
|
info, err := client.NewQRInfo()
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
fmt.Printf("二维码信息:%+v", info)
|
|
}
|
|
|
|
func TestGetQRStatus(t *testing.T) {
|
|
client := bilibili.BiliClient{}
|
|
qrInfo, err := client.NewQRInfo()
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
qr, err := qrcode.New(qrInfo.URL, qrcode.Low)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
fmt.Println(qr.ToSmallString(false))
|
|
|
|
for {
|
|
qrStatus, sessdata, err := client.GetQRStatus(qrInfo.QrcodeKey)
|
|
fmt.Println(qrStatus.Message)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if qrStatus.Code == bilibili.QR_SUCCESS {
|
|
fmt.Println("登录成功")
|
|
fmt.Println(sessdata)
|
|
break
|
|
} else if qrStatus.Code == bilibili.QR_EXPIRES {
|
|
break
|
|
}
|
|
time.Sleep(time.Second)
|
|
}
|
|
}
|
|
|
|
func TestGetBVInfo(t *testing.T) {
|
|
client := bilibili.BiliClient{SESSDATA: TEST_SESSDATA}
|
|
videoInfo, err := client.GetVideoInfo(TEST_BVID)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
fmt.Printf("%+v", videoInfo)
|
|
}
|
|
|
|
func TestGetSeasonInfo(t *testing.T) {
|
|
client := bilibili.BiliClient{SESSDATA: TEST_SESSDATA}
|
|
seasonInfo, err := client.GetSeasonInfo(TEST_EPID, TEST_SSID)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
fmt.Printf("%+v", seasonInfo)
|
|
}
|
|
|
|
func TestGetPlayInfo(t *testing.T) {
|
|
client := bilibili.BiliClient{SESSDATA: TEST_SESSDATA}
|
|
playInfo, err := client.GetPlayInfo(TEST_BVID_HDR, TEST_CID_HDR)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
a, _ := json.Marshal(playInfo.AcceptQuality)
|
|
b, _ := json.Marshal(playInfo.AcceptDescription)
|
|
c, _ := json.Marshal(playInfo.SupportFormats)
|
|
|
|
fmt.Println(string(a))
|
|
fmt.Println(string(b))
|
|
fmt.Println(string(c))
|
|
}
|
|
|
|
func TestSaveSessdata(t *testing.T) {
|
|
db := util.MustGetDB("../data.db")
|
|
defer db.Close()
|
|
err := bilibili.SaveSessdata(db, TEST_SESSDATA)
|
|
if err != nil {
|
|
t.Error(err)
|
|
} else {
|
|
fmt.Println("SESSDATA 保存成功")
|
|
}
|
|
sessdata, err := bilibili.GetSessdata(db)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if sessdata != TEST_SESSDATA {
|
|
t.Error("SESSDATA 读写不一致")
|
|
} else {
|
|
fmt.Println("SESSDATA 读取成功")
|
|
}
|
|
}
|
|
|
|
func TestGetSessdata(t *testing.T) {
|
|
db := util.MustGetDB("../data.db")
|
|
defer db.Close()
|
|
sessdata, err := bilibili.GetSessdata(db)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
fmt.Println(sessdata)
|
|
}
|
|
|
|
func TestGetPopularVideos(t *testing.T) {
|
|
client := bilibili.BiliClient{SESSDATA: TEST_SESSDATA}
|
|
videos, err := client.GetPopularVideos()
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
fmt.Printf("%+v", videos)
|
|
}
|