有了 danmu,二十行代码轻松愉快对弹幕进行二次开发 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
NxnXgpuPSfsIT

有了 danmu,二十行代码轻松愉快对弹幕进行二次开发

  •  a href="Javascript:" Onclick="downVoteTopic(297196);" class="vote">
  •   NxnXgpuPSfsIT
    littlecodersh Aug 4, 2016 8339 views
    This topic created in 3555 days ago, the information mentioned may be changed or developed.

    废话不多,先上演示代码, 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 ,无平台依赖,方便各类开发者、爱好者使用。

    一次开启,主播上线自动连接,下线后上线自动重连。

    经过深度优化,几乎不漏过任何一条弹幕;使用抽象构架,方便修改与开发。

    Installation

    可以通过本命令安装 danmu :

    pip install danmu 

    Screenshot

    Documents

    你可以在这里获取使用帮助。

    Advanced uses

    设置默认的消息处理方式

    消息被分为三种类型注册: 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) 

    Comments

    如果有什么问题或者建议都可以在这个Issue和我讨论

    或者也可以在 gitter 上交流:gitter

    44 replies    2016-09-05 08:40:26 +08:00
    shakespaces
        1
    shakespaces  
       Aug 4, 2016
    做的真好,已 star
    NxnXgpuPSfsIT
        2
    NxnXgpuPSfsIT  
    OP
       Aug 4, 2016
    @shakespaces 谢谢你的鼓励!
    Yinz
        3
    Yinz  
       Aug 4, 2016
    写得很棒!正巧我最近也在对弹幕下手 XD 已经抓了 1 千多万条 B 站的弹幕了 XD
    a2ex
        4
    a2ex  
       Aug 4, 2016
    lalala
    GreatMartial
        5
    GreatMartial  
       Aug 4, 2016
    额,看过楼主写的文章。
    想问一下,获取弹幕有什么用处呢?
    NxnXgpuPSfsIT
        6
    NxnXgpuPSfsIT  
    OP
       Aug 4, 2016
    @Yinz 谢谢!新版本我把 bilibili 也加进去了:)
    NxnXgpuPSfsIT
        7
    NxnXgpuPSfsIT  
    OP
       Aug 4, 2016
    @GreatMartial
    能明说的比如弹幕互动、抓素材,不能明说的比如协议号?
    cxyfreedom
        8
    cxyfreedom  
       Aug 4, 2016
    看过好多次 LZ 的干货,都很不错,学习学习:)
    devzero
        9
    devzero  
       Aug 5, 2016 via Android
    没想到不用第三方包也行,之前用 aiohttp ,来看看
    ETiV
        10
    ETiV  
       Aug 5, 2016
    ……回头可以整理一份抓直播站视频流的技巧了……
    scnace
        11
    scnace  
       Aug 5, 2016 via Android
    star 了 有空玩
    SlipStupig
        12
    SlipStupig  
       Aug 5, 2016
    @Yinz 请教一下,抓取这多弹幕有什么作用啊!
    tempdban
        13
    tempdban  
       Aug 5, 2016 via Android
    @NxnXgpuPSfsIT 你看我眼熟不
    Tink
        14
    Tink  
    PRO
       Aug 5, 2016 via iPhone
    我很早之前好像看到过楼主写的一个 c 版本的?
    willike
        15
    willike  
       Aug 5, 2016
    start, 周末玩下.
    zsx
        16
    zsx  
       Aug 5, 2016
    哎这个不错,我过几天研究一下怎么和我的系统集成
    clockwerk
        17
    clockwerk  
       Aug 5, 2016
    其实还是挺有用的,比如根据一些视频弹幕频次算出最近流行语流行词,根据弹幕来分析那些热门主播用户群习性
    当然最重要的是现在可以根据弹幕内容看 ti6 的文字直播咯, thx 楼主
    zsx
        18
    zsx  
       Aug 5, 2016
    @GreatMartial
    我这里有一套在大型会场 LED 使用弹幕的解决方案,这样的话开直播后可以把 B 站的弹幕一并同步到 LED 上,互动蛮不错的
    clockwerk
        19
    clockwerk  
       Aug 5, 2016
    python3
    pip install danmu 后写了一个 model.py ,内容就是 demo 里面内容
    报 cannot import name 'DanMuClient'不知道怎么回事
    fxxkgw
        20
    fxxkgw  
       Aug 5, 2016
    这个工具意义是什么呢? 弹幕可以通过斗鱼助手这种东西抓取保存成 ass 文件的。。
    fxxkgw
        21
    fxxkgw  
       Aug 5, 2016
    @fxxkgw LZ 我理解错了 抱歉!
    NxnXgpuPSfsIT
        22
    NxnXgpuPSfsIT  
    OP
       Aug 5, 2016
    @tempdban 哈哈,必须的!
    NxnXgpuPSfsIT
        23
    NxnXgpuPSfsIT  
    OP
       Aug 5, 2016
    @Tink 没有啦,那个应该不是我的
    NxnXgpuPSfsIT
        24
    NxnXgpuPSfsIT  
    OP
       Aug 5, 2016
    @nellace 试一下这两个操作
    1. pip list 看一下有没有安装好
    2. python -c "from danmu import DanMuClient"这个命令会有问题吗?
    fxxkgw
        25
    fxxkgw  
       Aug 5, 2016
    @NxnXgpuPSfsIT LZ 你好 如果直播间未开播 是不是就抓不到弹幕?
    hwwh1999
        26
    hwwh1999  
       Aug 5, 2016
    真是好! 抓取用户登录消息,发送欢迎字符.或者自己要说话怎么弄?
    Garantion
        27
    Garantion  
       Aug 5, 2016
    强 无敌!
    21grams
        28
    21grams  
       Aug 5, 2016 via Android
    百分之八十都是 666 吧
    clockwerk
        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'
    ```
    VicYu
        30
    VicYu  
       Aug 5, 2016
    代码非常整洁,思路清楚,学习了
    NxnXgpuPSfsIT
        31
    NxnXgpuPSfsIT  
    OP
       Aug 5, 2016
    @nellace 你把主文件的名字改一下,主文件名不能和第三方包名重复
    xiahei
        32
    xiahei  
       Aug 5, 2016
    一大早就被 pythontrending 盯上了, star 了一波,很赞!
    clockwerk
        33
    clockwerk  
       Aug 5, 2016
    @nellace 我的天 蠢了蠢了,真的是这个问题, thx 楼主
    ma125125t
        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 之间的问题。麻烦指点一二
    NxnXgpuPSfsIT
        35
    NxnXgpuPSfsIT  
    OP
       Aug 5, 2016
    @ma125125t pip 的话升级一下 pip 吧
    另外,现在啦啦啦不在直播,肯定没有弹幕的,是不是这个问题?
    ma125125t
        36
    ma125125t  
       Aug 5, 2016
    @NxnXgpuPSfsIT 我改到 TI 的链接了,仍旧是没有任何反应。。 Url not valid 也没出现。
    pip list 里没有 danmu , pip3 list 里有 danmu 。 pip 升级了,我感觉不是 pip 的问题。
    NxnXgpuPSfsIT
        37
    NxnXgpuPSfsIT  
    OP
       Aug 5, 2016 via Android
    @ma125125t 可以报个 issue ,把代码贴一下,我试着看看是什么问题
    pip 安装的问题的话是 pip 里面的东西报错,可以就报错作为关键词做一个搜索
    ma125125t
        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
    IMRES
        39
    IMRES  
       Aug 5, 2016
    很棒
    Shura
        40
    Shura  
       Aug 5, 2016
    加上一个过滤功能就好了,好多无聊的弹幕
    wojiaodaxiaxia
        41
    wojiaodaxiaxia  
       Aug 5, 2016
    可以可以 谢楼楼一个
    creaer
        42
    creaer  
       Aug 12, 2016
    你好,为什么示例代码不能运行了
    NxnXgpuPSfsIT
        43
    NxnXgpuPSfsIT  
    OP
       Aug 12, 2016
    @creaer 我这里可以的
    请检查测试的主播是否在直播,不在的话没有弹幕是正常的情况。
    建议提问的时候带上不能运行的具体报错。
    GoTop
        44
    GoTop  
       Sep 5, 2016
    @Yinz 抓那么多来有什么用?
    About     Help     Advertise     Blog     API     FAQ     Solana     1037 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 83ms UTC 22:31 PVG 06:31 LAX 15:31 JFK 18:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86