405 lines
14 KiB
Protocol Buffer
405 lines
14 KiB
Protocol Buffer
syntax = "proto3";
|
||
|
||
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
|
||
|
||
// use {app_id}.{version} as package name
|
||
package archive.service.v1;
|
||
|
||
option go_package = "api";
|
||
|
||
// Archive grpc
|
||
service Archive {
|
||
// Types 获取所有分区列表
|
||
rpc Types(NoArgRequest) returns(TypesReply);
|
||
// 获取单个稿件信息
|
||
rpc Arc(ArcRequest) returns(ArcReply);
|
||
// 批量获取稿件信息
|
||
rpc Arcs(ArcsRequest) returns(ArcsReply);
|
||
// 获取单个稿件计数信息
|
||
rpc Stat(StatRequest) returns(StatReply);
|
||
// 批量获取稿件计数信息
|
||
rpc Stats(StatsRequest) returns(StatsReply);
|
||
// 获取单个稿件+分P信息
|
||
rpc View(ViewRequest) returns(ViewReply);
|
||
// 批量获取稿件+分P信息
|
||
rpc Views(ViewsRequest) returns(ViewsReply);
|
||
// 获取稿件在各平台的点击数
|
||
rpc Click(ClickRequest) returns(ClickReply);
|
||
// 获取稿件的所有分P信息
|
||
rpc Page(PageRequest) returns(PageReply);
|
||
// 获取Up主绑定的相关推荐 *几乎废弃
|
||
rpc Recommend(RecommendRequest) returns(RecommendReply);
|
||
// 获取aid&cid对应的视频信息
|
||
rpc Video(VideoRequest) returns(VideoReply);
|
||
// 获取当前最大的aid,各子业务防刷、防脏数据时使用
|
||
rpc MaxAid(NoArgRequest) returns(MaxAidReply);
|
||
// 获取稿件的长简介信息
|
||
rpc Description(DescriptionRequest) returns(DescriptionReply);
|
||
// 内部方法,管理稿件服务缓存,请勿使用-----------------------------------------------------------------------
|
||
rpc ArcFieldCache(ArcFieldCacheRequest) returns(NoReply);
|
||
rpc ArcCache(ArcCacheRequest) returns(NoReply);
|
||
rpc UpVideoCache(UpVideoCacheRequest) returns(NoReply);
|
||
rpc DelVideoCache(DelVideoCacheRequest) returns(NoReply);
|
||
rpc SetStat(SetStatRequest) returns(NoReply);
|
||
// 内部方法,管理稿件服务缓存,请勿使用-----------------------------------------------------------------------
|
||
}
|
||
|
||
// NoArgReq
|
||
message NoArgRequest{}
|
||
// NoReply
|
||
message NoReply{}
|
||
|
||
message DescriptionRequest {
|
||
int64 aid = 1;
|
||
}
|
||
|
||
message DescriptionReply {
|
||
string desc = 1;
|
||
}
|
||
|
||
message MaxAidReply {
|
||
int64 aid = 1;
|
||
}
|
||
|
||
message ArcRequest {
|
||
int64 aid = 1;
|
||
}
|
||
|
||
message ArcReply {
|
||
Arc arc = 1;
|
||
}
|
||
|
||
message ArcsRequest {
|
||
repeated int64 aids = 1;
|
||
}
|
||
|
||
message ArcsReply {
|
||
map<int64, Arc> arcs = 1;
|
||
}
|
||
|
||
message ViewRequest {
|
||
int64 aid = 1;
|
||
}
|
||
|
||
message StatRequest {
|
||
int64 aid = 1;
|
||
}
|
||
|
||
message StatReply {
|
||
Stat Stat = 1;
|
||
}
|
||
|
||
message StatsRequest {
|
||
repeated int64 aids = 1;
|
||
}
|
||
|
||
message StatsReply {
|
||
map<int64, Stat> Stats = 1;
|
||
}
|
||
|
||
message ViewReply {
|
||
Arc arc = 1 [(gogoproto.embed) = true, (gogoproto.jsontag) = ""];
|
||
repeated Page pages = 2;
|
||
}
|
||
|
||
message ViewsRequest {
|
||
repeated int64 aids = 1;
|
||
}
|
||
|
||
message ViewsReply {
|
||
map<int64, ViewReply> views = 1;
|
||
}
|
||
|
||
message TypesReply {
|
||
map<int32, Tp> types = 1;
|
||
}
|
||
|
||
message ClickRequest {
|
||
int64 aid = 1;
|
||
}
|
||
|
||
message ClickReply {
|
||
Click click = 1;
|
||
}
|
||
|
||
message PageRequest {
|
||
int64 aid = 1;
|
||
}
|
||
|
||
message PageReply {
|
||
repeated Page pages = 1;
|
||
}
|
||
|
||
message RecommendRequest {
|
||
int64 aid = 1;
|
||
}
|
||
|
||
message RecommendReply {
|
||
repeated Arc arcs = 1;
|
||
}
|
||
|
||
message VideoRequest {
|
||
int64 aid = 1;
|
||
int64 cid = 2;
|
||
}
|
||
|
||
message VideoReply {
|
||
Page page = 1;
|
||
}
|
||
|
||
message Tp {
|
||
// 分区id
|
||
int32 ID = 1 [(gogoproto.jsontag) = "id"];
|
||
// 该分区的父级id
|
||
int32 pid = 2 [(gogoproto.jsontag) = "pid"];
|
||
// 该分区对应的名称
|
||
string name = 3 [(gogoproto.jsontag) = "name"];
|
||
}
|
||
|
||
message AidVideos {
|
||
int64 Aid = 1 [(gogoproto.jsontag) = "aid"];
|
||
// 分P信息
|
||
repeated Page Pages = 2 [(gogoproto.jsontag) = "pages"];
|
||
}
|
||
|
||
message Arc {
|
||
int64 Aid = 1 [(gogoproto.jsontag) = "aid"];
|
||
// 稿件一共有多少分P
|
||
int64 Videos = 2 [(gogoproto.jsontag) = "videos"];
|
||
// 分区ID
|
||
int32 TypeID = 3 [(gogoproto.jsontag) = "tid"];
|
||
// 分区名
|
||
string TypeName = 4 [(gogoproto.jsontag) = "tname"];
|
||
// 是否转载 1=原创 2=转载 0=历史上可能遗留的脏数据
|
||
int32 Copyright = 5 [(gogoproto.jsontag) = "copyright"];
|
||
// 稿件封面图地址,绝对地址 如 http://i0.hdslb.com/bfs/xxx.jpg
|
||
string Pic = 6 [(gogoproto.jsontag) = "pic"];
|
||
// 稿件标题
|
||
string Title = 7 [(gogoproto.jsontag) = "title"];
|
||
// 稿件发布时间 对外展示的标准时间 时间戳格式
|
||
int64 PubDate = 8 [(gogoproto.jsontag) = "pubdate", (gogoproto.casttype) = "go-common/library/time.Time"];
|
||
// 用户提交稿件的时间 一般不对外展示 时间戳格式
|
||
int64 Ctime = 9 [(gogoproto.jsontag) = "ctime", (gogoproto.casttype) = "go-common/library/time.Time"];
|
||
// 稿件简介
|
||
string Desc = 10 [(gogoproto.jsontag) = "desc"];
|
||
// 稿件状态,>=0为前台用户可见状态,其他值详见 http://info.bilibili.co/pages/viewpage.action?pageId=3686597#id-%E7%A8%BF%E4%BB%B6%E5%AD%97%E6%AE%B5%E6%9E%9A%E4%B8%BE%E5%80%BC%E5%B1%9E%E6%80%A7%E8%AF%B4%E6%98%8E-%E7%A8%BF%E4%BB%B6%E7%8A%B6%E6%80%81state&access
|
||
int32 State = 11 [(gogoproto.jsontag) = "state"];
|
||
// 稿件访问属性 0=全员可见 10000=登录用户可见(极少)
|
||
int32 Access = 12 [(gogoproto.jsontag) = "access,omitempty"];
|
||
// 稿件属性 详见State字段的文档
|
||
int32 Attribute = 13 [(gogoproto.jsontag) = "attribute,omitempty"];
|
||
// 废弃字段
|
||
string Tag = 14 [(gogoproto.jsontag) = "-"];
|
||
// 废弃字段
|
||
repeated string Tags = 15 [(gogoproto.jsontag) = "tags,omitempty"];
|
||
// 稿件总时长(所有分P加起来的) 单位=秒
|
||
int64 Duration = 16 [(gogoproto.jsontag) = "duration"];
|
||
// 稿件绑定的活动id
|
||
int64 MissionID = 17 [(gogoproto.jsontag) = "mission_id,omitempty"];
|
||
// 稿件绑定的商单id
|
||
int64 OrderID = 18 [(gogoproto.jsontag) = "order_id,omitempty"];
|
||
// 稿件后台设置的强制跳转地址,如果该值不为空,则必须调转到它对应的页面上
|
||
string RedirectURL = 19 [(gogoproto.jsontag) = "redirect_url,omitempty"];
|
||
int64 Forward = 20 [(gogoproto.jsontag) = "forward,omitempty"];
|
||
// 见Rights字段说明
|
||
Rights Rights = 21 [(gogoproto.jsontag) = "rights", (gogoproto.nullable) = false];
|
||
// 稿件作者信息,详见Author字段说明
|
||
Author Author = 22 [(gogoproto.jsontag) = "owner", (gogoproto.nullable) = false];
|
||
// 稿件计数信息,详见Stat字段说明
|
||
Stat Stat = 23 [(gogoproto.jsontag) = "stat", (gogoproto.nullable) = false];
|
||
string ReportResult = 24 [(gogoproto.jsontag) = "report_result,omitempty"];
|
||
// 发布稿件时Up主设置的动态描述(仅在动态展示)
|
||
string Dynamic = 25 [(gogoproto.jsontag) = "dynamic"];
|
||
// 稿件第一P的cid,供秒开使用
|
||
int64 FirstCid = 26 [(gogoproto.jsontag) = "cid,omitempty"];
|
||
// 稿件第一P的分辨率,详见Dimession字段说明
|
||
Dimension Dimension = 27 [(gogoproto.jsontag) = "dimension,omitempty", (gogoproto.nullable) = false];
|
||
// 联合投稿信息,内部使用,详见StaffInfo说明
|
||
repeated StaffInfo StaffInfo = 28 [(gogoproto.jsontag) = "-"];
|
||
}
|
||
|
||
message StaffInfo {
|
||
// 联合投稿的成员Up主id
|
||
int64 Mid = 1 [(gogoproto.jsontag) = "mid"];
|
||
// 联合投稿的成员角色(如 声优、字幕)
|
||
string Title = 2 [(gogoproto.jsontag) = "title"];
|
||
}
|
||
|
||
// Dimension 视频分辨率
|
||
message Dimension {
|
||
// 宽 如 1920
|
||
int64 Width = 1 [(gogoproto.jsontag) = "width"];
|
||
// 高 如 1080
|
||
int64 Height = 2 [(gogoproto.jsontag) = "height"];
|
||
// 是否竖屏 0=否 1=是
|
||
int64 Rotate = 3 [(gogoproto.jsontag) = "rotate"];
|
||
}
|
||
|
||
// Rights 稿件各常用属性 0=否 1=是
|
||
message Rights {
|
||
// 老版是否付费
|
||
int32 Bp = 1 [(gogoproto.jsontag) = "bp"];
|
||
// 是否支持充电 (不可直接使用,网关层请求业务方后才有值)
|
||
int32 Elec = 2 [(gogoproto.jsontag) = "elec"];
|
||
// 是否下载(不可直接使用,网关层请求业务方后才有值)
|
||
int32 Download = 3 [(gogoproto.jsontag) = "download"];
|
||
// 是否电影
|
||
int32 Movie = 4 [(gogoproto.jsontag) = "movie"];
|
||
// 是否PGC付费
|
||
int32 Pay = 5 [(gogoproto.jsontag) = "pay"];
|
||
// 无用
|
||
int32 HD5 = 6 [(gogoproto.jsontag) = "hd5"];
|
||
// 是否允许转发
|
||
int32 NoReprint = 7 [(gogoproto.jsontag) = "no_reprint"];
|
||
// 是否可以自动播放
|
||
int32 Autoplay = 8 [(gogoproto.jsontag) = "autoplay"];
|
||
// 是否UGC付费
|
||
int32 UGCPay = 9 [(gogoproto.jsontag) = "ugc_pay"];
|
||
// 是否联合投稿
|
||
int32 IsCooperation = 10 [(gogoproto.jsontag) = "is_cooperation"];
|
||
}
|
||
|
||
// Author 稿件作者信息
|
||
message Author {
|
||
// Up主mid
|
||
int64 Mid = 1 [(gogoproto.jsontag) = "mid"];
|
||
// Up主名称
|
||
string Name = 2 [(gogoproto.jsontag) = "name"];
|
||
// Up主头像地址 绝对地址
|
||
string Face = 3 [(gogoproto.jsontag) = "face"];
|
||
}
|
||
|
||
// Stat 稿件的所有计数信息
|
||
message Stat {
|
||
int64 Aid = 1 [(gogoproto.jsontag) = "aid"];
|
||
// 播放数
|
||
int32 View = 2 [(gogoproto.jsontag) = "view"];
|
||
// 弹幕数
|
||
int32 Danmaku = 3 [(gogoproto.jsontag) = "danmaku"];
|
||
// 评论数
|
||
int32 Reply = 4 [(gogoproto.jsontag) = "reply"];
|
||
// 收藏数
|
||
int32 Fav = 5 [(gogoproto.jsontag) = "favorite"];
|
||
// 投币数
|
||
int32 Coin = 6 [(gogoproto.jsontag) = "coin"];
|
||
// 分享数
|
||
int32 Share = 7 [(gogoproto.jsontag) = "share"];
|
||
// 当前排名
|
||
int32 NowRank = 8 [(gogoproto.jsontag) = "now_rank"];
|
||
// 历史最高排名
|
||
int32 HisRank = 9 [(gogoproto.jsontag) = "his_rank"];
|
||
// 点赞数
|
||
int32 Like = 10 [(gogoproto.jsontag) = "like"];
|
||
// 点踩数 已取消前台展示,现在均返回0
|
||
int32 DisLike = 11 [(gogoproto.jsontag) = "dislike"];
|
||
}
|
||
|
||
// Click 点击数详情,老版本播放器使用
|
||
message Click {
|
||
int64 Aid = 1 [(gogoproto.jsontag) = "aid"];
|
||
// web端播放数
|
||
int32 Web = 2 [(gogoproto.jsontag) = "web"];
|
||
// iOS端播放数
|
||
int32 Ios = 3 [(gogoproto.jsontag) = "ios"];
|
||
// android端播放数
|
||
int32 Android = 4 [(gogoproto.jsontag) = "android"];
|
||
// h5端播放数
|
||
int32 H5 = 5 [(gogoproto.jsontag) = "h5"];
|
||
// 站外播放数
|
||
int32 Outter = 6 [(gogoproto.jsontag) = "outter"];
|
||
}
|
||
|
||
// Page 分P信息
|
||
message Page {
|
||
// 视频的cid
|
||
int64 Cid = 1 [(gogoproto.jsontag) = "cid"];
|
||
// 视频的序号顺序,从小到大
|
||
int32 Page = 2 [(gogoproto.jsontag) = "page"];
|
||
// 视频的来源,99%为vupload=B站自己的,少部分为腾讯(qq)、湖南tv(hunan)
|
||
string From = 3 [(gogoproto.jsontag) = "from"];
|
||
// 视频的标题
|
||
string Part = 4 [(gogoproto.jsontag) = "part"];
|
||
// 视频的时长 单位=秒
|
||
int64 Duration = 5 [(gogoproto.jsontag) = "duration"];
|
||
// 站外视频才有vid属性
|
||
string Vid = 6 [(gogoproto.jsontag) = "vid"];
|
||
// 视频的简介,多P视频才可填写简介
|
||
string Desc = 7 [(gogoproto.jsontag) = "description,omitempty"];
|
||
// 站外视频跳转地址
|
||
string WebLink = 8 [(gogoproto.jsontag) = "weblink"];
|
||
// 视频分辨率信息
|
||
Dimension Dimension = 9 [(gogoproto.jsontag) = "dimension", (gogoproto.nullable) = false];
|
||
}
|
||
|
||
// !!!Note: only response message defined, since we put pb into http response body
|
||
message VideoFileInfo {
|
||
uint64 filesize = 1 [(gogoproto.jsontag) = "filesize", (gogoproto.casttype) = "int64"];
|
||
uint64 timelength = 2 [(gogoproto.jsontag) = "timelength", (gogoproto.casttype) ="int64"];
|
||
string ahead = 3 [(gogoproto.jsontag) = "ahead"];
|
||
string vhead = 4 [(gogoproto.jsontag) = "vhead"];
|
||
}
|
||
|
||
message VideoFormatFileInfo {
|
||
repeated VideoFileInfo infos = 1 [(gogoproto.jsontag) = "infos"];
|
||
}
|
||
|
||
message DashItem {
|
||
uint32 id = 1 [(gogoproto.jsontag) = "id", (gogoproto.casttype) = "int64"];
|
||
string baseUrl = 2 [(gogoproto.jsontag) = "base_url"];
|
||
uint32 bandwidth = 3 [(gogoproto.jsontag) = "bandwidth", (gogoproto.casttype) = "int64"];
|
||
uint32 codecid = 4 [(gogoproto.jsontag) = "codecid", (gogoproto.casttype) = "int64"];
|
||
}
|
||
|
||
message ResponseDash {
|
||
repeated DashItem video = 1 [(gogoproto.jsontag) = "video"];
|
||
repeated DashItem audio = 2 [(gogoproto.jsontag) = "audio"];
|
||
}
|
||
|
||
message BvcVideoItem {
|
||
uint64 expire_time = 1 [(gogoproto.jsontag) = "expire_time", (gogoproto.casttype) = "int64"];
|
||
uint32 cid = 2 [(gogoproto.jsontag) = "cid", (gogoproto.casttype) ="int64"];
|
||
repeated uint32 support_quality = 3 [(gogoproto.jsontag) = "support_quality", (gogoproto.casttype) = "int"];
|
||
repeated string support_formats = 4 [(gogoproto.jsontag) = "support_formats"];
|
||
repeated string support_description = 5 [(gogoproto.jsontag) = "support_description"];
|
||
uint32 quality = 6 [(gogoproto.jsontag) = "quality", (gogoproto.casttype) = "int"];
|
||
string url = 7 [(gogoproto.jsontag) = "url"];
|
||
map<uint32, VideoFormatFileInfo> file_info = 8 [(gogoproto.jsontag) = "file_info"];
|
||
uint32 video_codecid = 9 [(gogoproto.jsontag) = "video_codecid"];
|
||
bool video_project = 10 [(gogoproto.jsontag) = "video_project"];
|
||
uint32 fnver = 11 [(gogoproto.jsontag) = "fnver", (gogoproto.casttype) = "int"];
|
||
uint32 fnval = 12 [(gogoproto.jsontag) = "fnval", (gogoproto.casttype) = "int"];
|
||
ResponseDash dash = 13 [(gogoproto.jsontag) = "dash"];
|
||
}
|
||
|
||
message BvcResponseMsg {
|
||
uint32 code = 1 [(gogoproto.jsontag) = "code", (gogoproto.casttype) = "int64"];
|
||
map<uint32, BvcVideoItem> data = 2 [(gogoproto.jsontag) = "data"];
|
||
}
|
||
|
||
// 内部方法 请勿使用--------------------------------------------------------------------------------------------
|
||
message ArcCacheRequest {
|
||
int64 aid = 1;
|
||
string tp = 2;
|
||
int64 OldMid = 3;
|
||
}
|
||
|
||
message ArcFieldCacheRequest {
|
||
int64 aid = 1;
|
||
int32 typeID = 2;
|
||
int32 oldTypeID = 3;
|
||
}
|
||
|
||
message UpVideoCacheRequest {
|
||
int64 aid = 1;
|
||
int64 cid = 2;
|
||
}
|
||
|
||
message DelVideoCacheRequest {
|
||
int64 aid = 1;
|
||
int64 cid = 2;
|
||
}
|
||
|
||
message SetStatRequest {
|
||
Stat stat = 1;
|
||
}
|
||
// 内部方法 请勿使用-------------------------------------------------------------------------------------------- |