Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,64 @@
load(
"@io_bazel_rules_go//proto:def.bzl",
"go_proto_library",
)
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"app_conf.bm.go",
"index.bm.go",
"relation.bm.go",
"relation.pbg.go",
],
embed = [":v1_go_proto"],
importpath = "go-common/app/interface/live/app-interface/api/http/v1",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/binding:go_default_library",
"@com_github_gogo_protobuf//gogoproto:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
proto_library(
name = "v1_proto",
srcs = [
"app_conf.proto",
"index.proto",
],
tags = ["automanaged"],
deps = ["@gogo_special_proto//github.com/gogo/protobuf/gogoproto"],
)
go_proto_library(
name = "v1_go_proto",
compilers = ["@io_bazel_rules_go//proto:gogofast_grpc"],
importpath = "go-common/app/interface/live/app-interface/api/http/v1",
proto = ":v1_proto",
tags = ["automanaged"],
deps = ["@com_github_gogo_protobuf//gogoproto:go_default_library"],
)

View File

@@ -0,0 +1,57 @@
// Code generated by protoc-gen-bm v0.1, DO NOT EDIT.
// source: app_conf.proto
/*
Package v1 is a generated blademaster stub package.
This code was generated with go-common/app/tool/bmgen/protoc-gen-bm v0.1.
It is generated from these files:
app_conf.proto
*/
package v1
import (
"context"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/binding"
)
// to suppressed 'imported but not used warning'
var _ *bm.Context
var _ context.Context
var _ binding.StructValidator
var PathConfigGetConf = "/live.appinterface.v1.config/getConf"
// ================
// Config Interface
// ================
type ConfigBMServer interface {
GetConf(ctx context.Context, req *GetConfReq) (resp *GetConfResp, err error)
}
var v1ConfigSvc ConfigBMServer
func configGetConf(c *bm.Context) {
p := new(GetConfReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v1ConfigSvc.GetConf(c, p)
c.JSON(resp, err)
}
// RegisterV1ConfigService Register the blademaster route with middleware map
// midMap is the middleware map, the key is defined in proto
func RegisterV1ConfigService(e *bm.Engine, svc ConfigBMServer, midMap map[string]bm.HandlerFunc) {
v1ConfigSvc = svc
e.GET("/xlive/app-interface/v1/config/getConf", configGetConf)
}
// RegisterConfigBMServer Register the blademaster route
func RegisterConfigBMServer(e *bm.Engine, server ConfigBMServer) {
v1ConfigSvc = server
e.GET("/live.appinterface.v1.config/getConf", configGetConf)
}

View File

@@ -0,0 +1,26 @@
<!-- package=live.appinterface.v1 -->
- [/xlive/app-interface/v1/config/getConf](#xliveapp-interfacev1configgetConf)
## /xlive/app-interface/v1/config/getConf
### 无标题
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|key|是|string||
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
"value": ""
}
}
```

View File

@@ -0,0 +1,515 @@
// Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: app_conf.proto
package v1
import proto "github.com/gogo/protobuf/proto"
import fmt "fmt"
import math "math"
import _ "github.com/gogo/protobuf/gogoproto"
import io "io"
// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package
type GetConfReq struct {
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty" form:"key" validate:"required"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetConfReq) Reset() { *m = GetConfReq{} }
func (m *GetConfReq) String() string { return proto.CompactTextString(m) }
func (*GetConfReq) ProtoMessage() {}
func (*GetConfReq) Descriptor() ([]byte, []int) {
return fileDescriptor_app_conf_3aa11f6a51d393db, []int{0}
}
func (m *GetConfReq) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *GetConfReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_GetConfReq.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalTo(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (dst *GetConfReq) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetConfReq.Merge(dst, src)
}
func (m *GetConfReq) XXX_Size() int {
return m.Size()
}
func (m *GetConfReq) XXX_DiscardUnknown() {
xxx_messageInfo_GetConfReq.DiscardUnknown(m)
}
var xxx_messageInfo_GetConfReq proto.InternalMessageInfo
func (m *GetConfReq) GetKey() string {
if m != nil {
return m.Key
}
return ""
}
type GetConfResp struct {
Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty" form:"value"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetConfResp) Reset() { *m = GetConfResp{} }
func (m *GetConfResp) String() string { return proto.CompactTextString(m) }
func (*GetConfResp) ProtoMessage() {}
func (*GetConfResp) Descriptor() ([]byte, []int) {
return fileDescriptor_app_conf_3aa11f6a51d393db, []int{1}
}
func (m *GetConfResp) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *GetConfResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_GetConfResp.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalTo(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (dst *GetConfResp) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetConfResp.Merge(dst, src)
}
func (m *GetConfResp) XXX_Size() int {
return m.Size()
}
func (m *GetConfResp) XXX_DiscardUnknown() {
xxx_messageInfo_GetConfResp.DiscardUnknown(m)
}
var xxx_messageInfo_GetConfResp proto.InternalMessageInfo
func (m *GetConfResp) GetValue() string {
if m != nil {
return m.Value
}
return ""
}
func init() {
proto.RegisterType((*GetConfReq)(nil), "live.appinterface.v1.GetConfReq")
proto.RegisterType((*GetConfResp)(nil), "live.appinterface.v1.GetConfResp")
}
func (m *GetConfReq) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalTo(dAtA)
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *GetConfReq) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
if len(m.Key) > 0 {
dAtA[i] = 0xa
i++
i = encodeVarintAppConf(dAtA, i, uint64(len(m.Key)))
i += copy(dAtA[i:], m.Key)
}
if m.XXX_unrecognized != nil {
i += copy(dAtA[i:], m.XXX_unrecognized)
}
return i, nil
}
func (m *GetConfResp) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalTo(dAtA)
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *GetConfResp) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
if len(m.Value) > 0 {
dAtA[i] = 0xa
i++
i = encodeVarintAppConf(dAtA, i, uint64(len(m.Value)))
i += copy(dAtA[i:], m.Value)
}
if m.XXX_unrecognized != nil {
i += copy(dAtA[i:], m.XXX_unrecognized)
}
return i, nil
}
func encodeVarintAppConf(dAtA []byte, offset int, v uint64) int {
for v >= 1<<7 {
dAtA[offset] = uint8(v&0x7f | 0x80)
v >>= 7
offset++
}
dAtA[offset] = uint8(v)
return offset + 1
}
func (m *GetConfReq) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = len(m.Key)
if l > 0 {
n += 1 + l + sovAppConf(uint64(l))
}
if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized)
}
return n
}
func (m *GetConfResp) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = len(m.Value)
if l > 0 {
n += 1 + l + sovAppConf(uint64(l))
}
if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized)
}
return n
}
func sovAppConf(x uint64) (n int) {
for {
n++
x >>= 7
if x == 0 {
break
}
}
return n
}
func sozAppConf(x uint64) (n int) {
return sovAppConf(uint64((x << 1) ^ uint64((int64(x) >> 63))))
}
func (m *GetConfReq) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowAppConf
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: GetConfReq: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: GetConfReq: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowAppConf
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthAppConf
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Key = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipAppConf(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthAppConf
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *GetConfResp) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowAppConf
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: GetConfResp: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: GetConfResp: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowAppConf
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthAppConf
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Value = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipAppConf(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthAppConf
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func skipAppConf(dAtA []byte) (n int, err error) {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return 0, ErrIntOverflowAppConf
}
if iNdEx >= l {
return 0, io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
wireType := int(wire & 0x7)
switch wireType {
case 0:
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return 0, ErrIntOverflowAppConf
}
if iNdEx >= l {
return 0, io.ErrUnexpectedEOF
}
iNdEx++
if dAtA[iNdEx-1] < 0x80 {
break
}
}
return iNdEx, nil
case 1:
iNdEx += 8
return iNdEx, nil
case 2:
var length int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return 0, ErrIntOverflowAppConf
}
if iNdEx >= l {
return 0, io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
length |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
iNdEx += length
if length < 0 {
return 0, ErrInvalidLengthAppConf
}
return iNdEx, nil
case 3:
for {
var innerWire uint64
var start int = iNdEx
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return 0, ErrIntOverflowAppConf
}
if iNdEx >= l {
return 0, io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
innerWire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
innerWireType := int(innerWire & 0x7)
if innerWireType == 4 {
break
}
next, err := skipAppConf(dAtA[start:])
if err != nil {
return 0, err
}
iNdEx = start + next
}
return iNdEx, nil
case 4:
return iNdEx, nil
case 5:
iNdEx += 4
return iNdEx, nil
default:
return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
}
}
panic("unreachable")
}
var (
ErrInvalidLengthAppConf = fmt.Errorf("proto: negative length found during unmarshaling")
ErrIntOverflowAppConf = fmt.Errorf("proto: integer overflow")
)
func init() { proto.RegisterFile("app_conf.proto", fileDescriptor_app_conf_3aa11f6a51d393db) }
var fileDescriptor_app_conf_3aa11f6a51d393db = []byte{
// 245 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x4b, 0x2c, 0x28, 0x88,
0x4f, 0xce, 0xcf, 0x4b, 0xd3, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0xc9, 0xc9, 0x2c, 0x4b,
0xd5, 0x4b, 0x2c, 0x28, 0xc8, 0xcc, 0x2b, 0x49, 0x2d, 0x4a, 0x4b, 0x4c, 0x4e, 0xd5, 0x2b, 0x33,
0x94, 0xd2, 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0x4f,
0xcf, 0xd7, 0x07, 0x2b, 0x4e, 0x2a, 0x4d, 0x03, 0xf3, 0xc0, 0x1c, 0x30, 0x0b, 0x62, 0x88, 0x92,
0x13, 0x17, 0x97, 0x7b, 0x6a, 0x89, 0x73, 0x7e, 0x5e, 0x5a, 0x50, 0x6a, 0xa1, 0x90, 0x09, 0x17,
0x73, 0x76, 0x6a, 0xa5, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0xa7, 0x93, 0xd2, 0xa7, 0x7b, 0xf2, 0x72,
0x69, 0xf9, 0x45, 0xb9, 0x56, 0x4a, 0xd9, 0xa9, 0x95, 0x4a, 0x0a, 0x65, 0x89, 0x39, 0x99, 0x29,
0x89, 0x25, 0xa9, 0x56, 0x4a, 0x45, 0xa9, 0x85, 0xa5, 0x99, 0x45, 0xa9, 0x29, 0x4a, 0x41, 0x20,
0xe5, 0x4a, 0xa6, 0x5c, 0xdc, 0x70, 0x33, 0x8a, 0x0b, 0x84, 0xd4, 0xb8, 0x58, 0xcb, 0x12, 0x73,
0x4a, 0x53, 0xa1, 0xc6, 0x08, 0x7c, 0xba, 0x27, 0xcf, 0x03, 0x31, 0x06, 0x2c, 0xac, 0x14, 0x04,
0x91, 0x36, 0x8a, 0xe0, 0x62, 0x03, 0xf9, 0x26, 0x33, 0x5d, 0xc8, 0x8f, 0x8b, 0x3d, 0x1d, 0x62,
0x80, 0x90, 0x82, 0x1e, 0x36, 0x5f, 0xe9, 0x21, 0xdc, 0x28, 0xa5, 0x48, 0x40, 0x45, 0x71, 0x81,
0x93, 0xc0, 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x18, 0xc5,
0x54, 0x66, 0x98, 0xc4, 0x06, 0xf6, 0xad, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x86, 0xd3, 0x42,
0x4e, 0x44, 0x01, 0x00, 0x00,
}

View File

@@ -0,0 +1,19 @@
syntax = "proto3";
package live.appinterface.v1;
option go_package = "v1";
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
service config {
rpc getConf (GetConfReq) returns (GetConfResp);
}
message GetConfReq {
string key = 1 [(gogoproto.moretags) = 'form:"key" validate:"required"'];
}
message GetConfResp {
string value = 1 [(gogoproto.moretags) = 'form:"value"'];
}

View File

@@ -0,0 +1,71 @@
// Code generated by protoc-gen-bm v0.1, DO NOT EDIT.
// source: api/http/v1/index.proto
/*
Package v1 is a generated blademaster stub package.
This code was generated with go-common/app/tool/bmgen/protoc-gen-bm v0.1.
It is generated from these files:
api/http/v1/index.proto
*/
package v1
import (
"context"
bm "go-common/library/net/http/blademaster"
)
// to suppressed 'imported but not used warning'
var _ *bm.Context
var _ context.Context
// ===============
// Index Interface
// ===============
// Index 相关服务
type Index interface {
// 首页大接口
// 首页换一换接口
// `dynamic_resp:"true" midware:"guest"`
GetAllList(ctx context.Context, req *GetAllListReq) (resp interface{}, err error)
// `midware:"guest"`
Change(ctx context.Context, req *ChangeReq) (resp *ChangeResp, err error)
}
var v1IndexSvc Index
// @params GetAllListReq
// @router GET /xlive/app-interface/v1/index/getAllList
// @response GetAllListResp
func indexGetAllList(c *bm.Context) {
p := new(GetAllListReq)
if err := c.Bind(p); err != nil {
return
}
resp, err := v1IndexSvc.GetAllList(c, p)
c.JSON(resp, err)
}
// @params ChangeReq
// @router GET /xlive/app-interface/v1/index/change
// @response ChangeResp
func indexChange(c *bm.Context) {
p := new(ChangeReq)
if err := c.Bind(p); err != nil {
return
}
resp, err := v1IndexSvc.Change(c, p)
c.JSON(resp, err)
}
// RegisterV1IndexService Register the blademaster route with middleware map
// midMap is the middleware map, the key is defined in proto
func RegisterV1IndexService(e *bm.Engine, svc Index, midMap map[string]bm.HandlerFunc) {
guest := midMap["guest"]
v1IndexSvc = svc
e.GET("/xlive/app-interface/v1/index/getAllList", guest, indexGetAllList)
e.GET("/xlive/app-interface/v1/index/change", guest, indexChange)
}

View File

@@ -0,0 +1,96 @@
## 首页大接口
首页换一换接口
`GET http://api.live.bilibili.com/xlive/app-interface/v1/index/getAllList`
### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|platform|是|string|平台|
|device|是|string|设备|
|scale|是|string|分辨率|
|build|是|integer|版本号|
|relation_page|是|integer|关注页码|
|module_id|否|integer|模块id可选|
```json
{
"code": 0,
"message": "ok",
"data": {
}
}
```
##
`GET http://api.live.bilibili.com/xlive/app-interface/v1/index/change`
### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|module_id|是|integer| 模块id|
|attention_room_id|是|string||
|platform|否|string| 平台|
|device|否|string|设备|
|scale|否|string|分辨率|
|build|否|integer|版本号|
```json
{
"code": 0,
"message": "ok",
"data": {
"module_list": [
{
"module_info": {
// 模块id
"id": 0,
// 标题
"title": "",
// 图标
"pic": "",
// list数据类型 1: banner 2: 导航栏 3: 运营推荐分区-标准 4: 运营推荐分区-方 5排行榜小时榜 6: 推荐主播-标准 7: 推荐主播-方 8:我的关注(用户相关) 9一级分区-标准 10一级分区-方 11: 活动卡片 12常用标签推荐入口(用户相关) 13常用标签推荐房间列表(用户相关) 14大航海提示入口
"type": 0,
// 跳转链接
"link": "",
// 该模块数据总数
"count": 0,
"is_sky_horse_gray": 0
},
// 注意:可能是 PicList{id,pic,link,title}需要根据ModuleInfo里的type判断
"list": [
{
"roomid": 0,
"title": "",
"uname": "",
"online": 0,
"cover": "",
"link": "",
"face": "",
"area_v2_parent_id": 0,
"area_v2_parent_name": "",
"area_v2_id": 0,
"area_v2_name": "",
"play_url,omitempty": "",
"play_url_h265,omitempty": "",
"current_quality,omitempty": 0,
"broadcast_type": 0,
"pendent_ru": "",
"pendent_ru_pic": "",
"pendent_ru_color": "",
"rec_type": 0,
"pk_id": 0,
"accept_quality,omitempty": [
0
]
}
]
}
]
}
}
```

