init: git clone https://github.com/iuroc/bilidown.git
This commit is contained in:
@@ -0,0 +1,253 @@
|
||||
package bilibili
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"bilidown/common"
|
||||
)
|
||||
|
||||
// BaseRes 来自 Bilibili 的接口响应,Message 字段为 msg
|
||||
type BaseRes struct {
|
||||
Code int `json:"code"`
|
||||
Message string `json:"msg"`
|
||||
Data json.RawMessage `json:"data"`
|
||||
}
|
||||
|
||||
// BaseRes2 来自 Bilibili 的接口响应,Message 字段为 message 而不是 msg
|
||||
type BaseResV2 struct {
|
||||
Code int `json:"code"`
|
||||
Message string `json:"message"`
|
||||
Data json.RawMessage `json:"data"`
|
||||
}
|
||||
|
||||
// BaseResV3 来自 Bilibili 的接口响应,Message 字段为 message 而不是 msg,Data 字段为 result
|
||||
type BaseResV3 struct {
|
||||
Code int `json:"code"`
|
||||
Message string `json:"message"`
|
||||
Result json.RawMessage `json:"result"`
|
||||
}
|
||||
|
||||
func (b *BaseRes) Success() bool {
|
||||
return b.Code == 0
|
||||
}
|
||||
|
||||
func (b *BaseResV2) Success() bool {
|
||||
return b.Code == 0
|
||||
}
|
||||
|
||||
func (b *BaseResV3) Success() bool {
|
||||
return b.Code == 0
|
||||
}
|
||||
|
||||
type QRInfo struct {
|
||||
URL string `json:"url"`
|
||||
QrcodeKey string `json:"qrcode_key"`
|
||||
}
|
||||
|
||||
type QRStatus struct {
|
||||
URL string `json:"string"`
|
||||
RefreshToken string `json:"refresh_token"`
|
||||
Code int `json:"code"`
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
const (
|
||||
QR_NO_SCAN = 86101 // 未扫码
|
||||
QR_NO_CLICK = 86090 // 已扫码未确认
|
||||
QR_EXPIRES = 86038 // 已过期
|
||||
QR_SUCCESS = 0 // 已确认登录
|
||||
)
|
||||
|
||||
// Dimension 视频分辨率
|
||||
type Dimension struct {
|
||||
Width int `json:"width"`
|
||||
Height int `json:"height"`
|
||||
Rotate int `json:"rotate"`
|
||||
}
|
||||
|
||||
// StaffItem 视频人员
|
||||
type StaffItem struct {
|
||||
Mid int `json:"mid"`
|
||||
Title string `json:"title"`
|
||||
Name string `json:"name"`
|
||||
Face string `json:"face"`
|
||||
}
|
||||
|
||||
// Page 分集信息
|
||||
type Page struct {
|
||||
// 配合 Bvid 用于获取播放地址
|
||||
Cid int `json:"cid"`
|
||||
// 当前分集在合集中的序号,从 1 开始
|
||||
Page int `json:"page"`
|
||||
// 分集标题
|
||||
Part string `json:"part"`
|
||||
// 分集时长
|
||||
Duration int `json:"duration"`
|
||||
// 分集分辨率
|
||||
Dimension `json:"dimension"`
|
||||
}
|
||||
|
||||
// 通过 BVID 获取的视频信息
|
||||
type VideoInfo struct {
|
||||
Bvid string `json:"bvid"`
|
||||
Aid int `json:"aid"`
|
||||
Pic string `json:"pic"`
|
||||
Title string `json:"title"`
|
||||
Pubdate int `json:"pubdate"`
|
||||
Desc string `json:"desc"`
|
||||
Owner struct {
|
||||
Mid int `json:"mid"`
|
||||
Name string `json:"name"`
|
||||
Face string `json:"face"`
|
||||
} `json:"owner"`
|
||||
Dimension `json:"dimension"`
|
||||
Staff []StaffItem `json:"staff"`
|
||||
Pages []Page `json:"pages"`
|
||||
Duration int `json:"duration"`
|
||||
Stat struct {
|
||||
Aid int `json:"aid"`
|
||||
View int `json:"view"` // 播放数量
|
||||
Danmaku int `json:"danmaku"` // 弹幕数量
|
||||
Reply int `json:"reply"` // 评论数量
|
||||
Favorite int `json:"favorite"` // 收藏数量
|
||||
Coin int `json:"coin"` // 投币数量
|
||||
Share int `json:"share"` // 转发数量
|
||||
NowRank int `json:"now_rank"` // 当前排名
|
||||
HisRank int `json:"his_rank"` // 历史最高排名
|
||||
Like int `json:"like"` // 点赞数量
|
||||
Dislike int `json:"dislike"` // 不喜欢
|
||||
} `json:"stat"`
|
||||
UgcSeason struct {
|
||||
Sections []struct {
|
||||
Title string `json:"title"`
|
||||
Episodes []struct {
|
||||
Title string `json:"title"`
|
||||
Pages []Page `json:"pages"`
|
||||
Bvid string `json:"bvid"`
|
||||
} `json:"episodes"`
|
||||
} `json:"sections"`
|
||||
Title string `json:"title"`
|
||||
} `json:"ugc_season"`
|
||||
}
|
||||
|
||||
// EpisodeInBV 通过 BV 获取的视频信息中的合集信息
|
||||
type EpisodeInBV struct {
|
||||
Aid int `json:"aid"`
|
||||
Bvid string `json:"bvid"`
|
||||
Cid int `json:"cid"`
|
||||
Pic string `json:"pic"` // 封面
|
||||
Dimension `json:"dimension"` // 分辨率
|
||||
Duration int `json:"duration"` // 时长
|
||||
EPID int `json:"ep_id"`
|
||||
LongTitle string `json:"long_title"` // 分集完整标题,比如【法外狂徒张三现身!】
|
||||
PubTime int `json:"pub_time"` // 发布时间
|
||||
Title string `json:"title"` // 分集简略标题,比如【1】
|
||||
}
|
||||
|
||||
// Episode 剧集分集信息
|
||||
type Episode struct {
|
||||
Aid int `json:"aid"`
|
||||
Bvid string `json:"bvid"`
|
||||
Cid int `json:"cid"`
|
||||
Cover string `json:"cover"` // 封面
|
||||
Dimension `json:"dimension"` // 分辨率
|
||||
Duration int `json:"duration"` // 时长
|
||||
EPID int `json:"ep_id"`
|
||||
LongTitle string `json:"long_title"` // 分集完整标题,比如【法外狂徒张三现身!】
|
||||
PubTime int `json:"pub_time"` // 发布时间
|
||||
Title string `json:"title"` // 分集简略标题,比如【1】
|
||||
}
|
||||
|
||||
// 通过 EPID 获取的视频信息
|
||||
type SeasonInfo struct {
|
||||
Actors string `json:"actors"` // 演员名单
|
||||
Areas []struct {
|
||||
ID int `json:"id"`
|
||||
Name string `json:"name"`
|
||||
} `json:"areas"` // 地区列表
|
||||
Cover string `json:"cover"` // 封面
|
||||
Evaluate string `json:"evaluate"` // 简介
|
||||
Publish struct {
|
||||
IsFinish int `json:"is_finish"` // 是否完结
|
||||
PubTime string `json:"pub_time"` // 发布时间
|
||||
} `json:"publish"`
|
||||
SeasonID int `json:"season_id"` // 剧集编号
|
||||
SeasonTitle string `json:"season_title"` // 剧集标题
|
||||
Stat struct {
|
||||
Coins int `json:"coins"` // 投币数量
|
||||
Danmakus int `json:"danmakus"` // 弹幕数量
|
||||
Favorite int `json:"favorite"` // 收藏数量
|
||||
Favorites int `json:"favorites"` // 追剧数量
|
||||
Likes int `json:"likes"` // 点赞数量
|
||||
Reply int `json:"reply"` // 评论数量
|
||||
Share int `json:"share"` // 分享数量
|
||||
Views int `json:"views"` // 播放数量
|
||||
} `json:"stat"`
|
||||
Styles []string `json:"styles"` // 剧集内容类型,例如 [ "短剧", "奇幻", "搞笑" ]
|
||||
Title string `json:"title"` // 剧集标题
|
||||
Total int `json:"total"` // 总集数
|
||||
|
||||
Episodes []Episode `json:"episodes"` // 分集信息列表
|
||||
|
||||
NewEp struct {
|
||||
Desc string `json:"desc"` // 更新状态文本
|
||||
IsNew int `json:"is_new"` // 是否是连载,0 为完结,1 为连载
|
||||
} `json:"new_ep"`
|
||||
|
||||
Section []struct {
|
||||
Title string `json:"title"`
|
||||
Episodes []Episode `json:"episodes"`
|
||||
} `json:"section"`
|
||||
}
|
||||
|
||||
type PlayInfo struct {
|
||||
AcceptDescription []string `json:"accept_description"`
|
||||
AcceptQuality []common.MediaFormat `json:"accept_quality"`
|
||||
SupportFormats []struct {
|
||||
Quality common.MediaFormat `json:"quality"`
|
||||
Format string `json:"format"`
|
||||
NewDescription string `json:"new_description"`
|
||||
Codecs []string `json:"codecs"`
|
||||
} `json:"support_formats"`
|
||||
Dash *Dash `json:"dash"`
|
||||
}
|
||||
|
||||
type Dash struct {
|
||||
// 视频时长(秒)
|
||||
Duration int `json:"duration"`
|
||||
Video []Media `json:"video"`
|
||||
Audio []Media `json:"audio"`
|
||||
Flac *struct {
|
||||
Audio Media `json:"audio"`
|
||||
} `json:"flac"`
|
||||
}
|
||||
|
||||
type Media struct {
|
||||
ID common.MediaFormat `json:"id"`
|
||||
BaseURL string `json:"baseUrl"`
|
||||
BackupURL []string `json:"backupUrl"`
|
||||
Bandwidth int `json:"bandwidth"`
|
||||
MimeType string `json:"mimeType"`
|
||||
Codecs string `json:"codecs"`
|
||||
Width int `json:"width"`
|
||||
Height int `json:"height"`
|
||||
FrameRate string `json:"frameRate"`
|
||||
Codecid int `json:"codecid"`
|
||||
}
|
||||
|
||||
type FavList []struct {
|
||||
Title string `json:"title"`
|
||||
Cover string `json:"cover"`
|
||||
Intro string `json:"intro"`
|
||||
Duration int `json:"duration"`
|
||||
Upper struct {
|
||||
Mid int `json:"mid"`
|
||||
Name string `json:"name"`
|
||||
Face string `json:"face"`
|
||||
} `json:"upper"`
|
||||
PubTime int `json:"pubtime"`
|
||||
Bvid string `json:"bvid"`
|
||||
Ugc struct {
|
||||
FirstCid int `json:"first_cid"`
|
||||
} `json:"ugc"`
|
||||
}
|
||||
Reference in New Issue
Block a user