package rpc import ( "context" "encoding/json" "fmt" "github.com/furryboard/spider-core/biliapi" "github.com/furryboard/spider-core/rpc/pb" "github.com/mitchellh/mapstructure" "google.golang.org/grpc" "google.golang.org/grpc/reflection" ) type Service struct { pb.UnimplementedBiliAPIServer } // GetUserStat 用户统计信息 func (s *Service) GetUserStat(ctx context.Context, req *pb.StatRequest) (*pb.StatReply, error) { body, err := biliapi.UserStat(uint(req.Uid)) if err != nil { return &pb.StatReply{ Code: 400, Msg: err.Error(), Data: nil, }, err } bodyObj := biliapi.Root{} err = json.Unmarshal(body, &bodyObj) if err != nil { return &pb.StatReply{ Code: 400, Msg: err.Error(), Data: nil, }, err } if bodyObj.Code != 0 { fmt.Println("bad request: " + bodyObj.Message) return &pb.StatReply{ Code: int32(bodyObj.Code), Msg: bodyObj.Message, Data: nil, }, err } data := &biliapi.StatData{} err = mapstructure.Decode(bodyObj.Data, data) if err != nil { return &pb.StatReply{ Code: 500, Msg: err.Error(), Data: nil, }, err } statData := pb.StatReply_Data{ Mid: data.Mid, Following: data.Following, Whisper: data.Whisper, Black: data.Black, Follower: data.Follower, } return &pb.StatReply{ Code: 200, Msg: "", Data: &statData, }, nil } // GetUserBasicInfo 用户基础信息 func (s *Service) GetUserBasicInfo(ctx context.Context, req *pb.InfoRequest) (*pb.InfoReply, error) { body, err := biliapi.BasicInfo(uint(req.Uid)) bodyObj := biliapi.Root{} err = json.Unmarshal(body, &bodyObj) if err != nil { fmt.Println("bad request: " + err.Error()) return &pb.InfoReply{ Code: 400, Msg: err.Error(), Data: nil, }, err } if bodyObj.Code != 0 { fmt.Println("bad request: " + bodyObj.Message) return &pb.InfoReply{ Code: int32(bodyObj.Code), Msg: bodyObj.Message, Data: nil, }, err } // interface映射到结构体 data := &pb.InfoReply_Data{} err = mapstructure.Decode(bodyObj.Data, data) if err != nil { return &pb.InfoReply{ Code: 500, Msg: err.Error(), Data: nil, }, err } return &pb.InfoReply{ Code: 200, Msg: "", Data: data, }, nil } func RegisterServices(s *grpc.Server) { pb.RegisterBiliAPIServer(s, &Service{}) reflection.Register(s) }