
废话不多,先上演示代码, py2 与 py3 及全平台支持。
源代码见这里,欢迎 Star 与 Fork 。
import time, sys from danmu import DanMuClient def pp(msg): print(msg.encode(sys.stdin.encoding, 'ignore'). decode(sys.stdin.encoding)) dmc = DanMuClient('http://www.douyu.com/lslalala') if not dmc.isValid(): print('Url not valid') @dmc.danmu def danmu_fn(msg): pp('[%s] %s' % (msg['NickName'], msg['Content'])) @dmc.gift def gift_fn(msg): pp('[%s] sent a gift!' % content['NickName']) @dmc.other def other_fn(msg): pp('Other message received') dmc.start(blockThread = True) danmu 是一个开源的直播平台弹幕接口,使用他没什么基础的你也可以轻松的操作各平台弹幕。
使用不到三十行代码,你就可以使用 Python 基于弹幕进一步开发。
支持斗鱼、熊猫、战旗、全民多平台弹幕。
支持各版本 Python ,无平台依赖,方便各类开发者、爱好者使用。
一次开启,主播上线自动连接,下线后上线自动重连。
经过深度优化,几乎不漏过任何一条弹幕;使用抽象构架,方便修改与开发。
可以通过本命令安装 danmu :
pip install danmu 
你可以在这里获取使用帮助。
消息被分为三种类型注册: danmu, gift, other
分别对应:普通弹幕,礼物消息,其他消息
如果某种类型没有注册过,将会使用默认方法,默认方法的注册方式如下:
from danmu import DanMuClient dmc = DanMuClient('http://www.douyu.com/lslalala') @dmc.default def default_fn(msg): pp('[%s] %s' % (msg['NickName'], msg['Content'])) 通过以下方式可以取消某一种类型的注册。
from danmu import DanMuClient dmc = DanMuClient('http://www.douyu.com/lslalala') dmc.default(None) dmc.gift(None) 如果有什么问题或者建议都可以在这个Issue和我讨论
1 shakespaces Aug 4, 2016 做的真好,已 star |
2 NxnXgpuPSfsIT OP @shakespaces 谢谢你的鼓励! |
3 Yinz Aug 4, 2016 写得很棒!正巧我最近也在对弹幕下手 XD 已经抓了 1 千多万条 B 站的弹幕了 XD |
4 a2ex Aug 4, 2016 lalala |
5 GreatMartial Aug 4, 2016 额,看过楼主写的文章。 想问一下,获取弹幕有什么用处呢? |
6 NxnXgpuPSfsIT OP @Yinz 谢谢!新版本我把 bilibili 也加进去了:) |
7 NxnXgpuPSfsIT OP @GreatMartial 能明说的比如弹幕互动、抓素材,不能明说的比如协议号? |
8 cxyfreedom Aug 4, 2016 看过好多次 LZ 的干货,都很不错,学习学习:) |
9 devzero Aug 5, 2016 via Android 没想到不用第三方包也行,之前用 aiohttp ,来看看 |
10 ETiV Aug 5, 2016 ……回头可以整理一份抓直播站视频流的技巧了…… |
11 scnace Aug 5, 2016 via Android star 了 有空玩 |
12 SlipStupig Aug 5, 2016 @Yinz 请教一下,抓取这多弹幕有什么作用啊! |
13 tempdban Aug 5, 2016 via Android @NxnXgpuPSfsIT 你看我眼熟不 |
14 Tink PRO 我很早之前好像看到过楼主写的一个 c 版本的? |
15 willike Aug 5, 2016 start, 周末玩下. |
16 zsx Aug 5, 2016 哎这个不错,我过几天研究一下怎么和我的系统集成 |
17 clockwerk Aug 5, 2016 其实还是挺有用的,比如根据一些视频弹幕频次算出最近流行语流行词,根据弹幕来分析那些热门主播用户群习性 当然最重要的是现在可以根据弹幕内容看 ti6 的文字直播咯, thx 楼主 |
18 zsx Aug 5, 2016 @GreatMartial 我这里有一套在大型会场 LED 使用弹幕的解决方案,这样的话开直播后可以把 B 站的弹幕一并同步到 LED 上,互动蛮不错的 |
19 clockwerk Aug 5, 2016 |
20 fxxkgw Aug 5, 2016 这个工具意义是什么呢? 弹幕可以通过斗鱼助手这种东西抓取保存成 ass 文件的。。 |
22 NxnXgpuPSfsIT OP @tempdban 哈哈,必须的! |
23 NxnXgpuPSfsIT OP @Tink 没有啦,那个应该不是我的 |
24 NxnXgpuPSfsIT OP |
25 fxxkgw Aug 5, 2016 @NxnXgpuPSfsIT LZ 你好 如果直播间未开播 是不是就抓不到弹幕? |
26 hwwh1999 Aug 5, 2016 真是好! 抓取用户登录消息,发送欢迎字符.或者自己要说话怎么弄? |
27 Garantion Aug 5, 2016 强 无敌! |
28 21grams Aug 5, 2016 via Android 百分之八十都是 666 吧 |
29 clockwerk Aug 5, 2016 pip list 没问题 里面有 danmu(1.02) ```bash (ENV)20152015:Desktop wn$ python -c "from danmu import DanMuClient" Traceback (most recent call last): File "<string>", line 1, in <module> File "/Users/wn/Desktop/danmu.py", line 4, in <module> from danmu import DanMuClient ImportError: cannot import name 'DanMuClient' ``` |
30 VicYu Aug 5, 2016 代码非常整洁,思路清楚,学习了 |
31 NxnXgpuPSfsIT OP @nellace 你把主文件的名字改一下,主文件名不能和第三方包名重复 |
32 xiahei Aug 5, 2016 一大早就被 pythontrending 盯上了, star 了一波,很赞! |
34 ma125125t Aug 5, 2016 使用 pip install danmu ,报安装错误 Exception: Traceback (most recent call last): File "/Library/Python/2.7/site-packages/pip-7.1.0-py2.7.egg/pip/basecommand.py", line 223, in main status = self.run(options, args) 改用 python3 和 pip3 后可以正常安装, python3 demo.py 后无任何反应 不熟悉 python ,感觉是 python2 , 3 之间的问题。麻烦指点一二 |
35 NxnXgpuPSfsIT OP @ma125125t pip 的话升级一下 pip 吧 另外,现在啦啦啦不在直播,肯定没有弹幕的,是不是这个问题? |
36 ma125125t Aug 5, 2016 @NxnXgpuPSfsIT 我改到 TI 的链接了,仍旧是没有任何反应。。 Url not valid 也没出现。 pip list 里没有 danmu , pip3 list 里有 danmu 。 pip 升级了,我感觉不是 pip 的问题。 |
37 NxnXgpuPSfsIT OP @ma125125t 可以报个 issue ,把代码贴一下,我试着看看是什么问题 pip 安装的问题的话是 pip 里面的东西报错,可以就报错作为关键词做一个搜索 |
38 ma125125t Aug 5, 2016 @NxnXgpuPSfsIT 等了一段时间后报错 fangs-mac:danmu fang$ python3 a.py ^CTraceback (most recent call last): File "a.py", line 24, in <module> dmc.start(blockThread = True) File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/danmu/__init__.py", line 55, in start self.__client.start() File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/danmu/Abstract.py", line 29, in start time.sleep(self.anchorStatusRescanTime) KeyboardInterrupt |
39 IMRES Aug 5, 2016 很棒 |
40 Shura Aug 5, 2016 加上一个过滤功能就好了,好多无聊的弹幕 |
41 wojiaodaxiaxia Aug 5, 2016 可以可以 谢楼楼一个 |
42 creaer Aug 12, 2016 你好,为什么示例代码不能运行了 |
43 NxnXgpuPSfsIT OP |