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查看

211 条评论

点击这里取消回复。

昵称
  1. json formatter

    这也行?

  2. bluecity

    (๑•̀ㅁ•́ฅ)

  3. 灭天会盾迷

    这个腻害,技术改变生活(滑稽)

  4. pathC

    程序执行出现
    Hello, 用户名!
    Get RoomId Failed

    1. liwanglin12

      @pathC 文章里写了已经失效了啊……

    2. pathC

      @liwanglin12 可是手动填cookies上个月还ok啊,今天我发现cookies失效后重新导入就不行了

    3. pathC

      @pathC 手动填入room id后成功运行

  5. 小名

    好姿势|´・ω・)ノ

  6. xd

    用的交易3.6,交易bilibili-live.py出错了,到底是用什么姿势打开QAQ

    1. drscrewdriver

      @xd 源代码一般没问题吧。。。把pyc缓存删了看看?

  7. Pingback: Bilibili 直播挂机脚本 - 秋名山の纸飞机

  8. 凯哥自媒体

    分享的不错,谢谢

  9. 超人欧巴

    还能玩吗?

    1. liwanglin12

      @超人欧巴 手动配cookies可以

  10. 咚咚咚ゞゞ

    已经没得玩儿了对吧!

    1. liwanglin12
    2. 萨摩公园

      @liwanglin12 手动 Cookie 继续撑……

    3. 沈大师

      @萨摩公园 求教怎么手动cookie?

    4. 萨摩公园

      @沈大师 登录 B 站后,按 F12,在 console 里输入 document.cookie 即可获取

    5. 沈大师

      @萨摩公园 感谢回复,但f12的那种cookie的格式和源码的MozillaCookieJar生成的完全不一样啊,需要用什么特定浏览器么?试了chrome和火狐生成的都不是那种啊

  11. S.A 突袭

    云打吗我记得要钱吧

    1. latelan

      @S.A 突袭 按照这个cookie过期时间,充5元挡半年以上吧

    2. S.A 突袭

      @latelan 不错,,,,

  12. gngd

    Login Failed: {“code”:-101,”msg”:”请先登录”,”data”:[]}

    1. 沈大师

      @gngd 好像是现在登陆新增了验证码的缘故

    2. gngd

      @latelan 难道我的姿势不对。。。

    3. gngd

      @latelan 把交易环境升到2.7.10,出现这个怎么破_(:3」∠)_

    4. gngd

      @gngd 已解决,氪金就好了。。。_(:3」∠)_

    5. liwanglin12

      @沈大师 对……没法修

  13. 沈大师

    失效了啊。登陆不上去了

  14. plume

    好像登陆要验证码了吧

  15. BIRD

    貌似失效了啊?我现在总是提示login faild

  16. 音乐视频解析站

    没有服务器咋弄

    1. 萨摩公园

      @音乐视频解析站 可以来用我的,有 PHP 空间就行了(逃

  17. 晓沉

    Get RoomId Failed

  18. 卢松松博客

    有创意