blivedm/sample.py

92 lines
2.8 KiB
Python
Raw Normal View History

2018-05-13 21:57:36 +08:00
# -*- coding: utf-8 -*-
2019-02-20 00:25:14 +08:00
import asyncio
import random
2019-06-06 21:50:51 +08:00
import blivedm
# 直播间ID的取值看直播间URL
TEST_ROOM_IDS = [
12235923,
14327465,
21396545,
21449083,
23105590,
]
2021-12-12 21:54:07 +08:00
async def main():
await run_single_client()
await run_multi_client()
async def run_single_client():
"""
演示监听一个直播间
"""
room_id = random.choice(TEST_ROOM_IDS)
2021-12-12 21:54:07 +08:00
# 如果SSL验证失败就把ssl设为FalseB站真的有过忘续证书的情况
client = blivedm.BLiveClient(room_id, ssl=True)
2021-12-13 00:07:00 +08:00
handler = MyHandler()
client.add_handler(handler)
2021-12-15 00:09:07 +08:00
client.start()
2021-12-12 21:54:07 +08:00
try:
# 演示5秒后停止
await asyncio.sleep(5)
client.stop()
2021-12-12 21:54:07 +08:00
2021-12-15 00:09:07 +08:00
await client.join()
2021-12-12 21:54:07 +08:00
finally:
await client.stop_and_close()
2021-12-12 21:54:07 +08:00
async def run_multi_client():
"""
演示同时监听多个直播间
"""
clients = [blivedm.BLiveClient(room_id) for room_id in TEST_ROOM_IDS]
handler = MyHandler()
for client in clients:
client.add_handler(handler)
client.start()
try:
await asyncio.gather(*(
client.join() for client in clients
))
finally:
await asyncio.gather(*(
client.stop_and_close() for client in clients
))
class MyHandler(blivedm.BaseHandler):
# # 演示如何添加自定义回调
# _CMD_CALLBACK_DICT = blivedm.BaseHandler._CMD_CALLBACK_DICT.copy()
#
# # 入场消息回调
# async def __interact_word_callback(self, client: blivedm.BLiveClient, command: dict):
# print(f"[{client.room_id}] INTERACT_WORD: self_type={type(self).__name__}, room_id={client.room_id},"
# f" uname={command['data']['uname']}")
# _CMD_CALLBACK_DICT['INTERACT_WORD'] = __interact_word_callback # noqa
2019-06-06 21:50:51 +08:00
2021-12-15 00:09:07 +08:00
async def _on_heartbeat(self, client: blivedm.BLiveClient, message: blivedm.HeartbeatMessage):
print(f'[{client.room_id}] 当前人气值:{message.popularity}')
2021-12-13 00:07:00 +08:00
async def _on_danmaku(self, client: blivedm.BLiveClient, message: blivedm.DanmakuMessage):
print(f'[{client.room_id}] {message.uname}{message.msg}')
2019-06-06 21:50:51 +08:00
2021-12-13 00:07:00 +08:00
async def _on_gift(self, client: blivedm.BLiveClient, message: blivedm.GiftMessage):
print(f'[{client.room_id}] {message.uname} 赠送{message.gift_name}x{message.num}'
f' {message.coin_type}瓜子x{message.total_coin}')
2019-03-23 23:58:02 +08:00
2021-12-13 00:07:00 +08:00
async def _on_buy_guard(self, client: blivedm.BLiveClient, message: blivedm.GuardBuyMessage):
print(f'[{client.room_id}] {message.username} 购买{message.gift_name}')
2021-12-13 00:07:00 +08:00
async def _on_super_chat(self, client: blivedm.BLiveClient, message: blivedm.SuperChatMessage):
print(f'[{client.room_id}] 醒目留言 ¥{message.price} {message.uname}{message.message}')
2019-09-23 21:43:37 +08:00
2018-05-13 21:57:36 +08:00
if __name__ == '__main__':
2019-06-06 21:50:51 +08:00
asyncio.get_event_loop().run_until_complete(main())