V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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 · 2016-08-04 20:51:03 +08:00 · 7618 次点击
    这是一个创建于 3036 天前的主题,其中的信息可能已经有所发展或是发生改变。

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