用途
自动向B站服务器发送心跳包,让服务器以为你一直在看直播从而实现24h挂机涨经验
食用方法
- 保存源代码为bilive.py并上传至服务器(当然你愿意在自己电脑上挂我也管不着)
- ssh输入crontab -e ,加入*/5 * * * * python 存放路径/bilive.py > 存放路径/blive.log
- Enjoy!(Log保留最后一次的输出,如有问题请及时将log拷出回复我~)
- 服务器挂机用户建议将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站活动期间可能更高)
这也行?
(๑•̀ㅁ•́ฅ)
这个腻害,技术改变生活(滑稽)
程序执行出现
Hello, 用户名!
Get RoomId Failed
@pathC 文章里写了已经失效了啊……
@liwanglin12 可是手动填cookies上个月还ok啊,今天我发现cookies失效后重新导入就不行了
@pathC 手动填入room id后成功运行
好姿势|´・ω・)ノ
用的交易3.6,交易bilibili-live.py出错了,到底是用什么姿势打开QAQ
@xd 源代码一般没问题吧。。。把pyc缓存删了看看?
Pingback: Bilibili 直播挂机脚本 - 秋名山の纸飞机
分享的不错,谢谢
还能玩吗?
@超人欧巴 手动配cookies可以
已经没得玩儿了对吧!
@咚咚咚ゞゞ 对!
@liwanglin12 手动 Cookie 继续撑……
@萨摩公园
求教怎么手动cookie?
@沈大师 登录 B 站后,按 F12,在 console 里输入 document.cookie 即可获取
@萨摩公园
感谢回复,但f12的那种cookie的格式和源码的MozillaCookieJar生成的完全不一样啊,需要用什么特定浏览器么?试了chrome和火狐生成的都不是那种啊
云打吗我记得要钱吧
@S.A 突袭 按照这个cookie过期时间,充5元挡半年以上吧
@latelan 不错,,,,
Login Failed: {“code”:-101,”msg”:”请先登录”,”data”:[]}
@gngd 好像是现在登陆新增了验证码的缘故
@沈大师 改版了,https://github.com/latelan/bilive
@latelan
难道我的姿势不对。。。
@gngd 你的python版本应该小于2.7.9http://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
@latelan
把交易环境升到2.7.10,出现这个怎么破_(:3」∠)_
@gngd 已解决,氪金就好了。。。_(:3」∠)_
@沈大师 对……没法修
失效了啊。登陆不上去了
好像登陆要验证码了吧
貌似失效了啊?我现在总是提示login faild
没有服务器咋弄
@音乐视频解析站 可以来用我的,有 PHP 空间就行了(逃
Get RoomId Failed
有创意