推荐学习书目
› 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
V2EX  ›  Python

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

  •  
  •   NxnXgpuPSfsIT ·
    littlecodersh · Aug 4, 2016 · 8806 views
    This topic created in 3747 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
    shakespaces
    Aug 4, 2016
    1
    做的真好,已 star
    NxnXgpuPSfsIT
    NxnXgpuPSfsIT
    OP
    Aug 4, 2016
    2
    @shakespaces 谢谢你的鼓励!
    Yinz
    Yinz
    Aug 4, 2016
    3
    写得很棒!正巧我最近也在对弹幕下手 XD 已经抓了 1 千多万条 B 站的弹幕了 XD
    a2ex
    a2ex
    Aug 4, 2016
    4
    lalala
    GreatMartial
    GreatMartial
    Aug 4, 2016
    5
    额,看过楼主写的文章。
    想问一下,获取弹幕有什么用处呢?
    NxnXgpuPSfsIT
    NxnXgpuPSfsIT
    OP
    Aug 4, 2016
    6
    @Yinz 谢谢!新版本我把 bilibili 也加进去了:)
    NxnXgpuPSfsIT
    NxnXgpuPSfsIT
    OP
    Aug 4, 2016
    7
    @GreatMartial
    能明说的比如弹幕互动、抓素材,不能明说的比如协议号?
    cxyfreedom
    cxyfreedom
    Aug 4, 2016
    8
    看过好多次 LZ 的干货,都很不错,学习学习:)
    devzero
    devzero
    Aug 5, 2016 via Android
    9
    没想到不用第三方包也行,之前用 aiohttp ,来看看
    ETiV
    ETiV
    Aug 5, 2016
    10
    ……回头可以整理一份抓直播站视频流的技巧了……
    scnace
    scnace
    Aug 5, 2016 via Android
    11
    star 了 有空玩
    SlipStupig
    SlipStupig
    Aug 5, 2016
    12
    @Yinz 请教一下,抓取这多弹幕有什么作用啊!
    tempdban
    tempdban
    Aug 5, 2016 via Android
    13
    @NxnXgpuPSfsIT 你看我眼熟不
    Tink
    Tink
    Aug 5, 2016 via iPhone
    14
    我很早之前好像看到过楼主写的一个 c 版本的?
    willike
    willike
    Aug 5, 2016
    15
    start, 周末玩下.
    zsx
    zsx
    Aug 5, 2016
    16
    哎这个不错,我过几天研究一下怎么和我的系统集成
    clockwerk
    clockwerk
    Aug 5, 2016
    17
    其实还是挺有用的,比如根据一些视频弹幕频次算出最近流行语流行词,根据弹幕来分析那些热门主播用户群习性
    当然最重要的是现在可以根据弹幕内容看 ti6 的文字直播咯, thx 楼主
    zsx
    zsx
    Aug 5, 2016
    18
    @GreatMartial
    我这里有一套在大型会场 LED 使用弹幕的解决方案,这样的话开直播后可以把 B 站的弹幕一并同步到 LED 上,互动蛮不错的
    clockwerk
    clockwerk
    Aug 5, 2016
    19
    python3
    pip install danmu 后写了一个 model.py ,内容就是 demo 里面内容
    报 cannot import name 'DanMuClient'不知道怎么回事
    fxxkgw
    fxxkgw
    Aug 5, 2016
    20
    这个工具意义是什么呢? 弹幕可以通过斗鱼助手这种东西抓取保存成 ass 文件的。。
    fxxkgw
    fxxkgw
    Aug 5, 2016
    21
    @fxxkgw LZ 我理解错了 抱歉!
    NxnXgpuPSfsIT
    NxnXgpuPSfsIT
    OP
    Aug 5, 2016
    22
    @tempdban 哈哈,必须的!
    NxnXgpuPSfsIT
    NxnXgpuPSfsIT
    OP
    Aug 5, 2016
    23
    @Tink 没有啦,那个应该不是我的
    NxnXgpuPSfsIT
    NxnXgpuPSfsIT
    OP
    Aug 5, 2016
    24
    @nellace 试一下这两个操作
    1. pip list 看一下有没有安装好
    2. python -c "from danmu import DanMuClient"这个命令会有问题吗?
    fxxkgw
    fxxkgw
    Aug 5, 2016
    25
    @NxnXgpuPSfsIT LZ 你好 如果直播间未开播 是不是就抓不到弹幕?
    hwwh1999
    hwwh1999
    Aug 5, 2016
    26
    真是好! 抓取用户登录消息,发送欢迎字符.或者自己要说话怎么弄?
    Garantion
    Garantion
    Aug 5, 2016
    27
    强 无敌!
    21grams
    21grams
    Aug 5, 2016 via Android
    28
    百分之八十都是 666 吧
    clockwerk
    clockwerk
    Aug 5, 2016
    29
    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
    VicYu
    Aug 5, 2016
    30
    代码非常整洁,思路清楚,学习了
    NxnXgpuPSfsIT
    NxnXgpuPSfsIT
    OP
    Aug 5, 2016
    31
    @nellace 你把主文件的名字改一下,主文件名不能和第三方包名重复
    xiahei
    xiahei
    Aug 5, 2016
    32
    一大早就被 pythontrending 盯上了, star 了一波,很赞!
    clockwerk
    clockwerk
    Aug 5, 2016
    33
    @nellace 我的天 蠢了蠢了,真的是这个问题, thx 楼主
    ma125125t
    ma125125t
    Aug 5, 2016
    34
    使用 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
    NxnXgpuPSfsIT
    OP
    Aug 5, 2016
    35
    @ma125125t pip 的话升级一下 pip 吧
    另外,现在啦啦啦不在直播,肯定没有弹幕的,是不是这个问题?
    ma125125t
    ma125125t
    Aug 5, 2016
    36
    @NxnXgpuPSfsIT 我改到 TI 的链接了,仍旧是没有任何反应。。 Url not valid 也没出现。
    pip list 里没有 danmu , pip3 list 里有 danmu 。 pip 升级了,我感觉不是 pip 的问题。
    NxnXgpuPSfsIT
    NxnXgpuPSfsIT
    OP
    Aug 5, 2016 via Android
    37
    @ma125125t 可以报个 issue ,把代码贴一下,我试着看看是什么问题
    pip 安装的问题的话是 pip 里面的东西报错,可以就报错作为关键词做一个搜索
    ma125125t
    ma125125t
    Aug 5, 2016
    38
    @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
    IMRES
    Aug 5, 2016
    39
    很棒
    Shura
    Shura
    Aug 5, 2016
    40
    加上一个过滤功能就好了,好多无聊的弹幕
    wojiaodaxiaxia
    wojiaodaxiaxia
    Aug 5, 2016
    41
    可以可以 谢楼楼一个
    creaer
    creaer
    Aug 12, 2016
    42
    你好,为什么示例代码不能运行了
    NxnXgpuPSfsIT
    NxnXgpuPSfsIT
    OP
    Aug 12, 2016
    43
    @creaer 我这里可以的
    请检查测试的主播是否在直播,不在的话没有弹幕是正常的情况。
    建议提问的时候带上不能运行的具体报错。
    GoTop
    GoTop
    Sep 5, 2016
    44
    @Yinz 抓那么多来有什么用?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   881 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 23:49 · PVG 07:49 · LAX 15:49 · JFK 18:49
    ♥ Do have faith in what you're doing.