View File

@@ -0,0 +1,96 @@
## 首页大接口
首页换一换接口
`GET http://api.live.bilibili.com/xlive/app-interface/v1/index/getAllList`
### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|platform|否|string| 平台|
|device|否|string|设备|
|scale|否|string|分辨率|
|build|否|string|版本号|
|relation_page|否|integer|关注页码|
|module_id|否|integer|模块id可选|
```json
{
"code": 0,
"message": "ok",
"data": {
}
}
```
##
`GET http://api.live.bilibili.com/xlive/app-interface/v1/index/change`
### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|module_id|否|integer| 模块id|
|attention_room_id|否|string||
|platform|否|string| 平台|
|device|否|string|设备|
|scale|否|string|分辨率|
|build|否|string|版本号|
```json
{
"code": 0,
"message": "ok",
"data": {
"module_list": [
{
"module_info": {
// 模块id
"id": 0,
// 标题
"title": "",
// 图标
"pic": "",
// list数据类型 1: banner 2: 导航栏 3: 运营推荐分区-标准 4: 运营推荐分区-方 5排行榜小时榜 6: 推荐主播-标准 7: 推荐主播-方 8:我的关注(用户相关) 9一级分区-标准 10一级分区-方 11: 活动卡片 12常用标签推荐入口(用户相关) 13常用标签推荐房间列表(用户相关) 14大航海提示入口
"type": 0,
// 跳转链接
"link": "",
// 该模块数据总数
"count": 0,
"is_sky_horse_gray": 0
},
// 注意:可能是 PicList{id,pic,link,title}需要根据ModuleInfo里的type判断
"list": [
{
"roomid": 0,
"title": "",
"uname": "",
"online": 0,
"cover": "",
"link": "",
"face": "",
"area_v2_parent_id": 0,
"area_v2_parent_name": "",
"area_v2_id": 0,
"area_v2_name": "",
"play_url": "",
"play_url_h265": "",
"current_quality": 0,
"broadcast_type": 0,
"pendent_ru": "",
"pendent_ru_pic": "",
"pendent_ru_color": "",
"rec_type": 0,
"pk_id": 0,
"accept_quality": [
0
]
}
]
}
]
}
}
```

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,106 @@
syntax = "proto3";
package live.appinterface.v1;
option go_package = "v1";
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
// Index 相关服务
service Index {
// 首页大接口
// 首页换一换接口
// `dynamic_resp:"true" midware:"guest"`
rpc getAllList (GetAllListReq) returns (GetAllListResp);
// `midware:"guest"`
rpc change (ChangeReq) returns (ChangeResp);
}
message GetAllListResp {
}
// GetAllList请求
message GetAllListReq {
//平台
string platform = 1 [(gogoproto.moretags) = 'form:"platform" validate:"required"'];
//设备
string device = 2 [(gogoproto.moretags) = 'form:"device" validate:"required"'];
//分辨率
string scale = 3 [(gogoproto.moretags) = 'form:"scale" validate:"required"'];
//版本号
int64 build = 4 [(gogoproto.moretags) = 'form:"build" validate:"required"'];
//关注页码
int64 relation_page = 5 [(gogoproto.moretags) = 'form:"relation_page" validate:"required"'];
//模块id可选
int64 module_id = 6 [(gogoproto.moretags) = 'form:"module_id"'];
}
// 换一换
message ChangeReq {
// 模块id
// `mock:"1"`
int64 module_id = 1 [(gogoproto.moretags) = 'form:"module_id" validate:"required"'];
string attention_room_id = 2 [(gogoproto.moretags) = 'form:"attention_room_id" validate:"required"'];
// 平台
string platform = 3 [(gogoproto.moretags) = 'form:"platform"'];
//设备
string device = 4 [(gogoproto.moretags) = 'form:"device"'];
//分辨率
string scale = 5 [(gogoproto.moretags) = 'form:"scale"'];
//版本号
int64 build = 6 [(gogoproto.moretags) = 'form:"build"'];
}
// 换一换响应
message ChangeResp {
// 返回码
message List {
int64 roomid = 1 [(gogoproto.jsontag) = 'roomid'];
string title = 2 [(gogoproto.jsontag) = 'title'];
string uname = 3 [(gogoproto.jsontag) = 'uname'];
int64 online = 4 [(gogoproto.jsontag) = 'online'];
string cover = 5 [(gogoproto.jsontag) = 'cover'];
string link = 6 [(gogoproto.jsontag) = 'link'];
string face = 7 [(gogoproto.jsontag) = 'face'];
int64 area_v2_parent_id = 8 [(gogoproto.jsontag) = 'area_v2_parent_id'];
string area_v2_parent_name = 9 [(gogoproto.jsontag) = 'area_v2_parent_name'];
int64 area_v2_id = 10 [(gogoproto.jsontag) = 'area_v2_id'];
string area_v2_name = 11 [(gogoproto.jsontag) = 'area_v2_name'];
string play_url = 12 [(gogoproto.jsontag) = 'play_url,omitempty'];
string play_url_h265 = 13 [(gogoproto.jsontag) = 'play_url_h265,omitempty'];
int64 current_quality = 14 [(gogoproto.jsontag) = 'current_quality,omitempty'];
int64 broadcast_type = 15 [(gogoproto.jsontag) = 'broadcast_type'];
string pendent_ru = 16 [(gogoproto.jsontag) = 'pendent_ru'];
string pendent_ru_pic = 17 [(gogoproto.jsontag) = 'pendent_ru_pic'];
string pendent_ru_color = 18 [(gogoproto.jsontag) = 'pendent_ru_color'];
int64 rec_type = 19 [(gogoproto.jsontag) = 'rec_type'];
int64 pk_id = 20 [(gogoproto.jsontag) = 'pk_id'];
repeated int64 accept_quality = 21 [(gogoproto.jsontag) = 'accept_quality,omitempty'];
}
message ModuleInfo {
// 模块id
int64 id = 1 [(gogoproto.jsontag) = 'id'];
// 标题
string title = 2 [(gogoproto.jsontag) = 'title'];
// 图标
string pic = 3 [(gogoproto.jsontag) = 'pic'];
// list数据类型 1: banner 2: 导航栏 3: 运营推荐分区-标准 4: 运营推荐分区-方 5排行榜小时榜 6: 推荐主播-标准 7: 推荐主播-方 8:我的关注(用户相关) 9一级分区-标准 10一级分区-方 11: 活动卡片 12常用标签推荐入口(用户相关) 13常用标签推荐房间列表(用户相关) 14大航海提示入口
int64 type = 4 [(gogoproto.jsontag) = 'type'];
// 跳转链接
string link = 5 [(gogoproto.jsontag) = 'link'];
// 该模块数据总数
int64 count = 6 [(gogoproto.jsontag) = 'count'];
int64 is_sky_horse_gray = 7 [(gogoproto.jsontag) = 'is_sky_horse_gray'];
}
message ModuleList {
//
ModuleInfo module_info = 1 [(gogoproto.jsontag) = 'module_info'];
// 注意:可能是 PicList{id,pic,link,title}需要根据ModuleInfo里的type判断
repeated List list = 2 [(gogoproto.jsontag) = 'list'];
}
repeated ModuleList module_list = 1 [(gogoproto.jsontag) = 'module_list'];
}

