From 7f31348b0fcaed227f65294eb3c96146bc80f321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E8=91=A9=E3=81=AE=E7=81=B5=E6=A2=A6?= Date: Thu, 27 Jun 2024 11:40:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E7=94=A8=E6=88=B7=E7=B2=89?= =?UTF-8?q?=E4=B8=9D=E6=98=8E=E7=BB=86=E3=80=81=E6=9F=A5=E8=AF=A2=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=85=B3=E6=B3=A8=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- type.go | 25 +++++++++++++++++++++++++ user.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/type.go b/type.go index 6583b98..626a72c 100644 --- a/type.go +++ b/type.go @@ -179,3 +179,28 @@ type Official struct { Desc string `json:"desc"` // 成员认证备注。无为空 Type int `json:"type"` // 成员认证类型。-1:无。0:有 } + +type ContractInfo struct { + IsContract bool `json:"is_contract"` // 目标用户是否为对方的契约者 + IsContractor bool `json:"is_contractor"` // 对方是否为目标用户的契约者 + Ts int `json:"ts"` // 对方成为目标用户的契约者的时间。秒级时间戳,仅当 is_contractor 项的值为 true 时才有此项 + UserAttr int `json:"user_attr"` // 对方作为目标用户的契约者的属性。1:老粉。否则为原始粉丝。仅当有特殊属性时才有此项 +} + +type RelationUser struct { + Mid int `json:"mid"` // 用户 mid + Attribute int `json:"attribute"` // 对方对于自己的关系属性。0:未关注。1:悄悄关注(现已下线)。2:已关注。6:已互粉。128:已拉黑 + Mtime int `json:"mtime"` // 对方关注目标用户时间。秒级时间戳。互关后刷新 + Tag []int `json:"tag"` // 目标用户将对方分组到的 id + Special int `json:"special"` // 目标用户特别关注对方标识。0:否。1:是 + ContractInfo ContractInfo `json:"contract_info"` // 契约计划相关信息 + Uname string `json:"uname"` // 用户昵称 + Face string `json:"face"` // 用户头像url + FaceNft int `json:"face_nft"` // 是否为 NFT 头像。0:非 NFT 头像。1:NFT 头像 + Sign string `json:"sign"` // 用户签名 + OfficialVerify OfficialVerify `json:"official_verify"` // 认证信息 + Vip Vip `json:"vip"` // 会员信息 + NftIcon string `json:"nft_icon"` // (?) + RecReason string `json:"rec_reason"` // (?) + TrackId string `json:"track_id"` // (?) +} diff --git a/user.go b/user.go index 0ce07a2..0991487 100644 --- a/user.go +++ b/user.go @@ -432,3 +432,47 @@ func (c *Client) BatchGetUserCards(param BatchGetUserCardsParam) ([]*BatchGetUse ) return execute[[]*BatchGetUserCardsResult](c, method, url, param) } + +type GetUserFollowersParam struct { + Vmid int `json:"vmid"` // 目标用户 mid + Ps int `json:"ps,omitempty" request:"query,omitempty"` // 每页项数。默认为 50 + Pn int `json:"pn,omitempty" request:"query,omitempty"` // 页码。默认为 1。仅可查看前 1000 名粉丝 +} + +type GetUserFollowersResult struct { + List []RelationUser `json:"list"` // 明细列表 + ReVersion int `json:"re_version"` // (?) + Total int `json:"total"` // 粉丝总数 +} + +// GetUserFollowers 查询用户粉丝明细(需要登录) +func (c *Client) GetUserFollowers(param GetUserFollowersParam) (*GetUserFollowersResult, error) { + const ( + method = resty.MethodGet + url = "https://api.bilibili.com/x/relation/followers" + ) + return execute[*GetUserFollowersResult](c, method, url, param) +} + +type GetUserFollowingsParam struct { + AccessKey string `json:"access_key,omitempty" request:"query,omitempty"` // APP 登录 Token + Vmid int `json:"vmid"` // 目标用户 mid + OrderType string `json:"order_type,omitempty" request:"query,omitempty"` // 排序方式。当目标用户为自己时有效。按照关注顺序排列:留空。按照最常访问排列:attention + Ps int `json:"ps,omitempty" request:"query,omitempty"` // 每页项数。默认为 50 + Pn int `json:"pn,omitempty" request:"query,omitempty"` // 页码。默认为 1。其他用户仅可查看前 100 个 +} + +type GetUserFollowingsResult struct { + List []RelationUser `json:"list"` // 明细列表 + ReVersion int `json:"re_version"` // (?) + Total int `json:"total"` // 关注总数 +} + +// GetUserFollowings 查询用户关注明细(需要登录) +func (c *Client) GetUserFollowings(param GetUserFollowingsParam) (*GetUserFollowingsResult, error) { + const ( + method = resty.MethodGet + url = "https://api.bilibili.com/x/relation/followings" + ) + return execute[*GetUserFollowingsResult](c, method, url, param) +}