囧囧囧囧 发表于 2021-12-6 10:56

哔哩哔哩 等级升级脚本

说明用的哔哩接口写的,测试可用,填上cookie即可。可挂云函数自动升级。有能力的可自行研究扩充或修改。代码# -*- coding: utf8 -*-
import requests
import json
import logging
import time
import importlib
import sys
importlib.reload(sys)

# 填写cookie即可运行
cookies = ""

logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s%(filename)s : %(levelname)s%(message)s',
    datefmt='%Y-%m-%d %A %H:%M:%S',
    filename="log.txt",
    filemode='w')

console = logging.StreamHandler()# 定义console handler
console.setLevel(logging.INFO)
formatter = logging.Formatter(
    '%(asctime)s%(filename)s : %(levelname)s%(message)s')
console.setFormatter(formatter)
# Create an instance
logging.getLogger().addHandler(console)

def extract_cookies(cookies):
    global csrf
    """从浏览器或者request headers中拿到cookie字符串,提取为字典格式的cookies"""
    cookies = dict()
    csrf = cookies['bili_jct']
    return cookies

# 银币数

def getCoin():
    cookie = extract_cookies(cookies)
    url = "http://account.bilibili.com/site/getCoin"
    r = requests.get(url, cookies=cookie).text
    j = json.loads(r)
    money = j['data']['money']
    return money

# 个人信息

def getInfo():
    global uid
    url = "http://api.bilibili.com/x/space/myinfo"
    cookie = extract_cookies(cookies)
    r = requests.get(url, cookies=cookie).text
    j = json.loads(r)
    uid = j['data']['mid']
    name = j['data']['name']
    level = j['data']['level']
    current_exp = j['data']['level_exp']['current_exp']
    next_exp = j['data']['level_exp']['next_exp']
    sub_exp = int(next_exp)-int(current_exp)
    days = int(int(sub_exp)/65)
    coin = getCoin()
    msg = "欢迎使用!!!用户: "+name + ",当前等级为 "+str(level) + " 级,当前经验为 " + \
      str(current_exp)+",距离升级还差"+str(sub_exp) + \
      " ,还需 "+str(days)+" 天升级!"+"银币数剩余 "+str(coin)
    logging.info(msg)

# 最新动态

def getActiveInfo():
    url = "https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=" + \
      str(uid)+"&type_list=268435455&from=weball&platform=web"
    cookie = extract_cookies(cookies)
    r = requests.get(url, cookies=cookie).text
    j = json.loads(r)
    return j

# 点赞 投币 5次

def Task():
    j = getActiveInfo()
    cards = j['data']['cards']
    count = 0
    for i in range(0, len(cards)):
      desc = cards['desc']
      like = cards['desc']['like']
      if "bvid" in desc:
            # 视频类型
            bvid = desc['bvid']
            aid = desc['rid_str']
            if like == 1:
                continue
            like_code = tolike(aid)
            coin_code = tocoin(bvid)
            toshare(aid)
            #coin_code = 0
            time.sleep(3)
            if like_code == 1 or coin_code == 1:
                count = count+1
            if count == 5:
                break
      logging.info('----------------------')

# 点赞函数

def tolike(aid):
    url = "https://api.bilibili.com/x/web-interface/archive/like"
    data = {
      'aid': aid,
      'like': 1,
      'csrf': csrf,
    }
    headers = {
      'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
    }
    cookie = extract_cookies(cookies)
    r = requests.post(url, data=data, headers=headers,cookies=cookie).text
    j = json.loads(r)
    code = j['code']
    if code == 0:
      logging.info(aid+' tolike succcessful !')
      return 1
    else:
      logging.info(aid+' tolike failed !')
      return 0

# 投币函数

def tocoin(bvid):
    coinNum = getCoin()
    if coinNum == 0:
      logging.info('not enough coin !')
      return -1
    url = "http://api.bilibili.com/x/web-interface/coin/add"
    data = {
      'bvid': bvid,
      'multiply': 1,
      'select_like': 1,
      'csrf': csrf
    }
    cookie = extract_cookies(cookies)
    r = requests.post(url, data=data, cookies=cookie).text
    j = json.loads(r)
    code = j['code']
    if code == 0:
      logging.info(bvid+' toaddcoin successful !')
      return 1
    else:
      logging.info(bvid+' toaddcoin failed!')
      return 0

# 分享视频

def toshare(rid):
    url = "https://api.vc.bilibili.com/dynamic_repost/v1/dynamic_repost/share"
    data = {
      'uid': 0,
      'type': 8,
      'share_uid': 0,
      'content': 'testing!',
      'rid': rid,
      'csrf': csrf
    }
    cookie = extract_cookies(cookies)
    r = requests.post(url, data=data, cookies=cookie).text
    j = json.loads(r)
    code = j['code']
    dynamic_id = j['data']['dynamic_id']
    if code == 0:
      logging.info('share successful!')
    else:
      logging.info('share failed!')
    time.sleep(2)
    todelshare(dynamic_id)

# 删除动态

def todelshare(dynamic_id):
    url = "https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/rm_dynamic"
    data = {
      'dynamic_id': dynamic_id,
      'csrf': csrf
    }
    cookie = extract_cookies(cookies)
    r = requests.post(url, data=data, cookies=cookie).text
    j = json.loads(r)
    code = j['code']
    if code == 0:
      logging.info('share delete successful!')
    else:
      logging.info('share delete failed!')

def run():
    getInfo()
    Task()

if __name__ == '__main__':
    run()


申明
综上所述,仅供参考学习交流,严禁做违法之事,所产生的不良后果与本人无关。侵权麻烦管理删帖,谢谢。


1233690 发表于 2021-12-6 11:36

6666666666

Wzgwxd 发表于 2021-12-6 12:05

谢谢大佬分享

xing31800 发表于 2021-12-6 14:47

6666

nniu 发表于 2021-12-6 14:55

谢谢大佬

wdk 发表于 2021-12-6 15:36

谢谢@Thanks!
页: [1]
查看完整版本: 哔哩哔哩 等级升级脚本