Bilibili Live 闷声发大财

用途

自动向B站服务器发送心跳包,让服务器以为你一直在看直播从而实现24h挂机涨经验

食用方法

  1. 保存源代码为bilive.py并上传至服务器(当然你愿意在自己电脑上挂我也管不着)
  2. ssh输入crontab -e ,加入*/5 * * * * python 存放路径/bilive.py  > 存放路径/blive.log
  3. Enjoy!(Log保留最后一次的输出,如有问题请及时将log拷出回复我~)
  4. 服务器挂机用户建议将userid = raw_input()和pwd = raw_input()直接修改成你的用户名密码,防止cookie过期

此代码由于 Bilibili 验证码机制已失效,如需使用请尝试 METO 大佬的世界上最好的语言版本

源代码

#coding=UTF-8
import urllib
import urllib2
import cookielib
import json
import sys
import os
import re
import datetime
import time
reload(sys)
sys.setdefaultencoding('utf-8')
COOKIE_FILE = 'BILIVE_COOKIES_DATA'
def login(COOKIE_FILE):
    cookie = cookielib.MozillaCookieJar(COOKIE_FILE)
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))  
    response = opener.open('https://passport.bilibili.com/ajax/miniLogin/minilogin')
    print'Please input your bilibili Username:'
    userid = raw_input()
    print'Please input your bilibili Password:'
    pwd = raw_input()
    postdata = urllib.urlencode({
                'keep':'0',  
                'captcha':'',
                'userid':userid,
                'pwd':pwd
            })    
    loginUrl = 'https://passport.bilibili.com/ajax/miniLogin/login' 
    response = opener.open(loginUrl,postdata)
    liveUrl = 'http://live.bilibili.com/User/getUserInfo' 
    result = opener.open(liveUrl)
    cookie.save(ignore_discard=True, ignore_expires=True)
    return opener
def check_login(opener):
    liveUrl = 'http://live.bilibili.com/User/getUserInfo' 
    result = opener.open(liveUrl)
    result = result.read()
    s = json.loads(result)
    if s["code"] == "REPONSE_OK":
        return s
    else:
        print'Login Failed: ' + result.decode('unicode_escape')
        os.remove(COOKIE_FILE)
        time.sleep(3)
        exit()
def heart(opener):
    postdata = ''
    heartUrl = 'http://live.bilibili.com/User/userOnlineHeart'
    roomId = get_room_id(opener)
    refererHeader = 'http://live.bilibili.com/' + roomId
    opener.addheaders = [('Referer', refererHeader)]
    result = opener.open(heartUrl,postdata)
    result = result.read()
    return result

def get_room_id(opener):
    liveUrl = 'http://live.bilibili.com/'
    result = opener.open(liveUrl)
    result = result.read()
    res = re.search(r'data-roomid="(\d+)"', result)
    if res:
        return res.group(1)
    else:
        print'Get RoomId Failed'
        exit()

cookie = cookielib.MozillaCookieJar(COOKIE_FILE)   
if not os.path.exists(COOKIE_FILE):
    opener = login(COOKIE_FILE)
else:
    cookie.load(COOKIE_FILE, ignore_discard=True, ignore_expires=True)
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

s = check_login(opener)
print'Hello, '+s["data"]["uname"]+'!'
upr = str(s["data"]['user_next_intimacy'] - s["data"]['user_intimacy'])
result = heart(opener)
h = json.loads(result)
if h["code"] != 0:
    for x in xrange(1,6):
        print "Heart Status: Error, Retrying......("+ str(x) +")"
        if x != 5:
            time.sleep(2)
        else:
            time.sleep(10)
        result = heart(opener)
        h = json.loads(result)
        if h["code"] != 0:
            continue
        else:
            print 'Live Level: '+ str(s["data"]['user_level']) +'\nUpgrade requires: '+ upr +'\nLevel Rank: '+ str(s["data"]['user_level_rank']) +'\nHeart Status: Successful\nHeart Time: ' + time.strftime("%Y-%m-%d %H:%M:%S") + '\nDebug:'+ result.decode('unicode_escape')
            time.sleep(3)
            exit()
    print 'Live Level: '+ str(s["data"]['user_level']) +'\nUpgrade requires: '+ upr +'\nLevel Rank: '+ str(s["data"]['user_level_rank']) +'\nHeart Status: Error\nHeart Time: ' + time.strftime("%Y-%m-%d %H:%M:%S") + '\nDebug:'+ result.decode('unicode_escape')
