部分 bilibili API SDK,大致定了个框架,挑着用得到的 API 先实现了
API 接口信息大多来自 bilibili-API-collect 项目,B站官方代码结构和接口也是可以参考一下的
已实现的接口信息可以参考 godoc:
引用:go get -u github.com/reveever/biliapi.
获取用户投稿
package main import ( "encoding/json" "fmt" "github.com/reveever/biliapi" "github.com/reveever/biliapi/interface/space" ) func main() { api, err := biliapi.NewBiliApi(biliapi.WithUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0")) if err != nil { panic(err) } resp, err := api.Space.ArcList(space.ArcListOpt{ Mid: 67141, Pn: 1, Ps: 5, }) if err != nil { panic(err) } buf, _ := json.Marshal(resp) fmt.Println(string(buf)) }
获取视频弹幕分片
package main import ( "encoding/json" "fmt" "github.com/reveever/biliapi" "github.com/reveever/biliapi/interface/v2dm" ) func main() { api, err := biliapi.NewBiliApi(biliapi.EnableDebugLogger()) if err != nil { panic(err) } resp, err := api.V2Dm.WebSeg(v2dm.WebSegOpt{ Type: 1, Oid: 343721233, SegmentIndex: 2, }) if err != nil { panic(err) } buf, _ := json.Marshal(resp) fmt.Println(string(buf)) }
直播间信息流获取
package main import ( "context" "io" "log" "github.com/reveever/biliapi" "github.com/reveever/biliapi/interface/live" "github.com/reveever/biliapi/interface/room" ) func main() { api, err := biliapi.NewBiliApi(biliapi.EnableDebugLogger()) if err != nil { log.Fatal(err) } roomInfo, err := api.Room.RoomInitInfo(room.RoomInitInfoOpt{ID: 213}) if err != nil { log.Fatal(err) } liveInfo, err := api.Live.WebRoomInfo(live.WebRoomInfoOpt{ID: roomInfo.RoomID}) if err != nil { log.Fatal(err) } l, err := biliapi.NewBiliLive(context.Background(), roomInfo.RoomID, liveInfo.Token, biliapi.LiveWithBase(api.Base), biliapi.LiveWithHostList(liveInfo.HostList), ) if err != nil { log.Fatal(err) } for i := 0; i < 10; i++ { msg, err := l.ReadWsMsg(context.TODO()) if err != nil { if err == io.EOF { log.Println("EOF") break } log.Printf("[%02d] err: %v", i, err) continue } if msg.Op == live.WsOpHeartbeatReply { log.Printf("[%02d] %d %d %s: %x", i, msg.Ver, msg.Op, msg.Cmd, msg.Body) } else { log.Printf("[%02d] %d %d %s: %s", i, msg.Ver, msg.Op, msg.Cmd, string(msg.Body)) } } l.Close() }