废话不多,先上演示代码, 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和我讨论
|  |      1shakespaces      2016-08-04 21:01:33 +08:00 做的真好,已 star | 
|  |      2NxnXgpuPSfsIT OP @shakespaces 谢谢你的鼓励! | 
|  |      3Yinz      2016-08-04 21:25:51 +08:00 写得很棒!正巧我最近也在对弹幕下手 XD 已经抓了 1 千多万条 B 站的弹幕了 XD | 
|      4a2ex      2016-08-04 21:33:50 +08:00 lalala | 
|  |      5GreatMartial      2016-08-04 22:01:40 +08:00 额,看过楼主写的文章。   想问一下,获取弹幕有什么用处呢? | 
|  |      6NxnXgpuPSfsIT OP @Yinz 谢谢!新版本我把 bilibili 也加进去了:) | 
|  |      7NxnXgpuPSfsIT OP @GreatMartial  能明说的比如弹幕互动、抓素材,不能明说的比如协议号? | 
|  |      8cxyfreedom      2016-08-04 22:30:50 +08:00 看过好多次 LZ 的干货,都很不错,学习学习:) | 
|      9devzero      2016-08-05 00:19:20 +08:00 via Android 没想到不用第三方包也行,之前用 aiohttp ,来看看 | 
|  |      10ETiV      2016-08-05 02:46:54 +08:00 ……回头可以整理一份抓直播站视频流的技巧了…… | 
|      11scnace      2016-08-05 06:33:57 +08:00 via Android star 了 有空玩 | 
|  |      12SlipStupig      2016-08-05 07:38:56 +08:00 @Yinz 请教一下,抓取这多弹幕有什么作用啊! | 
|      13tempdban      2016-08-05 08:04:06 +08:00 via Android @NxnXgpuPSfsIT 你看我眼熟不 | 
|  |      14Tink PRO 我很早之前好像看到过楼主写的一个 c 版本的? | 
|  |      15willike      2016-08-05 09:06:22 +08:00 start, 周末玩下. | 
|  |      16zsx      2016-08-05 09:07:23 +08:00 哎这个不错,我过几天研究一下怎么和我的系统集成 | 
|  |      17nellace      2016-08-05 09:10:56 +08:00 其实还是挺有用的,比如根据一些视频弹幕频次算出最近流行语流行词,根据弹幕来分析那些热门主播用户群习性 当然最重要的是现在可以根据弹幕内容看 ti6 的文字直播咯, thx 楼主 | 
|  |      18zsx      2016-08-05 09:12:42 +08:00 @GreatMartial  我这里有一套在大型会场 LED 使用弹幕的解决方案,这样的话开直播后可以把 B 站的弹幕一并同步到 LED 上,互动蛮不错的 | 
|  |      19nellace      2016-08-05 09:58:17 +08:00 | 
|  |      20fxxkgw      2016-08-05 10:07:45 +08:00 这个工具意义是什么呢? 弹幕可以通过斗鱼助手这种东西抓取保存成 ass 文件的。。 | 
|  |      22NxnXgpuPSfsIT OP @tempdban 哈哈,必须的! | 
|  |      23NxnXgpuPSfsIT OP @Tink 没有啦,那个应该不是我的 | 
|  |      24NxnXgpuPSfsIT OP | 
|  |      25fxxkgw      2016-08-05 11:01:44 +08:00 @NxnXgpuPSfsIT LZ 你好 如果直播间未开播 是不是就抓不到弹幕? | 
|      26hwwh1999      2016-08-05 11:04:30 +08:00 真是好! 抓取用户登录消息,发送欢迎字符.或者自己要说话怎么弄? | 
|  |      27Garantion      2016-08-05 11:08:06 +08:00 强 无敌! | 
|  |      2821grams      2016-08-05 11:11:19 +08:00 via Android 百分之八十都是 666 吧 | 
|  |      29nellace      2016-08-05 11:21:21 +08:00 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' ``` | 
|      30VicYu      2016-08-05 11:43:19 +08:00 代码非常整洁,思路清楚,学习了 | 
|  |      31NxnXgpuPSfsIT OP @nellace 你把主文件的名字改一下,主文件名不能和第三方包名重复 | 
|  |      32xiahei      2016-08-05 13:09:10 +08:00 一大早就被 pythontrending 盯上了, star 了一波,很赞! | 
|      34ma125125t      2016-08-05 13:44:44 +08:00 使用 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 之间的问题。麻烦指点一二 | 
|  |      35NxnXgpuPSfsIT OP @ma125125t pip 的话升级一下 pip 吧 另外,现在啦啦啦不在直播,肯定没有弹幕的,是不是这个问题? | 
|      36ma125125t      2016-08-05 14:00:14 +08:00 @NxnXgpuPSfsIT 我改到 TI 的链接了,仍旧是没有任何反应。。 Url not valid 也没出现。 pip list 里没有 danmu , pip3 list 里有 danmu 。 pip 升级了,我感觉不是 pip 的问题。 | 
|  |      37NxnXgpuPSfsIT OP @ma125125t 可以报个 issue ,把代码贴一下,我试着看看是什么问题 pip 安装的问题的话是 pip 里面的东西报错,可以就报错作为关键词做一个搜索 | 
|      38ma125125t      2016-08-05 14:16:35 +08:00 @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 | 
|  |      39IMRES      2016-08-05 14:32:34 +08:00 很棒 | 
|  |      40Shura      2016-08-05 14:47:22 +08:00 加上一个过滤功能就好了,好多无聊的弹幕 | 
|  |      41wojiaodaxiaxia      2016-08-05 23:02:51 +08:00 可以可以 谢楼楼一个 | 
|      42creaer      2016-08-12 11:04:40 +08:00 你好,为什么示例代码不能运行了 | 
|  |      43NxnXgpuPSfsIT OP |