else:
    print 'Live Level: '+ str(s["data"]['user_level']) +'\nUpgrade requires: '+ upr +'\nLevel Rank: '+ str(s["data"]['user_level_rank']) +'\nHeart Status: Successful\nHeart Time: ' + time.strftime("%Y-%m-%d %H:%M:%S") + '\nDebug:'+ result.decode('unicode_escape')

感谢 @latelan 为代码添加伪造 Referer 功能

经验计算方式

每5分钟可以获得3000点经验(B站活动期间可能更高)

关于特色图像

前往Y2B查看

210 条评论

昵称
  1. 寻鹿

    Hello, M1990_!Heart Status: Error, Retrying……(1)Heart Status: Error, Retrying……(2)Heart Status: Error, Retrying……(3)Heart Status: Error, Retrying……(4)Heart Status: Error, Retrying……(5)Live Level: 22Upgrade requires: 6563625Level Rank: >50000Heart Status: ErrorHeart Time: 2016-09-07 00:27:50Debug:{“code”:-403,”msg”:”非法心跳”,”data”:[1473179270,1473179069]}

    1. 寻鹿

      @寻鹿 去WEB端看了看直播就又OK了Live Level: 22Upgrade requires: 6563625Level Rank: >50000Heart Status: SuccessfulHeart Time: 2016-09-07 00:29:25Debug:{“code”:0,”msg”:””,”data”:[]}

    2. liwanglin12

      @寻鹿 这是因为你提交太快了。。5分钟发一次是有道理的╮(╯_╰)╭

  2. Lawrence_小霜

    Heart Status: ErrorHeart Time: 2016-08-31 19:46:26Debug:{“code”:-403,”msg”:”非法心跳”,”data”:[1472643987,1472643902]}应该是 bilibili 改了心跳监测了

    1. Lawrence_小霜

      @Lawrence_小霜 去 web 看了一次直播就好了 = =

    2. liwanglin12

      @Lawrence_小霜 怎么今天来反馈的人这么多。。。我现在是正常的

    3. latelan

      @liwanglin12 经测试,每6分钟请求一次更合一点

    4. liwanglin12

      @latelan 5分钟是标准时间,重试策略亦保障了其可用性。如您需要6分钟间隔,请检查环境问题

    5. latelan

      @liwanglin12 5分钟的时候会有大量的重试,网络请求数会增加,改成6分钟会减少不少重试

    6. liwanglin12

      @latelan 你的服务器连最多6次HTTP请求都受限那我也没啥好说的了。。

  3. BIRD

    (接上条回复)原来是首页改版了,获取房间ID的这一句 res = re.search(r’data-room-id=”(d+)”‘, result)改成 res = re.search(r’data-roomid=”(d+)”‘, result)就行了= =

    1. liwanglin12

      @BIRD 感谢反馈!

  4. BIRD

    Traceback (most recent call last): File “bililive.py”, line 75, in print’Hello, ‘+s[“data”][“uname”]+’!’UnicodeEncodeError: ‘ascii’ codec can’t encode character u’u70b9′ in position 10: ordinal not in range(128)

    1. BIRD

      @BIRD 还有log里是Get RoomId Failed

  5. gngd

    运行出现这个是什么错误_(:з」∠)_

    1. Zohar

      @gngd 权限有问题,不过这么玩OpenShift真的好么QWQ

    2. gngd

      @Zohar 可是没见有root账户一个脚本应该不会很严重吧,至少没有搭梯子跑流量…(;¬_¬)

    3. liwanglin12

      @gngd 请加 sudoPermission Denied 权限不足

    4. gngd

      @liwanglin12 加了还是不足_(:з」∠)_

    5. liwanglin12

      @gngd 这我就不知道了(换服试试

    6. Re双鱼

      @gngd 先cd到目录再执行即可_(:з」∠)_

    7. gngd

      @Re双鱼 原来是这样,谢谢!

  6. 浅调月光

    咦,看不懂_(:з」∠)_。。。

  7. backhome

    Traceback (most recent call last): File “bilive.py”, line 69, in opener = login(COOKIE_FILE) File “bilive.py”, line 17, in login response = opener.open(‘https://passport.bilibili.com/ajax/miniLogin/minilogin‘) File “/usr/local/lib/python2.7/urllib2.py”, line 394, in open response = self._open(req, data) File “/usr/local/lib/python2.7/urllib2.py”, line 417, in _open ‘unknown_open’, req) File “/usr/local/lib/python2.7/urllib2.py”, line 372, in _call_chain result = func(*args) File “/usr/local/lib/python2.7/urllib2.py”, line 1232, in unknown_open raise URLError(‘unknown url type: %s’ % type)urllib2.URLError: 这个怎么回事

  8. 啊啊

    Login:SuccLive Level: 8Upgrade requires: 68000Level Rank: >1000000Heart Status: SuccessfulHeart Time: 2016-07-21 09:45:01但是经验没涨啊。。

    1. liwanglin12

      @啊啊 你就不能不把debug信息砍掉么。。。

    2. latelan

      @啊啊 加了Referer检查,需要带一个直播间地址的Referer,https://github.com/latelan/bilive

    3. liwanglin12

      @latelan 奇怪为什么我还是successful状态

    4. liwanglin12

      @latelan 好吧,你是对的。。感谢反馈~

  9. 李名哲

    有什么用?简单的说。小白路过

  10. 土木坛子

    这好技术的东西说。

    1. liwanglin12

      @土木坛子 并没有啦(。。。。坛子来回访好开心~

  11. m1990

    [[email protected] ~]# cat blive.log Hello, 人走胖次留下!Heart Status: Error, Retrying……(1)Heart Status: Error, Retrying……(2)Heart Status: Error, Retrying……(3)Heart Status: Error, Retrying……(4)Heart Status: Error, Retrying……(5)Live Level: 7Upgrade requires: 92525Level Rank: >1000000Heart Status: SuccessfulHeart Time: 2016-06-15 13:10:20Debug:{“code”:0,”msg”:””,”data”:[]}

    1. liwanglin12

      @m1990 这个是成功了啊。。Heart Status: Successful

    2. 寻鹿

      @liwanglin12 话说 又出非法心跳了Hello, M1990_!Heart Status: Error, Retrying……(1)Heart Status: Error, Retrying……(2)Heart Status: Error, Retrying……(3)Heart Status: Error, Retrying……(4)Heart Status: Error, Retrying……(5)Live Level: 16Upgrade requires: 584725Level Rank: 334792Heart Status: ErrorHeart Time: 2016-06-26 01:35:19Debug:{“code”:-403,”msg”:”非法心跳”,”data”:[]}

    3. liwanglin12

      @寻鹿 我这正常

  12. Eric

    为啥生成的log里面只有请输入用户名这一行…手工执行明明没问题的…

    1. 埃德维尔托leon-hardt

      @Eric 路径问题吧?默认是相对路径,可能运行路径是用户主目录而没有在这个目录运行过,没有cookies文件,手动点ide的时候是在存放目录

    2. Eric

      @埃德维尔托leon-hardt 已解决,谢谢

    3. liwanglin12

      @Eric 怎么解决的呢

  13. 埃德维尔托leon-hardt

    话说,你觉得python能b站自动签到吗?

  14. 埃德维尔托leon-hardt

    好吧,把.py里的路径改了重设就行吗,我果然该好好学习将来apply for professor

  15. 埃德维尔托leon-hardt

    用户目录是正常的 切到子文件夹就badRequestTraceback (most recent call last): File “bilive.py”, line 63, in s = check_login(opener) File “bilive.py”, line 39, in check_login result = opener.open(liveUrl) File “/usr/lib/python2.7/urllib2.py”, line 437, in open response = meth(req, response) File “/usr/lib/python2.7/urllib2.py”, line 550, in http_response ‘http’, request, response, code, msg, hdrs) File “/usr/lib/python2.7/urllib2.py”, line 475, in error return self._call_chain(*args) File “/usr/lib/python2.7/urllib2.py”, line 409, in _call_chain result = func(*args) File “/usr/lib/python2.7/urllib2.py”, line 558, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)urllib2.HTTPError: HTTP Error 400: Bad Request

    1. liwanglin12

      @埃德维尔托leon-hardt 其实这算是我的锅,没处理HTTP异常的情况←_←

    2. 埃德维尔托leon-hardt

      @liwanglin12 我也有锅,你这个cookie不是一段时间会过期吗,现在我发现之前是把win10上的给直接复制了,可能debian下的库跟win不一样结果语法结构错乱了

    3. liwanglin12

      @埃德维尔托leon-hardt 也有可能诶。。。唔,我是py萌新(>▽<)

  16. 经典老宋

    Debug:{“code”:-403,”msg”:”非法心跳”,”data”:[]}

    1. 经典老宋

      @经典老宋 啊。。看到之前的回复了。。。

    2. liwanglin12

      @经典老宋 诶?我代码已经修正了啊,还报这个?

    3. 经典老宋

      @liwanglin12 没事我自己的问题。。

  17. wyf

    crontab -e 命令完全不会用。。求解

  18. wyf

    6666666666

  19. 埃德维尔托leon-hardt

    有意思,一台旧xp上无论如何都是Login Failed: {“code”:-101,”msg”:”请先登录”,”data”:[]},新机器上就是好的233

    1. liwanglin12

      @埃德维尔托leon-hardt 。。。检查下cookies获取情况

  20. 宅急送队长

    测试

  21. 1354092549

    似乎不能再Python3下运行,差评

    1. liwanglin12

      @1354092549 ←_←没有py3交易环境啊

  22. themebetter

    喜欢标题后几个字“闷声发大财”[嘻嘻]

    1. liwanglin12
    2. liwanglin12

      @themebetter 你的评论被多说标记为辣鸡了,刚刚才看到放出来

  23. 1024阳仔特工队

    nas里运行后显示code -403,msg非法心跳data[]

    1. 1024阳仔特工队

      @1024阳仔特工队 就是这样

    2. 1024阳仔特工队
    3. liwanglin12

      @1024阳仔特工队 5分钟后再开,b站限制5分钟能发一次包。。。。

    4. 1024阳仔特工队

      @liwanglin12 行我再试试

    5. 1024阳仔特工队

      @liwanglin12 话说如果局域网内这个账号处在登陆状态下,是不是也会造成失败。。。。。

    6. liwanglin12

      @1024阳仔特工队 你在看直播的话直播页面会五分钟自动发一次

    7. 1024阳仔特工队

      @liwanglin12 这样的哈,我懂了,谢啦

  24. zscself

    请问?这个评论头像会转的插件是什么

    1. liwanglin12

      @zscself 这只是多说自定义CSS而已呐~

  25. CancerGary

    嗯……你需要requests库……

    1. liwanglin12

      @CancerGary 妈蛋这库又不是默认库。。另外为啥要用这个?

    2. CancerGary

      @liwanglin12 因为好用(其实是受够了urllib的蛋疼

  26. 这个经验都能干嘛用

  27. Grodon

    提示如下怎么办?账号密码直接写在里面了,确定没有错,使用EditPlus编辑的文件,包里的两个文件都放上去了
    Login Failed: {“code”:-101,”msg”:”请先登录”,”data”:[]}

    1. liwanglin12

      @Grodon 写?我设计的是你首次运行会提示你输账号密码的啊。。你直接改源码了还是怎么。。另外包里只有py文件有用,另一个是PGP签名文件,防篡改的

    2. Gordon

      @liwanglin12 我是直接将里面的userid = raw_input()和pwd = raw_input()这两行直接赋值了,不使用raw_input()函数,直接就是userid = ‘账号’和pwd=’密码’这样的形式。这样我就可以直接丢计划任务里面什么都不用做了,前两天这样做的时候放在虚拟机里面运行还是可以的,然后我复制到VPS里面就不行了,系统都是centOS,然后刚刚我也打开了以前运行正常的虚拟机直接使用python 命令运行也是一样的错误了

    3. liwanglin12

      @Gordon 改回去然后删掉同目录下BILIVECOOKIES文件试试

    4. Gordon

      @liwanglin12 依然不行,我重新下载你提供的压缩包后解压.py文件直接上传到VPS,然后执行python bilive.py确认正确输入账号密码之后依然还是这个错误。这次只传了bilive.py单文件

    5. liwanglin12

      @Gordon 不用vps或者换个ip呢。。再这样你方便的话我连你vps看看好了

    6. Gordon

      @liwanglin12 好的,请发个邮件给我我回复你VPS账号密码

    7. liwanglin12

      @Gordon o(≧口≦)o可是咱不知道你邮箱啊,我的about页有我的邮箱你可以去找

    8. Gordon

      @liwanglin12 亲,你关于页面的邮箱点击是错误的

    9. liwanglin12

      @Gordon 呀,修好喽~

    10. CC

      @Grodon Login Failed: {“code”:-101,”msg”:”请先登录”,”data”:[]}
      我也是这个错误,是不能用了吗?

    11. liwanglin12

      @CC 可是我自己还能用啊。。。。

    12. liwanglin12

      @CC 代码已更新,重新下载即可使用~

    13. liwanglin12

      @Grodon 代码已更新,重新下载即可使用~

    14. CC

      @liwanglin12 谢谢,我是改成了用lpwcookiejar登录成功的,请问是表单提交的链接修改了吗?

    15. liwanglin12

      @CC 是~

  28. 悖论

    博主6666.。。。

  29. 那一片冰冷

    xp的怎么用啊QAQ

  30. 纳尼亚

    纯白,怎么用啊QAQ