|
| 1 | +import requests |
| 2 | +import json |
| 3 | +from fake_useragent import UserAgent |
| 4 | +from requests import utils |
| 5 | +import qrcode |
| 6 | + |
| 7 | + |
| 8 | +class BiliRequest: |
| 9 | + qrcode_generate_url = 'https://passport.bilibili.com/x/passport-login/web/qrcode/generate' |
| 10 | + qrcode_poll_url = 'https://passport.bilibili.com/x/passport-login/web/qrcode/poll' |
| 11 | + qrcode_url = '' |
| 12 | + qrcode_key = '' |
| 13 | + refresh_token = '' |
| 14 | + cookies = {} |
| 15 | + |
| 16 | + request_headers = { |
| 17 | + 'User-Agent': UserAgent().chrome, |
| 18 | + } |
| 19 | + |
| 20 | + # black_list_query_url = 'https://api.bilibili.com/x/relation/modify' |
| 21 | + black_list_add_url = "https://api.bilibili.com/x/relation/batch/modify" |
| 22 | + |
| 23 | + # 申请二维码 |
| 24 | + def getQrcodeData(self): |
| 25 | + # 获取二维码数据 |
| 26 | + res = requests.get(self.qrcode_generate_url, headers=self.request_headers) |
| 27 | + # 判断返回状态码 |
| 28 | + if res.status_code != 200: |
| 29 | + raise Exception('获取二维码失败,状态码:' + str(res.status_code)) |
| 30 | + # 解析返回包体 |
| 31 | + data = res.json() |
| 32 | + # 判断返回值 |
| 33 | + if data['code'] != 0: |
| 34 | + raise Exception('获取二维码失败,错误信息:' + data['message']) |
| 35 | + # 解析数据 |
| 36 | + self.qrcode_url = data['data']['url'] |
| 37 | + self.qrcode_key = data['data']['qrcode_key'] |
| 38 | + img = qrcode.make(self.qrcode_url) |
| 39 | + img.save('loginqr.png') |
| 40 | + |
| 41 | + # 获取二维码扫码状态 |
| 42 | + def getQrcodeScanData(self): |
| 43 | + res = requests.get(self.qrcode_poll_url, headers=self.request_headers, params={'qrcode_key': self.qrcode_key}) |
| 44 | + # 判断返回状态码 |
| 45 | + if res.status_code != 200: |
| 46 | + raise Exception('获取二维码扫描状态失败,状态码:' + str(res.status_code)) |
| 47 | + # 解析返回数据 |
| 48 | + data = res.json() |
| 49 | + if data['code'] != 0: |
| 50 | + raise Exception('获取二维码扫描状态失败,错误信息:' + data['message']) |
| 51 | + # 判断扫码状态 |
| 52 | + if data['data']['code'] == 86101: # 未扫描 |
| 53 | + return 86101 |
| 54 | + elif data['data']['code'] == 86090: # 已扫描未确认 |
| 55 | + return 86090 |
| 56 | + elif data['data']['code'] == 86038: # 已过期 |
| 57 | + return 86038 |
| 58 | + elif data['data']['code'] == 0: # 已确认 |
| 59 | + # 获取res里的cookie |
| 60 | + cookie_jar = res.cookies |
| 61 | + self.cookies = requests.utils.dict_from_cookiejar(cookie_jar) |
| 62 | + self.refresh_token = data['data']['refresh_token'] |
| 63 | + return 0 |
| 64 | + else: |
| 65 | + raise Exception('获取二维码扫描状态失败,错误信息:' + data['message']) |
| 66 | + |
| 67 | + # 批量拉黑 |
| 68 | + def batchBlock(self, uids): |
| 69 | + # 构造请求头 |
| 70 | + headers = self.request_headers |
| 71 | + headers['Content-Type'] = 'application/x-www-form-urlencoded' |
| 72 | + # 添加cookie |
| 73 | + headers['Cookie'] = ''.join([f'{k}={v};' for k, v in self.cookies.items()]) |
| 74 | + # 构造请求参数 |
| 75 | + params = { |
| 76 | + 'fids': ','.join(uids), |
| 77 | + 'act': 5, |
| 78 | + 're_src': 11, |
| 79 | + 'csrf': self.cookies.get('bili_jct'), |
| 80 | + } |
| 81 | + |
| 82 | + res = requests.post(self.black_list_add_url, headers=headers, data=params) |
| 83 | + # 打印请求 |
| 84 | + print(res.request.body) |
| 85 | + data = res.json() |
| 86 | + if data['code'] != 0: |
| 87 | + print('批量拉黑失败,错误信息:' + data['message']) |
| 88 | + return |
| 89 | + print("拉黑失败uid列表:" + str(data['data']['failed_fids'])) |
0 commit comments