View File

@@ -0,0 +1,73 @@
// Code generated by protoc-gen-bm v0.1, DO NOT EDIT.
// source: api/http/v1/relation.pb
/*
Package v1 is a generated blademaster stub package.
This code was generated with go-common/app/tool/bmgen/protoc-gen-bm v0.1.
It is generated from these files:
api/http/v1/relation.pb
*/
package v1
import (
"context"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/binding"
)
// to suppressed 'imported but not used warning'
var _ *bm.Context
var _ context.Context
var _ binding.StructValidator
// ==================
// Relation Interface
// ==================
// Index 相关服务
type Relation interface {
// [app端关注二级页][全量]正在直播接口
// `midware:"guest"`
LiveAnchor(ctx context.Context, req *LiveAnchorReq) (resp *LiveAnchorResp, err error)
// [app端关注二级页][分页]暂未开播接口
// `midware:"guest"`
UnliveAnchor(ctx context.Context, req *UnLiveAnchorReq) (resp *UnLiveAnchorResp, err error)
}
var v1RelationSvc Relation
// @params LiveAnchorReq
// @router GET /xlive/app-interface/v1/relation/liveAnchor
// @response LiveAnchorResp
func relationLiveAnchor(c *bm.Context) {
p := new(LiveAnchorReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v1RelationSvc.LiveAnchor(c, p)
c.JSON(resp, err)
}
// @params UnLiveAnchorReq
// @router GET /xlive/app-interface/v1/relation/unliveAnchor
// @response UnLiveAnchorResp
func relationUnliveAnchor(c *bm.Context) {
p := new(UnLiveAnchorReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v1RelationSvc.UnliveAnchor(c, p)
c.JSON(resp, err)
}
// RegisterV1RelationService Register the blademaster route with middleware map
// midMap is the middleware map, the key is defined in proto
func RegisterV1RelationService(e *bm.Engine, svc Relation, midMap map[string]bm.HandlerFunc) {
guest := midMap["guest"]
v1RelationSvc = svc
e.GET("/xlive/app-interface/v1/relation/liveAnchor", guest, relationLiveAnchor)
e.GET("/xlive/app-interface/v1/relation/unliveAnchor", guest, relationUnliveAnchor)
}

View File

@@ -0,0 +1,151 @@
## [app端关注二级页][全量]正在直播接口
`GET http://api.live.bilibili.com/xlive/app-interface/v1/relation/liveAnchor`
### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|buyaofangqizhiliao|否|string| 调试咒语
|
|platform|否|string| 平台
|
|device|否|string| 设备
|
|build|否|string| 版本号
|
|sortRule|否|integer| 排序类型
|
|filterRule|否|integer| 筛选类型
|
```json
{
"code": 0,
"message": "ok",
"data": {
"rooms": [
{
// 房间id
"roomid": 0,
// 用户id
"uid": 0,
// 用户昵称
"uname": "",
// 用户头像
"face": "",
// 直播间标题
"title": "",
// 直播间标签
"live_tag_name": "",
// 开始直播时间
"live_time": 0,
// 人气值
"online": 0,
// 秒开url
"playurl": "",
// 可选清晰度
"accept_quality": [
0
],
// 当前清晰度
"current_quality": 0,
// pk_id
"pk_id": 0,
// 特别关注标志
"special_attention": 0,
// 老的分区id
"area": 0,
// 老的分区名
"area_name": "",
// 子分区id
"area_v2_id": 0,
// 子分区名
"area_v2_name": "",
// 父分区名
"area_v2_parent_name": "",
// 父分区id
"area_v2_parent_id": 0,
// 广播适配标志
"broadcast_type": 0,
// 官方认证标志
"official_verify": 0,
// 直播间跳转链接
"link": "",
// 直播间封面
"cover": "",
// 角标文字
"pendent_ru": "",
// 角标颜色
"pendent_ru_color": "",
// 角标背景图
"pendent_ru_pic": ""
}
],
"total_count": 0,
"card_type": 0,
"big_card_type": 0
}
}
```
## [app端关注二级页][分页]暂未开播接口
`GET http://api.live.bilibili.com/xlive/app-interface/v1/relation/unliveAnchor`
### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|buyaofangqizhiliao|否|string| 调试咒语
|
|page|否|integer| 分页号
|
|pagesize|否|integer| 页大小
|
```json
{
"code": 0,
"message": "ok",
"data": {
"rooms": [
{
// 上次开播描述
"live_desc": "",
// 房间id
"roomid": 0,
// 用户id
"uid": 0,
// 用户昵称
"uname": "",
// 用户头像
"face": "",
// 特别关注标志
"special_attention": 0,
// 官方认证标志
"official_verify": 0,
// 直播状态标志
"live_status": 0,
// 广播适配标志
"broadcast_type": 0,
// 老的分区id
"area": 0,
// 粉丝数
"attentions": 0,
// 老的分区名
"area_name": "",
// 子分区id
"area_v2_id": 0,
// 子分区名
"area_v2_name": "",
// 父分区名
"area_v2_parent_name": "",
// 父分区id
"area_v2_parent_id": 0,
// 直播间跳转链接
"link": "",
// 房间页公告
"announcement_content": "",
// 房间页公告发布时间
"announcement_time": ""

View File

@@ -0,0 +1,157 @@
syntax = "proto3";
package live.appinterface.v1;
option go_package = "v1";
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
// Index 相关服务
service Relation {
// [app端关注二级页][全量]正在直播接口
// `midware:"guest"`
rpc liveAnchor (LiveAnchorReq) returns (LiveAnchorResp);
// [app端关注二级页][分页]暂未开播接口
// `midware:"guest"`
rpc unliveAnchor (UnLiveAnchorReq) returns (UnLiveAnchorResp);
}
// liveAnchor请求
message LiveAnchorReq {
// 调试咒语
string buyaofangqizhiliao = 1;
// 平台
string platform = 2;
// 设备
string device = 3;
// 版本号
string build = 4;
// 排序类型
int64 sortRule = 5;
// 筛选类型
int64 filterRule = 6;
// 清晰度
int64 quality = 7;
}
// liveAnchor响应
message LiveAnchorResp {
repeated Rooms rooms = 1;
message Rooms {
// 房间id
int64 roomid = 1;
// 用户id
int64 uid = 2;
// 用户昵称
string uname = 3;
// 用户头像
string face = 4;
// 直播间标题
string title = 5;
// 直播间标签
string live_tag_name = 6;
// 开始直播时间
int64 live_time = 7;
// 人气值
int64 online = 8;
// 秒开url
string playurl = 9;
// 可选清晰度
repeated int64 accept_quality = 10;
// 当前清晰度
int64 current_quality = 11;
// pk_id
int64 pk_id = 12;
// 特别关注标志
int64 special_attention = 13;
// 老的分区id
int64 area = 14;
// 老的分区名
string area_name = 15;
// 子分区id
int64 area_v2_id = 16;
// 子分区名
string area_v2_name = 17;
// 父分区名
string area_v2_parent_name = 18;
// 父分区id
int64 area_v2_parent_id = 19;
// 广播适配标志
int64 broadcast_type = 20;
// 官方认证标志
int64 official_verify = 21;
// 直播间跳转链接
string link = 22;
// 直播间封面
string cover = 23;
// 角标文字
string pendent_ru = 24;
// 角标颜色
string pendent_ru_color = 25;
// 角标背景图
string pendent_ru_pic = 26;
string play_url_h265 = 27;
}
int64 total_count = 2;
int64 card_type = 3;
int64 big_card_type = 4;
}
// unLiveAnchor请求
message UnLiveAnchorReq {
// 调试咒语
string buyaofangqizhiliao = 1;
// 分页号
int64 page = 2;
// 页大小
int64 pagesize = 3;
}
// unLiveAnchor响应
message UnLiveAnchorResp {
repeated Rooms rooms = 1;
message Rooms {
// 上次开播描述
string live_desc = 1;
// 房间id
int64 roomid = 2;
// 用户id
int64 uid = 3;
// 用户昵称
string uname = 4;
// 用户头像
string face = 5;
// 特别关注标志
int64 special_attention = 6;
// 官方认证标志
int64 official_verify = 7;
// 直播状态标志
int64 live_status = 8;
// 广播适配标志
int64 broadcast_type = 9;
// 老的分区id
int64 area = 10;
// 粉丝数
int64 attentions = 11;
// 老的分区名
string area_name = 12;
// 子分区id
int64 area_v2_id = 13;
// 子分区名
string area_v2_name = 14;
// 父分区名
string area_v2_parent_name = 15;
// 父分区id
int64 area_v2_parent_id = 16;
// 直播间跳转链接
string link = 17;
// 房间页公告
string announcement_content = 18;
// 房间页公告发布时间
string announcement_time = 19;
}
int64 total_count = 2;
int64 no_room_count = 3;
int64 has_more = 4;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,153 @@
## [app端关注二级页][全量]正在直播接口
`GET http://api.live.bilibili.com/xlive/app-interface/v1/relation/liveAnchor`
### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|buyaofangqizhiliao|否|string| 调试咒语
|
|platform|否|string| 平台
|
|device|否|string| 设备
|
|build|否|string| 版本号
|
|sortRule|否|integer| 排序类型
|
|filterRule|否|integer| 筛选类型
|
|quality|否|integer| 清晰度
|
```json
{
"code": 0,
"message": "ok",
"data": {
"rooms": [
{
// 房间id
"roomid": 0,
// 用户id
"uid": 0,
// 用户昵称
"uname": "",
// 用户头像
"face": "",
// 直播间标题
"title": "",
// 直播间标签
"live_tag_name": "",
// 开始直播时间
"live_time": 0,
// 人气值
"online": 0,
// 秒开url
"playurl": "",
// 可选清晰度
"accept_quality": [
0
],
// 当前清晰度
"current_quality": 0,
// pk_id
"pk_id": 0,
// 特别关注标志
"special_attention": 0,
// 老的分区id
"area": 0,
// 老的分区名
"area_name": "",
// 子分区id
"area_v2_id": 0,
// 子分区名
"area_v2_name": "",
// 父分区名
"area_v2_parent_name": "",
// 父分区id
"area_v2_parent_id": 0,
// 广播适配标志
"broadcast_type": 0,
// 官方认证标志
"official_verify": 0,
// 直播间跳转链接
"link": "",
// 直播间封面
"cover": "",
// 角标文字
"pendent_ru": "",
// 角标颜色
"pendent_ru_color": "",
// 角标背景图
"pendent_ru_pic": "",
"play_url_h265": ""
}
],
"total_count": 0,
"card_type": 0,
"big_card_type": 0
}
}
```
## [app端关注二级页][分页]暂未开播接口
`GET http://api.live.bilibili.com/xlive/app-interface/v1/relation/unliveAnchor`
### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|buyaofangqizhiliao|否|string| 调试咒语
|
|page|否|integer| 分页号
|
|pagesize|否|integer| 页大小
|
```json
{
"code": 0,
"message": "ok",
"data": {
"rooms": [
{
// 上次开播描述
"live_desc": "",
// 房间id
"roomid": 0,
// 用户id
"uid": 0,
// 用户昵称
"uname": "",
// 用户头像
"face": "",
// 特别关注标志
"special_attention": 0,
// 官方认证标志
"official_verify": 0,
// 直播状态标志
"live_status": 0,
// 广播适配标志
"broadcast_type": 0,
// 老的分区id
"area": 0,
// 粉丝数
"attentions": 0,
// 老的分区名
"area_name": "",
// 子分区id
"area_v2_id": 0,
// 子分区名
"area_v2_name": "",
// 父分区名
"area_v2_parent_name": "",
// 父分区id
"area_v2_parent_id": 0,
// 直播间跳转链接
"link": "",
// 房间页公告
"announcement_content": "",
// 房间页公告发布时间