def main(): auth = OAuth(oauth_filename) if not auth.is_login() or auth.get_expire_time() < datetime.datetime.now(): username = input('user name or email address: ') password = input('password: '******'r') as f: cache_list = json.load(f) else: cache_list = [] cache_list = set(cache_list) exp_json = requests.get('https://www.bilibili.com/plus/account/exp.php', cookies=cookies).json() coins_left = 5 - int(exp_json['number'] / 10) page = 1 while True: params = {'callback': 'abc', 'pn': page, 'ps': 100, 'jsonp': 'jsonp'} history_json = json.loads( requests.get('https://api.bilibili.com/x/v2/history', params=params, cookies=cookies, headers={ 'Referer': 'https://www.bilibili.com' '/account/history' }).text[4:-1]) for video in history_json['data']: bvid = video['bvid'] aid = video.get('aid', bv_to_av(bvid)) copyright = video['copyright'] headers = {'Referer': f'https://www.bilibili.com/video/av{aid}'} if aid not in cache_list: params = {'callback': 'abc', 'jsonp': 'jsonp', 'aid': aid} coin_json = json.loads( requests.get( 'https://api.bilibili.com/x/web-interface/archive/coins', params=params, cookies=cookies, headers=headers).text[4:-1]) available_coins = 3 - copyright - coin_json['data']['multiply'] throw_coins = min(coins_left, available_coins) if throw_coins > 0: params = { 'aid': aid, 'multiply': throw_coins, 'select_like': 0, 'cross_domain': True, 'csrf': cookies['bili_jct'] } requests.post( 'https://api.bilibili.com/x/web-interface/coin/add', data=params, cookies=cookies, headers=headers) print('throw %d coins to av%d' % (throw_coins, aid)) if throw_coins == 0 or throw_coins == available_coins: cache_list.add(aid) coins_left -= throw_coins if coins_left == 0: with open(cache_coin_av_list, 'w') as f: json.dump(list(cache_list), f) return if len(history_json['data']) == 0: with open(cache_coin_av_list, 'w') as f: json.dump(list(cache_list), f) return page += 1