不熬夜,不修仙,B站打怪升级脚本一键搞定!

441633d37eefa0decb1aca3851f0d7a4.png

文 | 某某白米饭

来源:Python 技术「ID: pythonall」

cd193a83c6ee0cb11cbd59c97a59af7c.png

在 B 站上看了进击的金厂长的投稿的视频如:B 界等级修仙传,B 界等级修魔传等,觉得 B 站升级对小编这种白嫖党 + 懒癌党太不友好了,就码了这篇 B 站升级脚本。

获取个人信息

用自己的账号登录到 B 站并打开个人页面,按 F12 控制面板。可以找到一个 https://api.bilibili.com/x/space/myinfo?jsonp=jsonp&callback=__jp0 的地址,从相应的返回值来看,这就是个人资料的请求地址。并且把请求头中的 cookie 复制到代码中,让我们可以正常用代码登录 B 站。

acc1d67b5140b2a21726fce9b8f1ed69.png

这里的 cookie 是一串字符串,在 requests.get() 请求的时候肯定是要转换为字典类型的。其中一个 bili_jct 比较关键,在后续操作中将被用到。

def convert_cookies_to_dict(cookies):
    cookies = dict([l.split("=", 1) for l in cookies.split("; ")])
    return cookies

下面代码就用上面转换成字典的 cookie 获取 B 站的个人资料。

def getInfo(cookie):
    url = "http://api.bilibili.com/x/space/myinfo"

    
    resp = requests.get(url, cookies=cookie).text
    myinfo = json.loads(resp)

    data = myinfo['data']
    mid = data['mid']
    name = data['name']
    level_exp = data['level_exp']
    current_level = level_exp['current_exp']
    current_exp = level_exp['current_exp']
    next_exp = level_exp['next_exp']
    sub_exp = int(next_exp) - int(current_exp)
    days = int(int(sub_exp)/70)
    coin = data['coins']
    print("{},你的等级是{},当前经验是{},下一级经验是{},还需要{}天升级,有{}个硬币".format(name, current_level,current_exp,next_exp,days,coin))

观看视频

因为小编实在是不想解析页面,就在网上找了一个 B 站的 http://api.bilibili.cn/recommend 接口来获取视频地址。返回值是一个 json 串,这里面有 aid 和 bvid。

def getVideo(cookie):
    url = "http://api.bilibili.cn/recommend"

    resp = requests.get(url, cookies=cookie).text
    data = json.loads(resp)
    
    list_length = len(data['list'])
    result = []
    for i in range(list_length):
        bvid = data['list'][i]['bvid']
        aid = data['list'][i]['aid']
        result.append({'bvid': bvid, 'aid': aid})
    return result

获取到 aid 和 bvid 后,打开播放视频页面会有发送心跳链接到服务器,这个应该可以看做是看过视频的。

440413de9627f5881c73d7f3eecad486.png
def view(bvid, aid, bili_jct, playedTime):
    url = "https://api.bilibili.com/x/click-interface/web/heartbeat"
    header = {
        "origin": "https://www.bilibili.com",
        "referer": "https://www.bilibili.com/video/"+bvid,
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36",
        "cookie": cookies

    }
    data = {
        'aid': aid,
        'bvid': bvid,
        'played_time': playedTime,
        'csrf': bili_jct
    }
    resp = requests.post(url, data = data ,headers=header).text
    json_data = json.loads(resp)
    code = json_data['code']
    time.sleep()
    if code == 0:
        print('视频观看成功,bvid 号为:' + bvid)
    else:
        print('视频观看失败,bvid 号为:' + bvid)

投币

投币比较简单,只有 4 个参数,但是每天就只能投 5 个币,得 50 经验。

e753ec44e6a2ac4b61b1427948cb3927.png
def coin(bvid, aid, csrf):
    
    url = "https://api.bilibili.com/x/web-interface/coin/add"
    data = {
        'aid': aid,
        'multiply': 1,
        'select_like': 1,
        'cross_domain': 'true',
        'csrf': csrf
    }
    header = {
        "origin": "https://www.bilibili.com",
        "referer": "https://www.bilibili.com/video/"+bvid,
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36",
        "cookie": cookies

    }

    resp = requests.post(url, headers=header, data=data).text
    data = json.loads(resp)
    code = data['code']
    if code == 0:
        print("投币成功")
    else:
        print('投币失败')

分享视频

在分享到动态的时候,可以看到有一个 share 的地址,然后小编就用这个试了好几次都没有成功,只能求助万能的 github。

66d52655d9d9342e8f820a38bebad3d9.png

上面这个地址没成功,都是分享失败,下面的截图是 github 的,分享成功。

41aab8182ac088439cc32898f47a77bb.png
def share( bvid, csrf):
    url = 'https://api.bilibili.com/x/web-interface/share/add'
    data = {
        'csrf': csrf,
        'bvid': bvid
    }
    header = {
        'content-type': 'application/x-www-form-urlencoded;charset=UTF-8',
        "Connection": "keep-alive",
        "origin": "https://t.bilibili.com",
        "referer": 'https://t.bilibili.com',
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36",
        "cookie": cookies

    }
    resp = requests.post(url, data=data, headers=header).text
    json_data = json.loads(resp)
    code = json_data['code']
    if code == 0:
        print('视频分享成功')
    else:
        print('视频分享失败')

总结

python 小脚本总能在想不到的地方有意外的惊喜。人生苦短,认为本文还可以的朋友点个赞和再看。

PS:公号内回复「Python」即可进入Python 新手学习交流群,一起 100 天计划!

老规矩,兄弟们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!

0c103a41a854541053f87f3e89e8c786.gif

代码获取方式

识别文末二维码,回复:某某白米饭

e8354c4693f1ed89cec04d87ccc385f2.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值