Skip to content

Commit

Permalink
历史记录、稍后再看 (#72)
Browse files Browse the repository at this point in the history
* 添加频道中所有视频到稍后再看

* 获取稍后再看视频列表

* 删除稍后再看视频

* 清空稍后再看视频列表

* 多余的k

* # 分区最新视频

* gofmt

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
  • Loading branch information
Jiaozze and github-actions[bot] authored Aug 5, 2024
1 parent 0b02d23 commit e20363e
Show file tree
Hide file tree
Showing 2 changed files with 211 additions and 0 deletions.
79 changes: 79 additions & 0 deletions history.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,3 +131,82 @@ func (c *Client) AddToView(param VideoParam) error {
_, err := execute[any](c, method, url, param, fillCsrf(c))
return err
}

type AddChannelAllToViewParam struct {
Cid int `json:"cid"` // 目标频道id
Mid int `json:"mid"` // 目标频道所属的用户mid
}

// AddChannelkAllToView 添加频道中所有视频到稍后再看
func (c *Client) AddChannelkAllToView(param AddChannelAllToViewParam) error {
const (
method = resty.MethodPost
url = "https://space.bilibili.com/ajax/channel/addAllToView"
)
_, err := execute[any](c, method, url, param, fillCsrf(c))
return err
}

type ToViewInfo struct {
Count int `json:"count"` // 稍后再看视频数
List []ToViewDetail `json:"list"` // 稍后再看视频列表
}

type ToViewDetail struct {
Aid int `json:"aid"` // 稿件avid
Videos int `json:"videos"` // 稿件分P总数。默认为1
Tid int `json:"tid"` // 分区tid
Tname string `json:"tname"` // 子分区名称
Copyright int `json:"copyright"` // 是否转载。1:原创。2:转载
Pic string `json:"pic"` // 稿件封面图片url
Title string `json:"title"` // 稿件标题
Pubdate int `json:"pubdate"` // 稿件发布时间。时间戳
Ctime int `json:"ctime"` // 用户提交稿件的时间。时间戳
Desc string `json:"desc"` // 视频简介
State int `json:"state"` // 视频状态。略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的state备注
Duration int `json:"duration"` // 稿件总时长(所有分P)。单位为秒
Rights VideoRights `json:"rights"` // 稿件属性标志。略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的rights对象
Owner Owner `json:"owner"` // 稿件UP主信息。略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息 (web端))中的owner对象
Stat VideoStat `json:"stat"` // 稿件状态数。略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web 端))中的stat对象
Dynamic string `json:"dynamic"` // 视频同步发布的的动态的文字内容。无为空
Dimension Dimension `json:"dimension"` // 稿件1P分辨率。略,见[获取视频详细信息(web端)](../video/info.md#获取 视频详细信息(web端))中的dimension对象
Count int `json:"count"` // 稿件分P数。非投稿视频无此项
Cid int `json:"cid"` // 视频cid
Progress int `json:"progress"` // 观看进度时间。单位为秒
AddAt int `json:"add_at"` // 添加时间。时间戳
Bvid string `json:"bvid"` // 稿件bvid
}

// GetToViewList 获取稍后再看视频列表
func (c *Client) GetToViewList() (*ToViewInfo, error) {
const (
method = resty.MethodGet
url = "https://api.bilibili.com/x/v2/history/toview"
)
return execute[*ToViewInfo](c, method, url, nil)
}

type DeleteToViewParam struct {
Viewed bool `json:"viewed,omitempty" request:"query,omitempty"` // 是否删除所有已观看的视频。true:删除已观看视 频。false:不删除已观看视频。默认为false
Aid int `json:"aid,omitempty" request:"query,omitempty"` // 删除的目标记录的avid
}

// DeleteToView 删除稍后再看视频
func (c *Client) DeleteToView(param DeleteToViewParam) error {
const (
method = resty.MethodPost
url = "https://api.bilibili.com/x/v2/history/toview/del"
)
_, err := execute[any](c, method, url, param, fillCsrf(c))
return err
}

// ClearToView 清空稍后再看视频列表
func (c *Client) ClearToView() error {
const (
method = resty.MethodPost
url = "https://api.bilibili.com/x/v2/history/toview/clear"
)
_, err := execute[any](c, method, url, nil, fillCsrf(c))
return err
}
132 changes: 132 additions & 0 deletions video_ranking.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
package bilibili

import "github.com/go-resty/resty/v2"

type GetZoneVideoListNewParam struct {
Pn int `json:"pn,omitempty" request:"query,omitempty"` // 页码。默认为1
Ps int `json:"ps,omitempty" request:"query,omitempty"` // 每页项数。默认为14, 留空为5
Rid int `json:"rid"` // 目标分区tid
}
type ZoneVideoListInfo struct {
Archives []VideoInfo `json:"archives"` // 视频列表
Page ZoneVideoPage `json:"page"` // 页面信息
}
type ZoneVideoPage struct {
Count int `json:"count"` // 总计视频数
Num int `json:"num"` // 当前页码
Size int `json:"size"` // 每页项数
}

// GetZoneVideoListNew 获取分区最新视频列表
func (c *Client) GetZoneVideoListNew(param GetZoneVideoListNewParam) (*ZoneVideoListInfo, error) {
const (
method = resty.MethodGet
url = "https://api.bilibili.com/x/web-interface/dynamic/region"
)
return execute[*ZoneVideoListInfo](c, method, url, param)
}

type GetZoneVideoListWithTagParam struct {
Ps int `json:"ps,omitempty" request:"query,omitempty"` // 视频数。默认为14, 留空为5
Pn int `json:"pn,omitempty" request:"query,omitempty"` // 列数。留空为1
Rid int `json:"rid"` // 目标分区id。参见[视频分区一览](../video/video_zone.md)
TagId int `json:"tag_id"` // 目标标签id
}

// GetZoneVideoListWithTag 获取分区标签近期互动列表
func (c *Client) GetZoneVideoListWithTag(param GetZoneVideoListWithTagParam) (*ZoneVideoListInfo, error) {
const (
method = resty.MethodGet
url = "https://api.bilibili.com/x/web-interface/dynamic/tag"
)
return execute[*ZoneVideoListInfo](c, method, url, param)
}

type GetZoneVideoListRecentParam struct {
Ps int `json:"ps,omitempty" request:"query,omitempty"` // 视频数。默认为14, 留空为5
Pn int `json:"pn,omitempty" request:"query,omitempty"` // 页码。默认为1
Rid int `json:"rid,omitempty" request:"query,omitempty"` // 目标分区id。参见[视频分区一览](../video/video_zone.md)
Type int `json:"type,omitempty" request:"query,omitempty"` // 类型?。默认为0
}

// GetZoneVideoListRecent 获取分区近期投稿列表
func (c *Client) GetZoneVideoListRecent(param GetZoneVideoListRecentParam) (*ZoneVideoListInfo, error) {
const (
method = resty.MethodGet
url = "https://api.bilibili.com/x/web-interface/newlist"
)
return execute[*ZoneVideoListInfo](c, method, url, param)
}

type GetZoneVideoListByOrderParam struct {
MainVer string `json:"main_ver,omitempty" request:"query,omitempty"` // 主页版本。默认为 v3
SearchType string `json:"search_type"` // 搜索类型。默认为 video
ViewType string `json:"view_type"` // 查看类型?。默认为 hot_rank
CopyRight int `json:"copy_right,omitempty" request:"query,omitempty"` // 版权?。默认为 -1
NewWebTag int `json:"new_web_tag,omitempty" request:"query,omitempty"` // 标签?。默认为 1
Order string `json:"order,omitempty" request:"query,omitempty"` // 排序方式。click: 按播放排序(默认)。scores: 按评论数排序。stow: 按收藏排序。coin: 按硬币数排序。dm: 按弹幕数排序
CateId int `json:"cate_id"` // 分区id。留空会导致响应中data中result为null, 参见[视频分区一览](../video/video_zone.md)
Page int `json:"page,omitempty" request:"query,omitempty"` // 页码。默认以 1 开始
Pagesize int `json:"pagesize"` // 视频数。默认为 30, 留空会导致 -500
TimeFrom int `json:"time_from"` // 起始时间。yyyyMMdd, 默认为 time_to - 7
TimeTo int `json:"time_to"` // 结束时间。yyyyMMdd, 默认为当前时间(大于起始时间)
}

type ZoneVideoRankInfo struct {
ExpList *string `json:"exp_list"` // 作用尚不明确
ShowModuleList []string `json:"show_module_list"` // 显示模块列表?
Result []RankVideoInfo `json:"result"` // 结果本体。失败时为null
ShowColumn int `json:"show_column"` // 0。作用尚不明确
RqtType string `json:"rqt_type"` // search。作用尚不明确
Numpages int `json:"numPages"` // 页码。失败时为0
Numresults int `json:"numResults"` // 视频数。失败时为0
CrrQuery *string `json:"crr_query"` // 空。作用尚不明确
Pagesize int `json:"pagesize"` // 视频数
SuggestKeyword *string `json:"suggest_keyword"` // 空。作用尚不明确
EggInfo *string `json:"egg_info"` // 作用尚不明确
Cache int `json:"cache"` // 0。作用尚不明确
ExpBits int `json:"exp_bits"` // 1。作用尚不明确
ExpStr *string `json:"exp_str"` // 空。作用尚不明确
Seid string `json:"seid"` // 一串字符串中的数字。作用尚不明确
Msg string `json:"msg"` // 结果信息。成功时为success, 反之为as error.
EggHit int `json:"egg_hit"` // 0。作用尚不明确
Page int `json:"page"` // 页码
}
type RankVideoInfo struct {
Pubdate string `json:"pubdate"` // 发布时间。格式为 yyyy-MM-dd HH:mm:ss
Pic string `json:"pic"` // 封面图
Tag string `json:"tag"` // 标签。用 , 分隔
Duration int `json:"duration"` // 时长。单位为秒
Id int `json:"id"` // aid
RankScore int `json:"rank_score"` // 排序分数?
Badgepay bool `json:"badgepay"` // 是否有角标?
Senddate int `json:"senddate"` // 发送时间?。UNIX 秒级时间戳
Author string `json:"author"` // UP主名
Review int `json:"review"` // 评论数
Mid int `json:"mid"` // UP主mid
IsUnionVideo int `json:"is_union_video"` // 是否为联合投稿
RankIndex int `json:"rank_index"` // 排序索引号
Type string `json:"type"` // 类型。video: 视频
Arcrank string `json:"arcrank"` // 0。作用尚不明确
Play string `json:"play"` // 播放数
RankOffset int `json:"rank_offset"` // 排序偏移?。与 rank_index 相同
Description string `json:"description"` // 简介
VideoReview int `json:"video_review"` // 弹幕数?
IsPay int `json:"is_pay"` // 是否付费?。0: 免费。1: 付费
Favorites int `json:"favorites"` // 收藏数
Arcurl string `json:"arcurl"` // 视频播放页URL
Bvid string `json:"bvid"` // bvid
Title string `json:"title"` // 标题
Vt int `json:"vt"` // 0。作用尚不明确
EnableVt int `json:"enable_vt"` // 0。作用尚不明确
VtDisplay string `json:"vt_display"` // 空。作用尚不明确
}

// GetZoneVideoListByOrder 获取分区近期投稿列表 (带排序)
func (c *Client) GetZoneVideoListByOrder(param GetZoneVideoListByOrderParam) (*ZoneVideoRankInfo, error) {
const (
method = resty.MethodGet
url = "https://api.bilibili.com/x/web-interface/newlist_rank"
)
return execute[*ZoneVideoRankInfo](c, method, url, param)
}

0 comments on commit e20363e

Please sign in to comment.