From ed9189a31311bbe0a1623dbab68f9494b98e413e Mon Sep 17 00:00:00 2001 From: Eigeen Date: Sun, 25 Dec 2022 18:07:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=9B=B4=E6=92=AD=E9=97=B4?= =?UTF-8?q?=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户信息可以获取直播间信息了 --- .gitignore | 2 + biliapi/base.go | 36 +- biliapi/info.go | 4 +- biliapi/search.go | 54 + biliapi/stat.go | 4 +- rpc/pb/api.pb.go | 754 ------ rpc/pb/bili_api.pb.go | 2269 +++++++++++++++++ .../{api_grpc.pb.go => bili_api_grpc.pb.go} | 76 +- rpc/service.go | 99 +- 9 files changed, 2525 insertions(+), 773 deletions(-) create mode 100644 biliapi/search.go delete mode 100644 rpc/pb/api.pb.go create mode 100644 rpc/pb/bili_api.pb.go rename rpc/pb/{api_grpc.pb.go => bili_api_grpc.pb.go} (62%) diff --git a/.gitignore b/.gitignore index 66fd13c..fcc88f9 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ # Dependency directories (remove the comment below to include it) # vendor/ + +*.toml \ No newline at end of file diff --git a/biliapi/base.go b/biliapi/base.go index 5911db0..c781cc1 100644 --- a/biliapi/base.go +++ b/biliapi/base.go @@ -3,6 +3,7 @@ package biliapi import ( "io" "net/http" + "net/url" "time" ) @@ -12,25 +13,41 @@ type Root struct { TTL int `json:"ttl"` Data interface{} `json:"data"` } +type Jar struct { + cookies []*http.Cookie +} + +func (jar *Jar) SetCookies(u *url.URL, cookies []*http.Cookie) { + jar.cookies = cookies +} +func (jar *Jar) Cookies(u *url.URL) []*http.Cookie { + return jar.cookies +} type BaseService struct { - client *http.Client - url string + Client *http.Client + Url string + Headers map[string]string } func (srv *BaseService) DoRequest() ([]byte, error) { - req, err := http.NewRequest("GET", srv.url, nil) + req, err := http.NewRequest("GET", srv.Url, nil) if err != nil { return nil, err } req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.46") - - if srv.client == nil { - srv.client = &http.Client{ - Timeout: time.Duration(5) * time.Second, + if srv.Headers != nil { + for k, v := range srv.Headers { + req.Header.Add(k, v) } } - resp, err := srv.client.Do(req) + + if srv.Client == nil { + srv.Client = &http.Client{ + Timeout: 2 * time.Second, + } + } + resp, err := srv.Client.Do(req) defer resp.Body.Close() if err != nil { return nil, err @@ -40,9 +57,6 @@ func (srv *BaseService) DoRequest() ([]byte, error) { if err != nil { return nil, err } - //if resp.StatusCode != 200 { - // return body, NewAPIError(fmt.Sprintf("非正常返回值:StatusCode %d", resp.StatusCode)) - //} return body, nil } diff --git a/biliapi/info.go b/biliapi/info.go index 38133f9..d23d0b6 100644 --- a/biliapi/info.go +++ b/biliapi/info.go @@ -9,8 +9,8 @@ func BasicInfo(mid uint) ([]byte, error) { url := fmt.Sprintf("https://api.bilibili.com/x/space/wbi/acc/info?mid=%d", mid) srv := BaseService{ - client: &http.Client{}, - url: url, + Client: &http.Client{}, + Url: url, } respBody, err := srv.DoRequest() if err != nil { diff --git a/biliapi/search.go b/biliapi/search.go new file mode 100644 index 0000000..4883945 --- /dev/null +++ b/biliapi/search.go @@ -0,0 +1,54 @@ +package biliapi + +import ( + "fmt" + "net/http" + "time" +) + +type SearchParams struct { + Cookie string + Keyword string + Order string + Page uint +} + +func SearchVideo(params *SearchParams) ([]byte, error) { + url := fmt.Sprintf("https://api.bilibili.com/x/web-interface/search/type?"+ + "page=%d&page_size=42&order=%s&platform=pc&keyword=%s&source_tag=3&search_type=video&dynamic_offset=0", + params.Page, params.Order, params.Keyword) + + srv := BaseService{ + Client: &http.Client{ + Jar: nil, + Timeout: 2 * time.Second, + }, + Url: url, + Headers: map[string]string{"Cookie": params.Cookie}, + } + respBody, err := srv.DoRequest() + if err != nil { + return nil, err + } + return respBody, nil +} + +func SearchLiveRoom(params *SearchParams) ([]byte, error) { + url := fmt.Sprintf("https://api.bilibili.com/x/web-interface/search/type?"+ + "page=%d&page_size=42&order=%s&platform=pc&keyword=%s&source_tag=3&search_type=live_room&dynamic_offset=0", + params.Page, params.Order, params.Keyword) + + srv := BaseService{ + Client: &http.Client{ + Jar: nil, + Timeout: 2 * time.Second, + }, + Url: url, + Headers: map[string]string{"Cookie": params.Cookie}, + } + respBody, err := srv.DoRequest() + if err != nil { + return nil, err + } + return respBody, nil +} diff --git a/biliapi/stat.go b/biliapi/stat.go index 789ce5c..9d6e44e 100644 --- a/biliapi/stat.go +++ b/biliapi/stat.go @@ -18,8 +18,8 @@ func UserStat(mid uint) ([]byte, error) { url := fmt.Sprintf("https://api.bilibili.com/x/relation/stat?vmid=%d", mid) srv := BaseService{ - client: &http.Client{}, - url: url, + Client: &http.Client{}, + Url: url, } respBody, err := srv.DoRequest() if err != nil { diff --git a/rpc/pb/api.pb.go b/rpc/pb/api.pb.go deleted file mode 100644 index acd391f..0000000 --- a/rpc/pb/api.pb.go +++ /dev/null @@ -1,754 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.1 -// protoc v3.21.8 -// source: api.proto - -package pb - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type StatRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Uid uint64 `protobuf:"varint,1,opt,name=uid,proto3" json:"uid,omitempty"` -} - -func (x *StatRequest) Reset() { - *x = StatRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StatRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StatRequest) ProtoMessage() {} - -func (x *StatRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StatRequest.ProtoReflect.Descriptor instead. -func (*StatRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{0} -} - -func (x *StatRequest) GetUid() uint64 { - if x != nil { - return x.Uid - } - return 0 -} - -type StatReply struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Data *StatReply_Data `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` -} - -func (x *StatReply) Reset() { - *x = StatReply{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StatReply) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StatReply) ProtoMessage() {} - -func (x *StatReply) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StatReply.ProtoReflect.Descriptor instead. -func (*StatReply) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{1} -} - -func (x *StatReply) GetCode() int32 { - if x != nil { - return x.Code - } - return 0 -} - -func (x *StatReply) GetMsg() string { - if x != nil { - return x.Msg - } - return "" -} - -func (x *StatReply) GetData() *StatReply_Data { - if x != nil { - return x.Data - } - return nil -} - -type InfoRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Uid uint64 `protobuf:"varint,1,opt,name=uid,proto3" json:"uid,omitempty"` -} - -func (x *InfoRequest) Reset() { - *x = InfoRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *InfoRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*InfoRequest) ProtoMessage() {} - -func (x *InfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use InfoRequest.ProtoReflect.Descriptor instead. -func (*InfoRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{2} -} - -func (x *InfoRequest) GetUid() uint64 { - if x != nil { - return x.Uid - } - return 0 -} - -type InfoReply struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Data *InfoReply_Data `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` -} - -func (x *InfoReply) Reset() { - *x = InfoReply{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *InfoReply) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*InfoReply) ProtoMessage() {} - -func (x *InfoReply) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use InfoReply.ProtoReflect.Descriptor instead. -func (*InfoReply) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{3} -} - -func (x *InfoReply) GetCode() int32 { - if x != nil { - return x.Code - } - return 0 -} - -func (x *InfoReply) GetMsg() string { - if x != nil { - return x.Msg - } - return "" -} - -func (x *InfoReply) GetData() *InfoReply_Data { - if x != nil { - return x.Data - } - return nil -} - -type StatReply_Data struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Mid uint64 `protobuf:"varint,1,opt,name=mid,proto3" json:"mid,omitempty"` - Following uint32 `protobuf:"varint,2,opt,name=following,proto3" json:"following,omitempty"` - Whisper uint32 `protobuf:"varint,3,opt,name=whisper,proto3" json:"whisper,omitempty"` - Black uint32 `protobuf:"varint,4,opt,name=black,proto3" json:"black,omitempty"` - Follower uint32 `protobuf:"varint,5,opt,name=follower,proto3" json:"follower,omitempty"` -} - -func (x *StatReply_Data) Reset() { - *x = StatReply_Data{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StatReply_Data) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StatReply_Data) ProtoMessage() {} - -func (x *StatReply_Data) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StatReply_Data.ProtoReflect.Descriptor instead. -func (*StatReply_Data) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{1, 0} -} - -func (x *StatReply_Data) GetMid() uint64 { - if x != nil { - return x.Mid - } - return 0 -} - -func (x *StatReply_Data) GetFollowing() uint32 { - if x != nil { - return x.Following - } - return 0 -} - -func (x *StatReply_Data) GetWhisper() uint32 { - if x != nil { - return x.Whisper - } - return 0 -} - -func (x *StatReply_Data) GetBlack() uint32 { - if x != nil { - return x.Black - } - return 0 -} - -func (x *StatReply_Data) GetFollower() uint32 { - if x != nil { - return x.Follower - } - return 0 -} - -type InfoReply_Data struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Mid uint64 `protobuf:"varint,1,opt,name=mid,proto3" json:"mid,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Sex string `protobuf:"bytes,3,opt,name=sex,proto3" json:"sex,omitempty"` - Face string `protobuf:"bytes,4,opt,name=face,proto3" json:"face,omitempty"` - FaceNft uint32 `protobuf:"varint,5,opt,name=face_nft,json=faceNft,proto3" json:"face_nft,omitempty"` - FaceNftType uint32 `protobuf:"varint,6,opt,name=face_nft_type,json=faceNftType,proto3" json:"face_nft_type,omitempty"` - Sign string `protobuf:"bytes,7,opt,name=sign,proto3" json:"sign,omitempty"` - Rank uint32 `protobuf:"varint,8,opt,name=rank,proto3" json:"rank,omitempty"` - Level uint32 `protobuf:"varint,9,opt,name=level,proto3" json:"level,omitempty"` - Jointime uint32 `protobuf:"varint,10,opt,name=jointime,proto3" json:"jointime,omitempty"` - Moral uint32 `protobuf:"varint,11,opt,name=moral,proto3" json:"moral,omitempty"` - Silence uint32 `protobuf:"varint,12,opt,name=silence,proto3" json:"silence,omitempty"` - Coins uint32 `protobuf:"varint,13,opt,name=coins,proto3" json:"coins,omitempty"` - FansBadge bool `protobuf:"varint,14,opt,name=fans_badge,json=fansBadge,proto3" json:"fans_badge,omitempty"` - IsFollowed bool `protobuf:"varint,21,opt,name=is_followed,json=isFollowed,proto3" json:"is_followed,omitempty"` - TopPhoto string `protobuf:"bytes,22,opt,name=top_photo,json=topPhoto,proto3" json:"top_photo,omitempty"` - Birthday string `protobuf:"bytes,26,opt,name=birthday,proto3" json:"birthday,omitempty"` - Tags []string `protobuf:"bytes,29,rep,name=tags,proto3" json:"tags,omitempty"` - IsSeniorMember uint32 `protobuf:"varint,31,opt,name=is_senior_member,json=isSeniorMember,proto3" json:"is_senior_member,omitempty"` - McnInfo string `protobuf:"bytes,32,opt,name=mcn_info,json=mcnInfo,proto3" json:"mcn_info,omitempty"` - GaiaResType uint32 `protobuf:"varint,33,opt,name=gaia_res_type,json=gaiaResType,proto3" json:"gaia_res_type,omitempty"` - GaiaData string `protobuf:"bytes,34,opt,name=gaia_data,json=gaiaData,proto3" json:"gaia_data,omitempty"` - IsRisk bool `protobuf:"varint,35,opt,name=is_risk,json=isRisk,proto3" json:"is_risk,omitempty"` -} - -func (x *InfoReply_Data) Reset() { - *x = InfoReply_Data{} - if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *InfoReply_Data) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*InfoReply_Data) ProtoMessage() {} - -func (x *InfoReply_Data) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use InfoReply_Data.ProtoReflect.Descriptor instead. -func (*InfoReply_Data) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{3, 0} -} - -func (x *InfoReply_Data) GetMid() uint64 { - if x != nil { - return x.Mid - } - return 0 -} - -func (x *InfoReply_Data) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *InfoReply_Data) GetSex() string { - if x != nil { - return x.Sex - } - return "" -} - -func (x *InfoReply_Data) GetFace() string { - if x != nil { - return x.Face - } - return "" -} - -func (x *InfoReply_Data) GetFaceNft() uint32 { - if x != nil { - return x.FaceNft - } - return 0 -} - -func (x *InfoReply_Data) GetFaceNftType() uint32 { - if x != nil { - return x.FaceNftType - } - return 0 -} - -func (x *InfoReply_Data) GetSign() string { - if x != nil { - return x.Sign - } - return "" -} - -func (x *InfoReply_Data) GetRank() uint32 { - if x != nil { - return x.Rank - } - return 0 -} - -func (x *InfoReply_Data) GetLevel() uint32 { - if x != nil { - return x.Level - } - return 0 -} - -func (x *InfoReply_Data) GetJointime() uint32 { - if x != nil { - return x.Jointime - } - return 0 -} - -func (x *InfoReply_Data) GetMoral() uint32 { - if x != nil { - return x.Moral - } - return 0 -} - -func (x *InfoReply_Data) GetSilence() uint32 { - if x != nil { - return x.Silence - } - return 0 -} - -func (x *InfoReply_Data) GetCoins() uint32 { - if x != nil { - return x.Coins - } - return 0 -} - -func (x *InfoReply_Data) GetFansBadge() bool { - if x != nil { - return x.FansBadge - } - return false -} - -func (x *InfoReply_Data) GetIsFollowed() bool { - if x != nil { - return x.IsFollowed - } - return false -} - -func (x *InfoReply_Data) GetTopPhoto() string { - if x != nil { - return x.TopPhoto - } - return "" -} - -func (x *InfoReply_Data) GetBirthday() string { - if x != nil { - return x.Birthday - } - return "" -} - -func (x *InfoReply_Data) GetTags() []string { - if x != nil { - return x.Tags - } - return nil -} - -func (x *InfoReply_Data) GetIsSeniorMember() uint32 { - if x != nil { - return x.IsSeniorMember - } - return 0 -} - -func (x *InfoReply_Data) GetMcnInfo() string { - if x != nil { - return x.McnInfo - } - return "" -} - -func (x *InfoReply_Data) GetGaiaResType() uint32 { - if x != nil { - return x.GaiaResType - } - return 0 -} - -func (x *InfoReply_Data) GetGaiaData() string { - if x != nil { - return x.GaiaData - } - return "" -} - -func (x *InfoReply_Data) GetIsRisk() bool { - if x != nil { - return x.IsRisk - } - return false -} - -var File_api_proto protoreflect.FileDescriptor - -var file_api_proto_rawDesc = []byte{ - 0x0a, 0x09, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, - 0x22, 0x1f, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, - 0x64, 0x22, 0xdf, 0x01, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, - 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x27, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x82, - 0x01, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6d, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x6f, 0x6c, - 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x6f, - 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x68, 0x69, 0x73, 0x70, - 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x77, 0x68, 0x69, 0x73, 0x70, 0x65, - 0x72, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x72, 0x22, 0x1f, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x03, 0x75, 0x69, 0x64, 0x22, 0xba, 0x05, 0x0a, 0x09, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x70, - 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x27, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x1a, 0xdd, 0x04, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6d, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, - 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x66, 0x61, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x61, 0x63, 0x65, 0x5f, 0x6e, - 0x66, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x66, 0x61, 0x63, 0x65, 0x4e, 0x66, - 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x66, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x66, 0x74, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x4e, 0x66, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, 0x6e, - 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x72, 0x61, 0x6e, 0x6b, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x72, 0x61, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x6d, 0x6f, 0x72, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x63, 0x65, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x61, 0x6e, 0x73, 0x5f, 0x62, 0x61, - 0x64, 0x67, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x61, 0x6e, 0x73, 0x42, - 0x61, 0x64, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x46, 0x6f, 0x6c, - 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x5f, 0x70, 0x68, 0x6f, - 0x74, 0x6f, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x50, 0x68, 0x6f, - 0x74, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x18, 0x1a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x1d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, - 0x67, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x69, 0x6f, 0x72, 0x5f, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x69, 0x73, - 0x53, 0x65, 0x6e, 0x69, 0x6f, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, - 0x6d, 0x63, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6d, 0x63, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x61, 0x69, 0x61, 0x5f, - 0x72, 0x65, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, - 0x67, 0x61, 0x69, 0x61, 0x52, 0x65, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x67, - 0x61, 0x69, 0x61, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x22, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x67, 0x61, 0x69, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x72, - 0x69, 0x73, 0x6b, 0x18, 0x23, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x52, 0x69, 0x73, - 0x6b, 0x32, 0x74, 0x0a, 0x07, 0x42, 0x69, 0x6c, 0x69, 0x41, 0x50, 0x49, 0x12, 0x31, 0x0a, 0x0b, - 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x12, 0x10, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, - 0x36, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x61, 0x73, 0x69, 0x63, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_api_proto_rawDescOnce sync.Once - file_api_proto_rawDescData = file_api_proto_rawDesc -) - -func file_api_proto_rawDescGZIP() []byte { - file_api_proto_rawDescOnce.Do(func() { - file_api_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_proto_rawDescData) - }) - return file_api_proto_rawDescData -} - -var file_api_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_api_proto_goTypes = []interface{}{ - (*StatRequest)(nil), // 0: api.StatRequest - (*StatReply)(nil), // 1: api.StatReply - (*InfoRequest)(nil), // 2: api.InfoRequest - (*InfoReply)(nil), // 3: api.InfoReply - (*StatReply_Data)(nil), // 4: api.StatReply.Data - (*InfoReply_Data)(nil), // 5: api.InfoReply.Data -} -var file_api_proto_depIdxs = []int32{ - 4, // 0: api.StatReply.data:type_name -> api.StatReply.Data - 5, // 1: api.InfoReply.data:type_name -> api.InfoReply.Data - 0, // 2: api.BiliAPI.GetUserStat:input_type -> api.StatRequest - 2, // 3: api.BiliAPI.GetUserBasicInfo:input_type -> api.InfoRequest - 1, // 4: api.BiliAPI.GetUserStat:output_type -> api.StatReply - 3, // 5: api.BiliAPI.GetUserBasicInfo:output_type -> api.InfoReply - 4, // [4:6] is the sub-list for method output_type - 2, // [2:4] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name -} - -func init() { file_api_proto_init() } -func file_api_proto_init() { - if File_api_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_api_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatReply); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InfoRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InfoReply); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatReply_Data); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InfoReply_Data); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_api_proto_rawDesc, - NumEnums: 0, - NumMessages: 6, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_api_proto_goTypes, - DependencyIndexes: file_api_proto_depIdxs, - MessageInfos: file_api_proto_msgTypes, - }.Build() - File_api_proto = out.File - file_api_proto_rawDesc = nil - file_api_proto_goTypes = nil - file_api_proto_depIdxs = nil -} diff --git a/rpc/pb/bili_api.pb.go b/rpc/pb/bili_api.pb.go new file mode 100644 index 0000000..e23f2d2 --- /dev/null +++ b/rpc/pb/bili_api.pb.go @@ -0,0 +1,2269 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.8 +// source: bili_api.proto + +package pb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type StatRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uid uint64 `protobuf:"varint,1,opt,name=uid,proto3" json:"uid,omitempty"` +} + +func (x *StatRequest) Reset() { + *x = StatRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_bili_api_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatRequest) ProtoMessage() {} + +func (x *StatRequest) ProtoReflect() protoreflect.Message { + mi := &file_bili_api_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatRequest.ProtoReflect.Descriptor instead. +func (*StatRequest) Descriptor() ([]byte, []int) { + return file_bili_api_proto_rawDescGZIP(), []int{0} +} + +func (x *StatRequest) GetUid() uint64 { + if x != nil { + return x.Uid + } + return 0 +} + +type StatReply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + Data *StatReply_Data `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *StatReply) Reset() { + *x = StatReply{} + if protoimpl.UnsafeEnabled { + mi := &file_bili_api_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatReply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatReply) ProtoMessage() {} + +func (x *StatReply) ProtoReflect() protoreflect.Message { + mi := &file_bili_api_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatReply.ProtoReflect.Descriptor instead. +func (*StatReply) Descriptor() ([]byte, []int) { + return file_bili_api_proto_rawDescGZIP(), []int{1} +} + +func (x *StatReply) GetCode() int32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *StatReply) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *StatReply) GetData() *StatReply_Data { + if x != nil { + return x.Data + } + return nil +} + +type InfoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uid uint64 `protobuf:"varint,1,opt,name=uid,proto3" json:"uid,omitempty"` +} + +func (x *InfoRequest) Reset() { + *x = InfoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_bili_api_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InfoRequest) ProtoMessage() {} + +func (x *InfoRequest) ProtoReflect() protoreflect.Message { + mi := &file_bili_api_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InfoRequest.ProtoReflect.Descriptor instead. +func (*InfoRequest) Descriptor() ([]byte, []int) { + return file_bili_api_proto_rawDescGZIP(), []int{2} +} + +func (x *InfoRequest) GetUid() uint64 { + if x != nil { + return x.Uid + } + return 0 +} + +type InfoReply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + Data *InfoReply_Data `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *InfoReply) Reset() { + *x = InfoReply{} + if protoimpl.UnsafeEnabled { + mi := &file_bili_api_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InfoReply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InfoReply) ProtoMessage() {} + +func (x *InfoReply) ProtoReflect() protoreflect.Message { + mi := &file_bili_api_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InfoReply.ProtoReflect.Descriptor instead. +func (*InfoReply) Descriptor() ([]byte, []int) { + return file_bili_api_proto_rawDescGZIP(), []int{3} +} + +func (x *InfoReply) GetCode() int32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *InfoReply) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *InfoReply) GetData() *InfoReply_Data { + if x != nil { + return x.Data + } + return nil +} + +type SearchVideoReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Keyword string `protobuf:"bytes,1,opt,name=keyword,proto3" json:"keyword,omitempty"` + Order string `protobuf:"bytes,2,opt,name=order,proto3" json:"order,omitempty"` + Page uint32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` + Cookie string `protobuf:"bytes,4,opt,name=cookie,proto3" json:"cookie,omitempty"` +} + +func (x *SearchVideoReq) Reset() { + *x = SearchVideoReq{} + if protoimpl.UnsafeEnabled { + mi := &file_bili_api_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchVideoReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchVideoReq) ProtoMessage() {} + +func (x *SearchVideoReq) ProtoReflect() protoreflect.Message { + mi := &file_bili_api_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchVideoReq.ProtoReflect.Descriptor instead. +func (*SearchVideoReq) Descriptor() ([]byte, []int) { + return file_bili_api_proto_rawDescGZIP(), []int{4} +} + +func (x *SearchVideoReq) GetKeyword() string { + if x != nil { + return x.Keyword + } + return "" +} + +func (x *SearchVideoReq) GetOrder() string { + if x != nil { + return x.Order + } + return "" +} + +func (x *SearchVideoReq) GetPage() uint32 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *SearchVideoReq) GetCookie() string { + if x != nil { + return x.Cookie + } + return "" +} + +type SearchVideoResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Id uint64 `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"` + Author string `protobuf:"bytes,3,opt,name=author,proto3" json:"author,omitempty"` + Mid uint64 `protobuf:"varint,4,opt,name=mid,proto3" json:"mid,omitempty"` + Typeid string `protobuf:"bytes,5,opt,name=typeid,proto3" json:"typeid,omitempty"` + Typename string `protobuf:"bytes,6,opt,name=typename,proto3" json:"typename,omitempty"` + Arcurl string `protobuf:"bytes,7,opt,name=arcurl,proto3" json:"arcurl,omitempty"` + Aid uint64 `protobuf:"varint,8,opt,name=aid,proto3" json:"aid,omitempty"` + Bvid string `protobuf:"bytes,9,opt,name=bvid,proto3" json:"bvid,omitempty"` + Title string `protobuf:"bytes,10,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,11,opt,name=description,proto3" json:"description,omitempty"` + Arcrank string `protobuf:"bytes,12,opt,name=arcrank,proto3" json:"arcrank,omitempty"` + Pic string `protobuf:"bytes,13,opt,name=pic,proto3" json:"pic,omitempty"` + Play uint32 `protobuf:"varint,14,opt,name=play,proto3" json:"play,omitempty"` + VideoReview uint32 `protobuf:"varint,15,opt,name=video_review,json=videoReview,proto3" json:"video_review,omitempty"` + Favorites uint32 `protobuf:"varint,16,opt,name=favorites,proto3" json:"favorites,omitempty"` + Tag string `protobuf:"bytes,17,opt,name=tag,proto3" json:"tag,omitempty"` + Review uint32 `protobuf:"varint,18,opt,name=review,proto3" json:"review,omitempty"` + Pubdate uint32 `protobuf:"varint,19,opt,name=pubdate,proto3" json:"pubdate,omitempty"` + Senddate uint32 `protobuf:"varint,20,opt,name=senddate,proto3" json:"senddate,omitempty"` + Duration string `protobuf:"bytes,21,opt,name=duration,proto3" json:"duration,omitempty"` + Badgepay bool `protobuf:"varint,22,opt,name=badgepay,proto3" json:"badgepay,omitempty"` + HitColumns []string `protobuf:"bytes,23,rep,name=hit_columns,json=hitColumns,proto3" json:"hit_columns,omitempty"` + ViewType string `protobuf:"bytes,24,opt,name=view_type,json=viewType,proto3" json:"view_type,omitempty"` + IsPay uint32 `protobuf:"varint,25,opt,name=is_pay,json=isPay,proto3" json:"is_pay,omitempty"` + IsUnionVideo uint32 `protobuf:"varint,26,opt,name=is_union_video,json=isUnionVideo,proto3" json:"is_union_video,omitempty"` + RecTags []string `protobuf:"bytes,27,rep,name=rec_tags,json=recTags,proto3" json:"rec_tags,omitempty"` + NewRecTags []string `protobuf:"bytes,28,rep,name=new_rec_tags,json=newRecTags,proto3" json:"new_rec_tags,omitempty"` + RankScore uint32 `protobuf:"varint,29,opt,name=rank_score,json=rankScore,proto3" json:"rank_score,omitempty"` + Like uint32 `protobuf:"varint,30,opt,name=like,proto3" json:"like,omitempty"` + Upic string `protobuf:"bytes,31,opt,name=upic,proto3" json:"upic,omitempty"` + Corner string `protobuf:"bytes,32,opt,name=corner,proto3" json:"corner,omitempty"` + Cover string `protobuf:"bytes,33,opt,name=cover,proto3" json:"cover,omitempty"` + Desc string `protobuf:"bytes,34,opt,name=desc,proto3" json:"desc,omitempty"` + Url string `protobuf:"bytes,35,opt,name=url,proto3" json:"url,omitempty"` + RecReason string `protobuf:"bytes,36,opt,name=rec_reason,json=recReason,proto3" json:"rec_reason,omitempty"` + Danmaku uint32 `protobuf:"varint,37,opt,name=danmaku,proto3" json:"danmaku,omitempty"` +} + +func (x *SearchVideoResult) Reset() { + *x = SearchVideoResult{} + if protoimpl.UnsafeEnabled { + mi := &file_bili_api_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchVideoResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchVideoResult) ProtoMessage() {} + +func (x *SearchVideoResult) ProtoReflect() protoreflect.Message { + mi := &file_bili_api_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchVideoResult.ProtoReflect.Descriptor instead. +func (*SearchVideoResult) Descriptor() ([]byte, []int) { + return file_bili_api_proto_rawDescGZIP(), []int{5} +} + +func (x *SearchVideoResult) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *SearchVideoResult) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *SearchVideoResult) GetAuthor() string { + if x != nil { + return x.Author + } + return "" +} + +func (x *SearchVideoResult) GetMid() uint64 { + if x != nil { + return x.Mid + } + return 0 +} + +func (x *SearchVideoResult) GetTypeid() string { + if x != nil { + return x.Typeid + } + return "" +} + +func (x *SearchVideoResult) GetTypename() string { + if x != nil { + return x.Typename + } + return "" +} + +func (x *SearchVideoResult) GetArcurl() string { + if x != nil { + return x.Arcurl + } + return "" +} + +func (x *SearchVideoResult) GetAid() uint64 { + if x != nil { + return x.Aid + } + return 0 +} + +func (x *SearchVideoResult) GetBvid() string { + if x != nil { + return x.Bvid + } + return "" +} + +func (x *SearchVideoResult) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *SearchVideoResult) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *SearchVideoResult) GetArcrank() string { + if x != nil { + return x.Arcrank + } + return "" +} + +func (x *SearchVideoResult) GetPic() string { + if x != nil { + return x.Pic + } + return "" +} + +func (x *SearchVideoResult) GetPlay() uint32 { + if x != nil { + return x.Play + } + return 0 +} + +func (x *SearchVideoResult) GetVideoReview() uint32 { + if x != nil { + return x.VideoReview + } + return 0 +} + +func (x *SearchVideoResult) GetFavorites() uint32 { + if x != nil { + return x.Favorites + } + return 0 +} + +func (x *SearchVideoResult) GetTag() string { + if x != nil { + return x.Tag + } + return "" +} + +func (x *SearchVideoResult) GetReview() uint32 { + if x != nil { + return x.Review + } + return 0 +} + +func (x *SearchVideoResult) GetPubdate() uint32 { + if x != nil { + return x.Pubdate + } + return 0 +} + +func (x *SearchVideoResult) GetSenddate() uint32 { + if x != nil { + return x.Senddate + } + return 0 +} + +func (x *SearchVideoResult) GetDuration() string { + if x != nil { + return x.Duration + } + return "" +} + +func (x *SearchVideoResult) GetBadgepay() bool { + if x != nil { + return x.Badgepay + } + return false +} + +func (x *SearchVideoResult) GetHitColumns() []string { + if x != nil { + return x.HitColumns + } + return nil +} + +func (x *SearchVideoResult) GetViewType() string { + if x != nil { + return x.ViewType + } + return "" +} + +func (x *SearchVideoResult) GetIsPay() uint32 { + if x != nil { + return x.IsPay + } + return 0 +} + +func (x *SearchVideoResult) GetIsUnionVideo() uint32 { + if x != nil { + return x.IsUnionVideo + } + return 0 +} + +func (x *SearchVideoResult) GetRecTags() []string { + if x != nil { + return x.RecTags + } + return nil +} + +func (x *SearchVideoResult) GetNewRecTags() []string { + if x != nil { + return x.NewRecTags + } + return nil +} + +func (x *SearchVideoResult) GetRankScore() uint32 { + if x != nil { + return x.RankScore + } + return 0 +} + +func (x *SearchVideoResult) GetLike() uint32 { + if x != nil { + return x.Like + } + return 0 +} + +func (x *SearchVideoResult) GetUpic() string { + if x != nil { + return x.Upic + } + return "" +} + +func (x *SearchVideoResult) GetCorner() string { + if x != nil { + return x.Corner + } + return "" +} + +func (x *SearchVideoResult) GetCover() string { + if x != nil { + return x.Cover + } + return "" +} + +func (x *SearchVideoResult) GetDesc() string { + if x != nil { + return x.Desc + } + return "" +} + +func (x *SearchVideoResult) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *SearchVideoResult) GetRecReason() string { + if x != nil { + return x.RecReason + } + return "" +} + +func (x *SearchVideoResult) GetDanmaku() uint32 { + if x != nil { + return x.Danmaku + } + return 0 +} + +type SearchVideoReply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + Data *SearchVideoReply_Data `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *SearchVideoReply) Reset() { + *x = SearchVideoReply{} + if protoimpl.UnsafeEnabled { + mi := &file_bili_api_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchVideoReply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchVideoReply) ProtoMessage() {} + +func (x *SearchVideoReply) ProtoReflect() protoreflect.Message { + mi := &file_bili_api_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchVideoReply.ProtoReflect.Descriptor instead. +func (*SearchVideoReply) Descriptor() ([]byte, []int) { + return file_bili_api_proto_rawDescGZIP(), []int{6} +} + +func (x *SearchVideoReply) GetCode() int32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *SearchVideoReply) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *SearchVideoReply) GetData() *SearchVideoReply_Data { + if x != nil { + return x.Data + } + return nil +} + +type SearchLiveRoomReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Keyword string `protobuf:"bytes,1,opt,name=keyword,proto3" json:"keyword,omitempty"` + Order string `protobuf:"bytes,2,opt,name=order,proto3" json:"order,omitempty"` + Page uint32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` + Cookie string `protobuf:"bytes,4,opt,name=cookie,proto3" json:"cookie,omitempty"` +} + +func (x *SearchLiveRoomReq) Reset() { + *x = SearchLiveRoomReq{} + if protoimpl.UnsafeEnabled { + mi := &file_bili_api_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchLiveRoomReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchLiveRoomReq) ProtoMessage() {} + +func (x *SearchLiveRoomReq) ProtoReflect() protoreflect.Message { + mi := &file_bili_api_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchLiveRoomReq.ProtoReflect.Descriptor instead. +func (*SearchLiveRoomReq) Descriptor() ([]byte, []int) { + return file_bili_api_proto_rawDescGZIP(), []int{7} +} + +func (x *SearchLiveRoomReq) GetKeyword() string { + if x != nil { + return x.Keyword + } + return "" +} + +func (x *SearchLiveRoomReq) GetOrder() string { + if x != nil { + return x.Order + } + return "" +} + +func (x *SearchLiveRoomReq) GetPage() uint32 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *SearchLiveRoomReq) GetCookie() string { + if x != nil { + return x.Cookie + } + return "" +} + +type SearchLiveRoomResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RankOffset uint32 `protobuf:"varint,1,opt,name=rank_offset,json=rankOffset,proto3" json:"rank_offset,omitempty"` + Uid uint64 `protobuf:"varint,2,opt,name=uid,proto3" json:"uid,omitempty"` + Tags string `protobuf:"bytes,3,opt,name=tags,proto3" json:"tags,omitempty"` + HitColumns []string `protobuf:"bytes,4,rep,name=hit_columns,json=hitColumns,proto3" json:"hit_columns,omitempty"` + LiveTime string `protobuf:"bytes,5,opt,name=live_time,json=liveTime,proto3" json:"live_time,omitempty"` + CateName string `protobuf:"bytes,6,opt,name=cate_name,json=cateName,proto3" json:"cate_name,omitempty"` + LiveStatus uint32 `protobuf:"varint,7,opt,name=live_status,json=liveStatus,proto3" json:"live_status,omitempty"` + Uname string `protobuf:"bytes,8,opt,name=uname,proto3" json:"uname,omitempty"` + Uface string `protobuf:"bytes,9,opt,name=uface,proto3" json:"uface,omitempty"` + UserCover string `protobuf:"bytes,10,opt,name=user_cover,json=userCover,proto3" json:"user_cover,omitempty"` + ShortId uint32 `protobuf:"varint,11,opt,name=short_id,json=shortId,proto3" json:"short_id,omitempty"` + Area uint32 `protobuf:"varint,12,opt,name=area,proto3" json:"area,omitempty"` + Type string `protobuf:"bytes,13,opt,name=type,proto3" json:"type,omitempty"` + Title string `protobuf:"bytes,14,opt,name=title,proto3" json:"title,omitempty"` + Cover string `protobuf:"bytes,15,opt,name=cover,proto3" json:"cover,omitempty"` + Online uint32 `protobuf:"varint,16,opt,name=online,proto3" json:"online,omitempty"` + IsLiveRoomInline uint32 `protobuf:"varint,17,opt,name=is_live_room_inline,json=isLiveRoomInline,proto3" json:"is_live_room_inline,omitempty"` + RankIndex uint32 `protobuf:"varint,18,opt,name=rank_index,json=rankIndex,proto3" json:"rank_index,omitempty"` + RankScore uint32 `protobuf:"varint,19,opt,name=rank_score,json=rankScore,proto3" json:"rank_score,omitempty"` + Roomid uint64 `protobuf:"varint,20,opt,name=roomid,proto3" json:"roomid,omitempty"` + Attentions uint32 `protobuf:"varint,21,opt,name=attentions,proto3" json:"attentions,omitempty"` +} + +func (x *SearchLiveRoomResult) Reset() { + *x = SearchLiveRoomResult{} + if protoimpl.UnsafeEnabled { + mi := &file_bili_api_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchLiveRoomResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchLiveRoomResult) ProtoMessage() {} + +func (x *SearchLiveRoomResult) ProtoReflect() protoreflect.Message { + mi := &file_bili_api_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchLiveRoomResult.ProtoReflect.Descriptor instead. +func (*SearchLiveRoomResult) Descriptor() ([]byte, []int) { + return file_bili_api_proto_rawDescGZIP(), []int{8} +} + +func (x *SearchLiveRoomResult) GetRankOffset() uint32 { + if x != nil { + return x.RankOffset + } + return 0 +} + +func (x *SearchLiveRoomResult) GetUid() uint64 { + if x != nil { + return x.Uid + } + return 0 +} + +func (x *SearchLiveRoomResult) GetTags() string { + if x != nil { + return x.Tags + } + return "" +} + +func (x *SearchLiveRoomResult) GetHitColumns() []string { + if x != nil { + return x.HitColumns + } + return nil +} + +func (x *SearchLiveRoomResult) GetLiveTime() string { + if x != nil { + return x.LiveTime + } + return "" +} + +func (x *SearchLiveRoomResult) GetCateName() string { + if x != nil { + return x.CateName + } + return "" +} + +func (x *SearchLiveRoomResult) GetLiveStatus() uint32 { + if x != nil { + return x.LiveStatus + } + return 0 +} + +func (x *SearchLiveRoomResult) GetUname() string { + if x != nil { + return x.Uname + } + return "" +} + +func (x *SearchLiveRoomResult) GetUface() string { + if x != nil { + return x.Uface + } + return "" +} + +func (x *SearchLiveRoomResult) GetUserCover() string { + if x != nil { + return x.UserCover + } + return "" +} + +func (x *SearchLiveRoomResult) GetShortId() uint32 { + if x != nil { + return x.ShortId + } + return 0 +} + +func (x *SearchLiveRoomResult) GetArea() uint32 { + if x != nil { + return x.Area + } + return 0 +} + +func (x *SearchLiveRoomResult) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *SearchLiveRoomResult) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *SearchLiveRoomResult) GetCover() string { + if x != nil { + return x.Cover + } + return "" +} + +func (x *SearchLiveRoomResult) GetOnline() uint32 { + if x != nil { + return x.Online + } + return 0 +} + +func (x *SearchLiveRoomResult) GetIsLiveRoomInline() uint32 { + if x != nil { + return x.IsLiveRoomInline + } + return 0 +} + +func (x *SearchLiveRoomResult) GetRankIndex() uint32 { + if x != nil { + return x.RankIndex + } + return 0 +} + +func (x *SearchLiveRoomResult) GetRankScore() uint32 { + if x != nil { + return x.RankScore + } + return 0 +} + +func (x *SearchLiveRoomResult) GetRoomid() uint64 { + if x != nil { + return x.Roomid + } + return 0 +} + +func (x *SearchLiveRoomResult) GetAttentions() uint32 { + if x != nil { + return x.Attentions + } + return 0 +} + +type SearchLiveRoomReply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + Data *SearchLiveRoomReply_Data `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *SearchLiveRoomReply) Reset() { + *x = SearchLiveRoomReply{} + if protoimpl.UnsafeEnabled { + mi := &file_bili_api_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchLiveRoomReply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchLiveRoomReply) ProtoMessage() {} + +func (x *SearchLiveRoomReply) ProtoReflect() protoreflect.Message { + mi := &file_bili_api_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchLiveRoomReply.ProtoReflect.Descriptor instead. +func (*SearchLiveRoomReply) Descriptor() ([]byte, []int) { + return file_bili_api_proto_rawDescGZIP(), []int{9} +} + +func (x *SearchLiveRoomReply) GetCode() int32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *SearchLiveRoomReply) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *SearchLiveRoomReply) GetData() *SearchLiveRoomReply_Data { + if x != nil { + return x.Data + } + return nil +} + +type StatReply_Data struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Mid uint64 `protobuf:"varint,1,opt,name=mid,proto3" json:"mid,omitempty"` + Following uint32 `protobuf:"varint,2,opt,name=following,proto3" json:"following,omitempty"` + Whisper uint32 `protobuf:"varint,3,opt,name=whisper,proto3" json:"whisper,omitempty"` + Black uint32 `protobuf:"varint,4,opt,name=black,proto3" json:"black,omitempty"` + Follower uint32 `protobuf:"varint,5,opt,name=follower,proto3" json:"follower,omitempty"` +} + +func (x *StatReply_Data) Reset() { + *x = StatReply_Data{} + if protoimpl.UnsafeEnabled { + mi := &file_bili_api_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatReply_Data) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatReply_Data) ProtoMessage() {} + +func (x *StatReply_Data) ProtoReflect() protoreflect.Message { + mi := &file_bili_api_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatReply_Data.ProtoReflect.Descriptor instead. +func (*StatReply_Data) Descriptor() ([]byte, []int) { + return file_bili_api_proto_rawDescGZIP(), []int{1, 0} +} + +func (x *StatReply_Data) GetMid() uint64 { + if x != nil { + return x.Mid + } + return 0 +} + +func (x *StatReply_Data) GetFollowing() uint32 { + if x != nil { + return x.Following + } + return 0 +} + +func (x *StatReply_Data) GetWhisper() uint32 { + if x != nil { + return x.Whisper + } + return 0 +} + +func (x *StatReply_Data) GetBlack() uint32 { + if x != nil { + return x.Black + } + return 0 +} + +func (x *StatReply_Data) GetFollower() uint32 { + if x != nil { + return x.Follower + } + return 0 +} + +type InfoReply_LiveRoom struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RoomStatus uint32 `protobuf:"varint,1,opt,name=roomStatus,proto3" json:"roomStatus,omitempty"` + LiveStatus uint32 `protobuf:"varint,2,opt,name=liveStatus,proto3" json:"liveStatus,omitempty"` + Url string `protobuf:"bytes,3,opt,name=url,proto3" json:"url,omitempty"` + Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"` + Cover string `protobuf:"bytes,5,opt,name=cover,proto3" json:"cover,omitempty"` + Roomid uint64 `protobuf:"varint,6,opt,name=roomid,proto3" json:"roomid,omitempty"` + RoundStatus uint32 `protobuf:"varint,7,opt,name=roundStatus,proto3" json:"roundStatus,omitempty"` + BroadcastType uint32 `protobuf:"varint,8,opt,name=broadcast_type,json=broadcastType,proto3" json:"broadcast_type,omitempty"` +} + +func (x *InfoReply_LiveRoom) Reset() { + *x = InfoReply_LiveRoom{} + if protoimpl.UnsafeEnabled { + mi := &file_bili_api_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InfoReply_LiveRoom) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InfoReply_LiveRoom) ProtoMessage() {} + +func (x *InfoReply_LiveRoom) ProtoReflect() protoreflect.Message { + mi := &file_bili_api_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InfoReply_LiveRoom.ProtoReflect.Descriptor instead. +func (*InfoReply_LiveRoom) Descriptor() ([]byte, []int) { + return file_bili_api_proto_rawDescGZIP(), []int{3, 0} +} + +func (x *InfoReply_LiveRoom) GetRoomStatus() uint32 { + if x != nil { + return x.RoomStatus + } + return 0 +} + +func (x *InfoReply_LiveRoom) GetLiveStatus() uint32 { + if x != nil { + return x.LiveStatus + } + return 0 +} + +func (x *InfoReply_LiveRoom) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *InfoReply_LiveRoom) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *InfoReply_LiveRoom) GetCover() string { + if x != nil { + return x.Cover + } + return "" +} + +func (x *InfoReply_LiveRoom) GetRoomid() uint64 { + if x != nil { + return x.Roomid + } + return 0 +} + +func (x *InfoReply_LiveRoom) GetRoundStatus() uint32 { + if x != nil { + return x.RoundStatus + } + return 0 +} + +func (x *InfoReply_LiveRoom) GetBroadcastType() uint32 { + if x != nil { + return x.BroadcastType + } + return 0 +} + +type InfoReply_Data struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Mid uint64 `protobuf:"varint,1,opt,name=mid,proto3" json:"mid,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Sex string `protobuf:"bytes,3,opt,name=sex,proto3" json:"sex,omitempty"` + Face string `protobuf:"bytes,4,opt,name=face,proto3" json:"face,omitempty"` + FaceNft uint32 `protobuf:"varint,5,opt,name=face_nft,json=faceNft,proto3" json:"face_nft,omitempty"` + FaceNftType uint32 `protobuf:"varint,6,opt,name=face_nft_type,json=faceNftType,proto3" json:"face_nft_type,omitempty"` + Sign string `protobuf:"bytes,7,opt,name=sign,proto3" json:"sign,omitempty"` + Rank uint32 `protobuf:"varint,8,opt,name=rank,proto3" json:"rank,omitempty"` + Level uint32 `protobuf:"varint,9,opt,name=level,proto3" json:"level,omitempty"` + Jointime uint32 `protobuf:"varint,10,opt,name=jointime,proto3" json:"jointime,omitempty"` + Moral uint32 `protobuf:"varint,11,opt,name=moral,proto3" json:"moral,omitempty"` + Silence uint32 `protobuf:"varint,12,opt,name=silence,proto3" json:"silence,omitempty"` + Coins uint32 `protobuf:"varint,13,opt,name=coins,proto3" json:"coins,omitempty"` + FansBadge bool `protobuf:"varint,14,opt,name=fans_badge,json=fansBadge,proto3" json:"fans_badge,omitempty"` + IsFollowed bool `protobuf:"varint,21,opt,name=is_followed,json=isFollowed,proto3" json:"is_followed,omitempty"` + TopPhoto string `protobuf:"bytes,22,opt,name=top_photo,json=topPhoto,proto3" json:"top_photo,omitempty"` + LiveRoom *InfoReply_LiveRoom `protobuf:"bytes,25,opt,name=live_room,json=liveRoom,proto3" json:"live_room,omitempty"` + Birthday string `protobuf:"bytes,26,opt,name=birthday,proto3" json:"birthday,omitempty"` + Tags []string `protobuf:"bytes,29,rep,name=tags,proto3" json:"tags,omitempty"` + IsSeniorMember uint32 `protobuf:"varint,31,opt,name=is_senior_member,json=isSeniorMember,proto3" json:"is_senior_member,omitempty"` + McnInfo string `protobuf:"bytes,32,opt,name=mcn_info,json=mcnInfo,proto3" json:"mcn_info,omitempty"` + GaiaResType uint32 `protobuf:"varint,33,opt,name=gaia_res_type,json=gaiaResType,proto3" json:"gaia_res_type,omitempty"` + GaiaData string `protobuf:"bytes,34,opt,name=gaia_data,json=gaiaData,proto3" json:"gaia_data,omitempty"` + IsRisk bool `protobuf:"varint,35,opt,name=is_risk,json=isRisk,proto3" json:"is_risk,omitempty"` +} + +func (x *InfoReply_Data) Reset() { + *x = InfoReply_Data{} + if protoimpl.UnsafeEnabled { + mi := &file_bili_api_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InfoReply_Data) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InfoReply_Data) ProtoMessage() {} + +func (x *InfoReply_Data) ProtoReflect() protoreflect.Message { + mi := &file_bili_api_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InfoReply_Data.ProtoReflect.Descriptor instead. +func (*InfoReply_Data) Descriptor() ([]byte, []int) { + return file_bili_api_proto_rawDescGZIP(), []int{3, 1} +} + +func (x *InfoReply_Data) GetMid() uint64 { + if x != nil { + return x.Mid + } + return 0 +} + +func (x *InfoReply_Data) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *InfoReply_Data) GetSex() string { + if x != nil { + return x.Sex + } + return "" +} + +func (x *InfoReply_Data) GetFace() string { + if x != nil { + return x.Face + } + return "" +} + +func (x *InfoReply_Data) GetFaceNft() uint32 { + if x != nil { + return x.FaceNft + } + return 0 +} + +func (x *InfoReply_Data) GetFaceNftType() uint32 { + if x != nil { + return x.FaceNftType + } + return 0 +} + +func (x *InfoReply_Data) GetSign() string { + if x != nil { + return x.Sign + } + return "" +} + +func (x *InfoReply_Data) GetRank() uint32 { + if x != nil { + return x.Rank + } + return 0 +} + +func (x *InfoReply_Data) GetLevel() uint32 { + if x != nil { + return x.Level + } + return 0 +} + +func (x *InfoReply_Data) GetJointime() uint32 { + if x != nil { + return x.Jointime + } + return 0 +} + +func (x *InfoReply_Data) GetMoral() uint32 { + if x != nil { + return x.Moral + } + return 0 +} + +func (x *InfoReply_Data) GetSilence() uint32 { + if x != nil { + return x.Silence + } + return 0 +} + +func (x *InfoReply_Data) GetCoins() uint32 { + if x != nil { + return x.Coins + } + return 0 +} + +func (x *InfoReply_Data) GetFansBadge() bool { + if x != nil { + return x.FansBadge + } + return false +} + +func (x *InfoReply_Data) GetIsFollowed() bool { + if x != nil { + return x.IsFollowed + } + return false +} + +func (x *InfoReply_Data) GetTopPhoto() string { + if x != nil { + return x.TopPhoto + } + return "" +} + +func (x *InfoReply_Data) GetLiveRoom() *InfoReply_LiveRoom { + if x != nil { + return x.LiveRoom + } + return nil +} + +func (x *InfoReply_Data) GetBirthday() string { + if x != nil { + return x.Birthday + } + return "" +} + +func (x *InfoReply_Data) GetTags() []string { + if x != nil { + return x.Tags + } + return nil +} + +func (x *InfoReply_Data) GetIsSeniorMember() uint32 { + if x != nil { + return x.IsSeniorMember + } + return 0 +} + +func (x *InfoReply_Data) GetMcnInfo() string { + if x != nil { + return x.McnInfo + } + return "" +} + +func (x *InfoReply_Data) GetGaiaResType() uint32 { + if x != nil { + return x.GaiaResType + } + return 0 +} + +func (x *InfoReply_Data) GetGaiaData() string { + if x != nil { + return x.GaiaData + } + return "" +} + +func (x *InfoReply_Data) GetIsRisk() bool { + if x != nil { + return x.IsRisk + } + return false +} + +type SearchVideoReply_Data struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Seid string `protobuf:"bytes,1,opt,name=seid,proto3" json:"seid,omitempty"` + Page uint32 `protobuf:"varint,2,opt,name=page,proto3" json:"page,omitempty"` + Pagesize uint32 `protobuf:"varint,3,opt,name=pagesize,proto3" json:"pagesize,omitempty"` + NumResults uint32 `protobuf:"varint,4,opt,name=numResults,proto3" json:"numResults,omitempty"` + NumPages uint32 `protobuf:"varint,5,opt,name=numPages,proto3" json:"numPages,omitempty"` + SuggestKeyword string `protobuf:"bytes,6,opt,name=suggest_keyword,json=suggestKeyword,proto3" json:"suggest_keyword,omitempty"` + RqtType string `protobuf:"bytes,7,opt,name=rqt_type,json=rqtType,proto3" json:"rqt_type,omitempty"` + EggHit uint32 `protobuf:"varint,8,opt,name=egg_hit,json=eggHit,proto3" json:"egg_hit,omitempty"` + Result []*SearchVideoResult `protobuf:"bytes,9,rep,name=result,proto3" json:"result,omitempty"` + ShowColumn uint32 `protobuf:"varint,10,opt,name=show_column,json=showColumn,proto3" json:"show_column,omitempty"` + InBlackKey uint32 `protobuf:"varint,11,opt,name=in_black_key,json=inBlackKey,proto3" json:"in_black_key,omitempty"` + InWhiteKey uint32 `protobuf:"varint,12,opt,name=in_white_key,json=inWhiteKey,proto3" json:"in_white_key,omitempty"` +} + +func (x *SearchVideoReply_Data) Reset() { + *x = SearchVideoReply_Data{} + if protoimpl.UnsafeEnabled { + mi := &file_bili_api_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchVideoReply_Data) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchVideoReply_Data) ProtoMessage() {} + +func (x *SearchVideoReply_Data) ProtoReflect() protoreflect.Message { + mi := &file_bili_api_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchVideoReply_Data.ProtoReflect.Descriptor instead. +func (*SearchVideoReply_Data) Descriptor() ([]byte, []int) { + return file_bili_api_proto_rawDescGZIP(), []int{6, 0} +} + +func (x *SearchVideoReply_Data) GetSeid() string { + if x != nil { + return x.Seid + } + return "" +} + +func (x *SearchVideoReply_Data) GetPage() uint32 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *SearchVideoReply_Data) GetPagesize() uint32 { + if x != nil { + return x.Pagesize + } + return 0 +} + +func (x *SearchVideoReply_Data) GetNumResults() uint32 { + if x != nil { + return x.NumResults + } + return 0 +} + +func (x *SearchVideoReply_Data) GetNumPages() uint32 { + if x != nil { + return x.NumPages + } + return 0 +} + +func (x *SearchVideoReply_Data) GetSuggestKeyword() string { + if x != nil { + return x.SuggestKeyword + } + return "" +} + +func (x *SearchVideoReply_Data) GetRqtType() string { + if x != nil { + return x.RqtType + } + return "" +} + +func (x *SearchVideoReply_Data) GetEggHit() uint32 { + if x != nil { + return x.EggHit + } + return 0 +} + +func (x *SearchVideoReply_Data) GetResult() []*SearchVideoResult { + if x != nil { + return x.Result + } + return nil +} + +func (x *SearchVideoReply_Data) GetShowColumn() uint32 { + if x != nil { + return x.ShowColumn + } + return 0 +} + +func (x *SearchVideoReply_Data) GetInBlackKey() uint32 { + if x != nil { + return x.InBlackKey + } + return 0 +} + +func (x *SearchVideoReply_Data) GetInWhiteKey() uint32 { + if x != nil { + return x.InWhiteKey + } + return 0 +} + +type SearchLiveRoomReply_Data struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Seid string `protobuf:"bytes,1,opt,name=seid,proto3" json:"seid,omitempty"` + Page uint32 `protobuf:"varint,2,opt,name=page,proto3" json:"page,omitempty"` + Pagesize uint32 `protobuf:"varint,3,opt,name=pagesize,proto3" json:"pagesize,omitempty"` + NumResults uint32 `protobuf:"varint,4,opt,name=numResults,proto3" json:"numResults,omitempty"` + NumPages uint32 `protobuf:"varint,5,opt,name=numPages,proto3" json:"numPages,omitempty"` + SuggestKeyword string `protobuf:"bytes,6,opt,name=suggest_keyword,json=suggestKeyword,proto3" json:"suggest_keyword,omitempty"` + RqtType string `protobuf:"bytes,7,opt,name=rqt_type,json=rqtType,proto3" json:"rqt_type,omitempty"` + EggHit uint32 `protobuf:"varint,8,opt,name=egg_hit,json=eggHit,proto3" json:"egg_hit,omitempty"` + Result []*SearchLiveRoomResult `protobuf:"bytes,9,rep,name=result,proto3" json:"result,omitempty"` + ShowColumn uint32 `protobuf:"varint,10,opt,name=show_column,json=showColumn,proto3" json:"show_column,omitempty"` + InBlackKey uint32 `protobuf:"varint,11,opt,name=in_black_key,json=inBlackKey,proto3" json:"in_black_key,omitempty"` + InWhiteKey uint32 `protobuf:"varint,12,opt,name=in_white_key,json=inWhiteKey,proto3" json:"in_white_key,omitempty"` +} + +func (x *SearchLiveRoomReply_Data) Reset() { + *x = SearchLiveRoomReply_Data{} + if protoimpl.UnsafeEnabled { + mi := &file_bili_api_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchLiveRoomReply_Data) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchLiveRoomReply_Data) ProtoMessage() {} + +func (x *SearchLiveRoomReply_Data) ProtoReflect() protoreflect.Message { + mi := &file_bili_api_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchLiveRoomReply_Data.ProtoReflect.Descriptor instead. +func (*SearchLiveRoomReply_Data) Descriptor() ([]byte, []int) { + return file_bili_api_proto_rawDescGZIP(), []int{9, 0} +} + +func (x *SearchLiveRoomReply_Data) GetSeid() string { + if x != nil { + return x.Seid + } + return "" +} + +func (x *SearchLiveRoomReply_Data) GetPage() uint32 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *SearchLiveRoomReply_Data) GetPagesize() uint32 { + if x != nil { + return x.Pagesize + } + return 0 +} + +func (x *SearchLiveRoomReply_Data) GetNumResults() uint32 { + if x != nil { + return x.NumResults + } + return 0 +} + +func (x *SearchLiveRoomReply_Data) GetNumPages() uint32 { + if x != nil { + return x.NumPages + } + return 0 +} + +func (x *SearchLiveRoomReply_Data) GetSuggestKeyword() string { + if x != nil { + return x.SuggestKeyword + } + return "" +} + +func (x *SearchLiveRoomReply_Data) GetRqtType() string { + if x != nil { + return x.RqtType + } + return "" +} + +func (x *SearchLiveRoomReply_Data) GetEggHit() uint32 { + if x != nil { + return x.EggHit + } + return 0 +} + +func (x *SearchLiveRoomReply_Data) GetResult() []*SearchLiveRoomResult { + if x != nil { + return x.Result + } + return nil +} + +func (x *SearchLiveRoomReply_Data) GetShowColumn() uint32 { + if x != nil { + return x.ShowColumn + } + return 0 +} + +func (x *SearchLiveRoomReply_Data) GetInBlackKey() uint32 { + if x != nil { + return x.InBlackKey + } + return 0 +} + +func (x *SearchLiveRoomReply_Data) GetInWhiteKey() uint32 { + if x != nil { + return x.InWhiteKey + } + return 0 +} + +var File_bili_api_proto protoreflect.FileDescriptor + +var file_bili_api_proto_rawDesc = []byte{ + 0x0a, 0x0e, 0x62, 0x69, 0x6c, 0x69, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x03, 0x61, 0x70, 0x69, 0x22, 0x1f, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0xdf, 0x01, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x27, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x1a, 0x82, 0x01, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, + 0x6d, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6d, 0x69, 0x64, 0x12, 0x1c, + 0x0a, 0x09, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x09, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, + 0x77, 0x68, 0x69, 0x73, 0x70, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x77, + 0x68, 0x69, 0x73, 0x70, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, + 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, + 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x22, 0x1f, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0xdc, 0x07, 0x0a, 0x09, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, + 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x27, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0xe9, 0x01, 0x0a, 0x08, 0x4c, 0x69, 0x76, 0x65, 0x52, + 0x6f, 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x6f, 0x75, + 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, + 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x62, + 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x1a, 0x93, 0x05, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x6d, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6d, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x73, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x66, 0x61, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x61, 0x63, 0x65, 0x5f, + 0x6e, 0x66, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x66, 0x61, 0x63, 0x65, 0x4e, + 0x66, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x66, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x66, 0x74, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x4e, + 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, + 0x6e, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x72, 0x61, 0x6e, 0x6b, 0x12, 0x14, + 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x72, 0x61, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x6d, 0x6f, 0x72, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x63, + 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x61, 0x6e, 0x73, 0x5f, 0x62, + 0x61, 0x64, 0x67, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x61, 0x6e, 0x73, + 0x42, 0x61, 0x64, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x66, 0x6f, 0x6c, 0x6c, + 0x6f, 0x77, 0x65, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x46, 0x6f, + 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x5f, 0x70, 0x68, + 0x6f, 0x74, 0x6f, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x50, 0x68, + 0x6f, 0x74, 0x6f, 0x12, 0x34, 0x0a, 0x09, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, + 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, + 0x08, 0x6c, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x72, + 0x74, 0x68, 0x64, 0x61, 0x79, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x69, 0x72, + 0x74, 0x68, 0x64, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x1d, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, + 0x73, 0x65, 0x6e, 0x69, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x1f, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x69, 0x73, 0x53, 0x65, 0x6e, 0x69, 0x6f, 0x72, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x63, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, + 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x63, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, + 0x0a, 0x0d, 0x67, 0x61, 0x69, 0x61, 0x5f, 0x72, 0x65, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x21, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x67, 0x61, 0x69, 0x61, 0x52, 0x65, 0x73, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x61, 0x69, 0x61, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x22, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, 0x69, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x72, 0x69, 0x73, 0x6b, 0x18, 0x23, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x06, 0x69, 0x73, 0x52, 0x69, 0x73, 0x6b, 0x22, 0x6c, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, + 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, + 0x77, 0x6f, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, + 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x22, 0xb0, 0x07, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6d, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x79, + 0x70, 0x65, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x79, 0x70, 0x65, + 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x61, 0x72, 0x63, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x61, 0x72, 0x63, 0x75, 0x72, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x69, 0x64, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x03, 0x61, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x76, 0x69, 0x64, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x76, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x72, 0x63, 0x72, 0x61, 0x6e, 0x6b, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x72, 0x63, 0x72, 0x61, 0x6e, 0x6b, 0x12, 0x10, + 0x0a, 0x03, 0x70, 0x69, 0x63, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x63, + 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, + 0x70, 0x6c, 0x61, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x5f, 0x72, 0x65, + 0x76, 0x69, 0x65, 0x77, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x76, 0x69, 0x64, 0x65, + 0x6f, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x61, 0x76, 0x6f, 0x72, + 0x69, 0x74, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x61, 0x76, 0x6f, + 0x72, 0x69, 0x74, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, + 0x18, 0x0a, 0x07, 0x70, 0x75, 0x62, 0x64, 0x61, 0x74, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x07, 0x70, 0x75, 0x62, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6e, + 0x64, 0x64, 0x61, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x65, 0x6e, + 0x64, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x61, 0x64, 0x67, 0x65, 0x70, 0x61, 0x79, 0x18, 0x16, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x62, 0x61, 0x64, 0x67, 0x65, 0x70, 0x61, 0x79, 0x12, 0x1f, 0x0a, + 0x0b, 0x68, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x17, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0a, 0x68, 0x69, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x1b, + 0x0a, 0x09, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x76, 0x69, 0x65, 0x77, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x69, + 0x73, 0x5f, 0x70, 0x61, 0x79, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x73, 0x50, + 0x61, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x5f, 0x76, + 0x69, 0x64, 0x65, 0x6f, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x69, 0x73, 0x55, 0x6e, + 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x5f, + 0x74, 0x61, 0x67, 0x73, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x63, 0x54, + 0x61, 0x67, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x65, 0x63, 0x5f, 0x74, + 0x61, 0x67, 0x73, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x52, 0x65, + 0x63, 0x54, 0x61, 0x67, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x61, 0x6e, 0x6b, 0x5f, 0x73, 0x63, + 0x6f, 0x72, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x61, 0x6e, 0x6b, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6b, 0x65, 0x18, 0x1e, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x04, 0x6c, 0x69, 0x6b, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x70, 0x69, 0x63, + 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x70, 0x69, 0x63, 0x12, 0x16, 0x0a, 0x06, + 0x63, 0x6f, 0x72, 0x6e, 0x65, 0x72, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, + 0x72, 0x6e, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x21, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, + 0x73, 0x63, 0x18, 0x22, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x23, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, + 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x24, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, + 0x18, 0x0a, 0x07, 0x64, 0x61, 0x6e, 0x6d, 0x61, 0x6b, 0x75, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x07, 0x64, 0x61, 0x6e, 0x6d, 0x61, 0x6b, 0x75, 0x22, 0xe3, 0x03, 0x0a, 0x10, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x12, + 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6d, 0x73, 0x67, 0x12, 0x2e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, + 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x1a, 0xf8, 0x02, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, + 0x04, 0x73, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x65, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x73, 0x69, 0x7a, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x50, 0x61, 0x67, 0x65, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x50, 0x61, 0x67, 0x65, 0x73, 0x12, 0x27, 0x0a, + 0x0f, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x4b, + 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x71, 0x74, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x71, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x67, 0x67, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x06, 0x65, 0x67, 0x67, 0x48, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68, + 0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x69, + 0x6e, 0x5f, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0a, 0x69, 0x6e, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, + 0x0c, 0x69, 0x6e, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x69, 0x6e, 0x57, 0x68, 0x69, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x22, + 0x6f, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4c, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6f, + 0x6d, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, + 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6f, 0x6b, + 0x69, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, + 0x22, 0xd0, 0x04, 0x0a, 0x14, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4c, 0x69, 0x76, 0x65, 0x52, + 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x61, 0x6e, + 0x6b, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, + 0x72, 0x61, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, + 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x69, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x69, 0x76, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, + 0x0a, 0x09, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, + 0x69, 0x76, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0a, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x75, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x75, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x75, 0x66, 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x75, 0x66, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, + 0x65, 0x72, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x65, 0x61, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x04, 0x61, 0x72, 0x65, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x2d, + 0x0a, 0x13, 0x69, 0x73, 0x5f, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, + 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x69, 0x73, 0x4c, + 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x72, 0x61, 0x6e, 0x6b, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x12, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x09, 0x72, 0x61, 0x6e, 0x6b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, + 0x72, 0x61, 0x6e, 0x6b, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x09, 0x72, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, + 0x6f, 0x6f, 0x6d, 0x69, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x6f, 0x6f, + 0x6d, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0xec, 0x03, 0x0a, 0x13, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4c, 0x69, + 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, + 0x67, 0x12, 0x31, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4c, 0x69, 0x76, 0x65, + 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x1a, 0xfb, 0x02, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, + 0x04, 0x73, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x65, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x73, 0x69, 0x7a, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x50, 0x61, 0x67, 0x65, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x50, 0x61, 0x67, 0x65, 0x73, 0x12, 0x27, 0x0a, + 0x0f, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x4b, + 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x71, 0x74, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x71, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x67, 0x67, 0x5f, 0x68, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x06, 0x65, 0x67, 0x67, 0x48, 0x69, 0x74, 0x12, 0x31, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4c, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1f, 0x0a, + 0x0b, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x20, + 0x0a, 0x0c, 0x69, 0x6e, 0x5f, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x69, 0x6e, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x4b, 0x65, 0x79, + 0x12, 0x20, 0x0a, 0x0c, 0x69, 0x6e, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x69, 0x6e, 0x57, 0x68, 0x69, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x32, 0xf7, 0x01, 0x0a, 0x07, 0x42, 0x69, 0x6c, 0x69, 0x41, 0x50, 0x49, 0x12, 0x31, + 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x12, 0x10, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, + 0x00, 0x12, 0x36, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x61, 0x73, 0x69, + 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x0b, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x12, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x4c, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x4c, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, + 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4c, 0x69, 0x76, + 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x06, 0x5a, 0x04, + 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_bili_api_proto_rawDescOnce sync.Once + file_bili_api_proto_rawDescData = file_bili_api_proto_rawDesc +) + +func file_bili_api_proto_rawDescGZIP() []byte { + file_bili_api_proto_rawDescOnce.Do(func() { + file_bili_api_proto_rawDescData = protoimpl.X.CompressGZIP(file_bili_api_proto_rawDescData) + }) + return file_bili_api_proto_rawDescData +} + +var file_bili_api_proto_msgTypes = make([]protoimpl.MessageInfo, 15) +var file_bili_api_proto_goTypes = []interface{}{ + (*StatRequest)(nil), // 0: api.StatRequest + (*StatReply)(nil), // 1: api.StatReply + (*InfoRequest)(nil), // 2: api.InfoRequest + (*InfoReply)(nil), // 3: api.InfoReply + (*SearchVideoReq)(nil), // 4: api.SearchVideoReq + (*SearchVideoResult)(nil), // 5: api.SearchVideoResult + (*SearchVideoReply)(nil), // 6: api.SearchVideoReply + (*SearchLiveRoomReq)(nil), // 7: api.SearchLiveRoomReq + (*SearchLiveRoomResult)(nil), // 8: api.SearchLiveRoomResult + (*SearchLiveRoomReply)(nil), // 9: api.SearchLiveRoomReply + (*StatReply_Data)(nil), // 10: api.StatReply.Data + (*InfoReply_LiveRoom)(nil), // 11: api.InfoReply.LiveRoom + (*InfoReply_Data)(nil), // 12: api.InfoReply.Data + (*SearchVideoReply_Data)(nil), // 13: api.SearchVideoReply.Data + (*SearchLiveRoomReply_Data)(nil), // 14: api.SearchLiveRoomReply.Data +} +var file_bili_api_proto_depIdxs = []int32{ + 10, // 0: api.StatReply.data:type_name -> api.StatReply.Data + 12, // 1: api.InfoReply.data:type_name -> api.InfoReply.Data + 13, // 2: api.SearchVideoReply.data:type_name -> api.SearchVideoReply.Data + 14, // 3: api.SearchLiveRoomReply.data:type_name -> api.SearchLiveRoomReply.Data + 11, // 4: api.InfoReply.Data.live_room:type_name -> api.InfoReply.LiveRoom + 5, // 5: api.SearchVideoReply.Data.result:type_name -> api.SearchVideoResult + 8, // 6: api.SearchLiveRoomReply.Data.result:type_name -> api.SearchLiveRoomResult + 0, // 7: api.BiliAPI.GetUserStat:input_type -> api.StatRequest + 2, // 8: api.BiliAPI.GetUserBasicInfo:input_type -> api.InfoRequest + 4, // 9: api.BiliAPI.SearchVideo:input_type -> api.SearchVideoReq + 7, // 10: api.BiliAPI.SearchLiveRoom:input_type -> api.SearchLiveRoomReq + 1, // 11: api.BiliAPI.GetUserStat:output_type -> api.StatReply + 3, // 12: api.BiliAPI.GetUserBasicInfo:output_type -> api.InfoReply + 6, // 13: api.BiliAPI.SearchVideo:output_type -> api.SearchVideoReply + 9, // 14: api.BiliAPI.SearchLiveRoom:output_type -> api.SearchLiveRoomReply + 11, // [11:15] is the sub-list for method output_type + 7, // [7:11] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name +} + +func init() { file_bili_api_proto_init() } +func file_bili_api_proto_init() { + if File_bili_api_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_bili_api_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bili_api_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bili_api_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InfoRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bili_api_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InfoReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bili_api_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchVideoReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bili_api_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchVideoResult); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bili_api_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchVideoReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bili_api_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchLiveRoomReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bili_api_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchLiveRoomResult); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bili_api_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchLiveRoomReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bili_api_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatReply_Data); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bili_api_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InfoReply_LiveRoom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bili_api_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InfoReply_Data); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bili_api_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchVideoReply_Data); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_bili_api_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchLiveRoomReply_Data); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_bili_api_proto_rawDesc, + NumEnums: 0, + NumMessages: 15, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_bili_api_proto_goTypes, + DependencyIndexes: file_bili_api_proto_depIdxs, + MessageInfos: file_bili_api_proto_msgTypes, + }.Build() + File_bili_api_proto = out.File + file_bili_api_proto_rawDesc = nil + file_bili_api_proto_goTypes = nil + file_bili_api_proto_depIdxs = nil +} diff --git a/rpc/pb/api_grpc.pb.go b/rpc/pb/bili_api_grpc.pb.go similarity index 62% rename from rpc/pb/api_grpc.pb.go rename to rpc/pb/bili_api_grpc.pb.go index 8b4ac8d..81806f7 100644 --- a/rpc/pb/api_grpc.pb.go +++ b/rpc/pb/bili_api_grpc.pb.go @@ -2,7 +2,7 @@ // versions: // - protoc-gen-go-grpc v1.2.0 // - protoc v3.21.8 -// source: api.proto +// source: bili_api.proto package pb @@ -24,6 +24,8 @@ const _ = grpc.SupportPackageIsVersion7 type BiliAPIClient interface { GetUserStat(ctx context.Context, in *StatRequest, opts ...grpc.CallOption) (*StatReply, error) GetUserBasicInfo(ctx context.Context, in *InfoRequest, opts ...grpc.CallOption) (*InfoReply, error) + SearchVideo(ctx context.Context, in *SearchVideoReq, opts ...grpc.CallOption) (*SearchVideoReply, error) + SearchLiveRoom(ctx context.Context, in *SearchLiveRoomReq, opts ...grpc.CallOption) (*SearchLiveRoomReply, error) } type biliAPIClient struct { @@ -52,12 +54,32 @@ func (c *biliAPIClient) GetUserBasicInfo(ctx context.Context, in *InfoRequest, o return out, nil } +func (c *biliAPIClient) SearchVideo(ctx context.Context, in *SearchVideoReq, opts ...grpc.CallOption) (*SearchVideoReply, error) { + out := new(SearchVideoReply) + err := c.cc.Invoke(ctx, "/api.BiliAPI/SearchVideo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *biliAPIClient) SearchLiveRoom(ctx context.Context, in *SearchLiveRoomReq, opts ...grpc.CallOption) (*SearchLiveRoomReply, error) { + out := new(SearchLiveRoomReply) + err := c.cc.Invoke(ctx, "/api.BiliAPI/SearchLiveRoom", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // BiliAPIServer is the server API for BiliAPI service. // All implementations must embed UnimplementedBiliAPIServer // for forward compatibility type BiliAPIServer interface { GetUserStat(context.Context, *StatRequest) (*StatReply, error) GetUserBasicInfo(context.Context, *InfoRequest) (*InfoReply, error) + SearchVideo(context.Context, *SearchVideoReq) (*SearchVideoReply, error) + SearchLiveRoom(context.Context, *SearchLiveRoomReq) (*SearchLiveRoomReply, error) mustEmbedUnimplementedBiliAPIServer() } @@ -71,6 +93,12 @@ func (UnimplementedBiliAPIServer) GetUserStat(context.Context, *StatRequest) (*S func (UnimplementedBiliAPIServer) GetUserBasicInfo(context.Context, *InfoRequest) (*InfoReply, error) { return nil, status.Errorf(codes.Unimplemented, "method GetUserBasicInfo not implemented") } +func (UnimplementedBiliAPIServer) SearchVideo(context.Context, *SearchVideoReq) (*SearchVideoReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method SearchVideo not implemented") +} +func (UnimplementedBiliAPIServer) SearchLiveRoom(context.Context, *SearchLiveRoomReq) (*SearchLiveRoomReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method SearchLiveRoom not implemented") +} func (UnimplementedBiliAPIServer) mustEmbedUnimplementedBiliAPIServer() {} // UnsafeBiliAPIServer may be embedded to opt out of forward compatibility for this service. @@ -120,6 +148,42 @@ func _BiliAPI_GetUserBasicInfo_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _BiliAPI_SearchVideo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchVideoReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BiliAPIServer).SearchVideo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.BiliAPI/SearchVideo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BiliAPIServer).SearchVideo(ctx, req.(*SearchVideoReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _BiliAPI_SearchLiveRoom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchLiveRoomReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BiliAPIServer).SearchLiveRoom(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.BiliAPI/SearchLiveRoom", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BiliAPIServer).SearchLiveRoom(ctx, req.(*SearchLiveRoomReq)) + } + return interceptor(ctx, in, info, handler) +} + // BiliAPI_ServiceDesc is the grpc.ServiceDesc for BiliAPI service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -135,7 +199,15 @@ var BiliAPI_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetUserBasicInfo", Handler: _BiliAPI_GetUserBasicInfo_Handler, }, + { + MethodName: "SearchVideo", + Handler: _BiliAPI_SearchVideo_Handler, + }, + { + MethodName: "SearchLiveRoom", + Handler: _BiliAPI_SearchLiveRoom_Handler, + }, }, Streams: []grpc.StreamDesc{}, - Metadata: "api.proto", + Metadata: "bili_api.proto", } diff --git a/rpc/service.go b/rpc/service.go index 3e67f75..cf6ac7d 100644 --- a/rpc/service.go +++ b/rpc/service.go @@ -81,7 +81,6 @@ func (s *Service) GetUserBasicInfo(ctx context.Context, req *pb.InfoRequest) (*p Data: nil, }, err } - if bodyObj.Code != 0 { fmt.Println("bad request: " + bodyObj.Message) return &pb.InfoReply{ @@ -93,7 +92,15 @@ func (s *Service) GetUserBasicInfo(ctx context.Context, req *pb.InfoRequest) (*p // interface映射到结构体 data := &pb.InfoReply_Data{} - err = mapstructure.Decode(bodyObj.Data, data) + dataBytes, err := json.Marshal(bodyObj.Data) + if err != nil { + return &pb.InfoReply{ + Code: 500, + Msg: err.Error(), + Data: nil, + }, err + } + err = json.Unmarshal(dataBytes, data) if err != nil { return &pb.InfoReply{ Code: 500, @@ -109,6 +116,94 @@ func (s *Service) GetUserBasicInfo(ctx context.Context, req *pb.InfoRequest) (*p } +func (s *Service) SearchVideo(ctx context.Context, req *pb.SearchVideoReq) (*pb.SearchVideoReply, error) { + body, err := biliapi.SearchVideo(&biliapi.SearchParams{ + Keyword: req.Keyword, + Order: req.Order, + Page: uint(req.Page), + Cookie: req.Cookie, + }) + bodyObj := biliapi.Root{} + err = json.Unmarshal(body, &bodyObj) + if err != nil { + fmt.Println("bad request: " + err.Error()) + return &pb.SearchVideoReply{ + Code: 400, + Msg: err.Error(), + Data: nil, + }, err + } + if bodyObj.Code != 0 { + fmt.Println("bad request: " + bodyObj.Message) + return &pb.SearchVideoReply{ + Code: int32(bodyObj.Code), + Msg: bodyObj.Message, + Data: nil, + }, err + } + + // interface映射到结构体 + data := &pb.SearchVideoReply_Data{} + err = mapstructure.Decode(bodyObj.Data, data) + if err != nil { + return &pb.SearchVideoReply{ + Code: 500, + Msg: err.Error(), + Data: nil, + }, err + } + return &pb.SearchVideoReply{ + Code: 200, + Msg: "", + Data: data, + }, nil + +} + +func (s *Service) SearchLiveRoom(ctx context.Context, req *pb.SearchLiveRoomReq) (*pb.SearchLiveRoomReply, error) { + body, err := biliapi.SearchLiveRoom(&biliapi.SearchParams{ + Keyword: req.Keyword, + Order: req.Order, + Page: uint(req.Page), + Cookie: req.Cookie, + }) + bodyObj := biliapi.Root{} + err = json.Unmarshal(body, &bodyObj) + if err != nil { + fmt.Println("bad request: " + err.Error()) + return &pb.SearchLiveRoomReply{ + Code: 400, + Msg: err.Error(), + Data: nil, + }, err + } + if bodyObj.Code != 0 { + fmt.Println("bad request: " + bodyObj.Message) + return &pb.SearchLiveRoomReply{ + Code: int32(bodyObj.Code), + Msg: bodyObj.Message, + Data: nil, + }, err + } + + // interface映射到结构体 + data := &pb.SearchLiveRoomReply_Data{} + err = mapstructure.Decode(bodyObj.Data, data) + if err != nil { + return &pb.SearchLiveRoomReply{ + Code: 500, + Msg: err.Error(), + Data: nil, + }, err + } + return &pb.SearchLiveRoomReply{ + Code: 200, + Msg: "", + Data: data, + }, nil + +} + func RegisterServices(s *grpc.Server) { pb.RegisterBiliAPIServer(s, &Service{}) reflection.Register(s)