biliapi

package module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 23, 2022 License: MIT Imports: 11 Imported by: 0

README

biliapi

Go Reference

部分 bilibili API SDK,大致定了个框架,挑着用得到的 API 先实现了

API 接口信息大多来自 bilibili-API-collect 项目,B站官方代码结构和接口也是可以参考一下的

已实现的接口信息可以参考 godoc:

Example

引用: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()
}

Doc & More examples

godoc

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func EnableDebugLogger

func EnableDebugLogger() func(*BiliAPI)

func LiveEnableDebugLogger added in v0.2.0

func LiveEnableDebugLogger() func(*live.Config)

func LiveNoSecure added in v0.2.0

func LiveNoSecure() func(*live.Config)

func LiveReadHeartbeatReply added in v0.2.0

func LiveReadHeartbeatReply() func(*live.Config)

func LiveSetHeader added in v0.2.0

func LiveSetHeader(h http.Header) func(*live.Config)

func LiveSetHeartBeatInterval added in v0.2.0

func LiveSetHeartBeatInterval(d time.Duration) func(*live.Config)

func LiveSetQueueCapacity added in v0.2.0

func LiveSetQueueCapacity(l int) func(*live.Config)

func LiveWithAuthInfo added in v0.2.0

func LiveWithAuthInfo(v live.UserAuth) func(*live.Config)

func LiveWithBase added in v0.2.0

func LiveWithBase(b *base.Base) func(*live.Config)

func LiveWithCookieJar added in v0.2.0

func LiveWithCookieJar(j http.CookieJar) func(*live.Config)

func LiveWithDebugLogger added in v0.2.0

func LiveWithDebugLogger(l base.BaseLogger) func(*live.Config)

func LiveWithHostList added in v0.2.0

func LiveWithHostList(v []live.LiveHost) func(*live.Config)

func LiveWithWsDialer added in v0.2.0

func LiveWithWsDialer(d *websocket.Dialer) func(*live.Config)

func WithDebugLogger

func WithDebugLogger(l base.BaseLogger) func(*BiliAPI)

func WithHttpClient

func WithHttpClient(c *http.Client) func(*BiliAPI)

func WithUserAgent

func WithUserAgent(ua string) func(*BiliAPI)

Types

type BiliAPI

type BiliAPI struct {
	Base  *base.Base
	Space *space.API
	V2Dm  *v2dm.API
	Live  *live.API
	Room  *room.API
}

func NewBiliApi

func NewBiliApi(options ...func(*BiliAPI)) (*BiliAPI, error)

type BiliLive added in v0.2.0

type BiliLive struct {
	*live.Live
}

func NewBiliLive added in v0.2.0

func NewBiliLive(ctx context.Context, roomID int64, token string, options ...func(*live.Config)) (*BiliLive, error)

Directories

Path Synopsis
interface
proto
dm

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL