|
9 | 9 |
|
10 | 10 | # https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/misc/sign/wbi.md |
11 | 11 |
|
| 12 | + |
12 | 13 | class WbiSign(object): |
13 | 14 | def __init__(self): |
14 | 15 | self.config = Model().get_config() |
15 | 16 |
|
16 | 17 | mixinKeyEncTab = [ |
17 | | - 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, |
18 | | - 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, |
19 | | - 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, |
20 | | - 36, 20, 34, 44, 52 |
| 18 | + 46, |
| 19 | + 47, |
| 20 | + 18, |
| 21 | + 2, |
| 22 | + 53, |
| 23 | + 8, |
| 24 | + 23, |
| 25 | + 32, |
| 26 | + 15, |
| 27 | + 50, |
| 28 | + 10, |
| 29 | + 31, |
| 30 | + 58, |
| 31 | + 3, |
| 32 | + 45, |
| 33 | + 35, |
| 34 | + 27, |
| 35 | + 43, |
| 36 | + 5, |
| 37 | + 49, |
| 38 | + 33, |
| 39 | + 9, |
| 40 | + 42, |
| 41 | + 19, |
| 42 | + 29, |
| 43 | + 28, |
| 44 | + 14, |
| 45 | + 39, |
| 46 | + 12, |
| 47 | + 38, |
| 48 | + 41, |
| 49 | + 13, |
| 50 | + 37, |
| 51 | + 48, |
| 52 | + 7, |
| 53 | + 16, |
| 54 | + 24, |
| 55 | + 55, |
| 56 | + 40, |
| 57 | + 61, |
| 58 | + 26, |
| 59 | + 17, |
| 60 | + 0, |
| 61 | + 1, |
| 62 | + 60, |
| 63 | + 51, |
| 64 | + 30, |
| 65 | + 4, |
| 66 | + 22, |
| 67 | + 25, |
| 68 | + 54, |
| 69 | + 21, |
| 70 | + 56, |
| 71 | + 59, |
| 72 | + 6, |
| 73 | + 63, |
| 74 | + 57, |
| 75 | + 62, |
| 76 | + 11, |
| 77 | + 36, |
| 78 | + 20, |
| 79 | + 34, |
| 80 | + 44, |
| 81 | + 52, |
21 | 82 | ] |
22 | 83 |
|
23 | 84 | def get_wbi_keys(self) -> tuple[str, str]: |
24 | 85 | """Get the refresh token""" |
25 | 86 | headers = Model().get_headers_with_cookies_and_refer() |
26 | | - resp = requests.get('https://api.bilibili.com/x/web-interface/nav', headers=headers) |
| 87 | + resp = requests.get( |
| 88 | + "https://api.bilibili.com/x/web-interface/nav", headers=headers |
| 89 | + ) |
27 | 90 | resp.raise_for_status() |
28 | 91 | json_content = resp.json() |
29 | | - img_url: str = json_content['data']['wbi_img']['img_url'] |
30 | | - sub_url: str = json_content['data']['wbi_img']['sub_url'] |
31 | | - img_key = img_url.rsplit('/', 1)[1].split('.')[0] |
32 | | - sub_key = sub_url.rsplit('/', 1)[1].split('.')[0] |
| 92 | + img_url: str = json_content["data"]["wbi_img"]["img_url"] |
| 93 | + sub_url: str = json_content["data"]["wbi_img"]["sub_url"] |
| 94 | + img_key = img_url.rsplit("/", 1)[1].split(".")[0] |
| 95 | + sub_key = sub_url.rsplit("/", 1)[1].split(".")[0] |
33 | 96 | return img_key, sub_key |
34 | 97 |
|
35 | 98 | def get_mixin_key(self, orig: str): |
36 | 99 | """shuffle the string""" |
37 | | - return reduce(lambda s, i: s + orig[i], self.mixinKeyEncTab, '')[:32] |
| 100 | + return reduce(lambda s, i: s + orig[i], self.mixinKeyEncTab, "")[:32] |
38 | 101 |
|
39 | 102 | def enc_wbi(self, params: dict, img_key: str, sub_key: str): |
40 | 103 | """wbi sign""" |
41 | 104 | mixin_key = self.get_mixin_key(img_key + sub_key) |
42 | 105 | curr_time = round(time.time()) |
43 | | - params['wts'] = curr_time |
| 106 | + params["wts"] = curr_time |
44 | 107 | params = dict(sorted(params.items())) |
45 | 108 | # filter the value of "!'()*" |
46 | 109 | params = { |
47 | | - k: ''.join(filter(lambda char: char not in "!'()*", str(v))) |
48 | | - for k, v |
49 | | - in params.items() |
| 110 | + k: "".join(filter(lambda char: char not in "!'()*", str(v))) |
| 111 | + for k, v in params.items() |
50 | 112 | } |
51 | 113 | query = urllib.parse.urlencode(params) |
52 | 114 | wbi_sign = md5((query + mixin_key).encode()).hexdigest() |
53 | 115 | # add `w_rid` parameter in the url |
54 | | - params['w_rid'] = wbi_sign |
| 116 | + params["w_rid"] = wbi_sign |
55 | 117 | return params |
56 | 118 |
|
57 | 119 | def get_wbi_signed_params(self, params): |
58 | 120 | img_key, sub_key = self.get_wbi_keys() |
59 | 121 |
|
60 | | - signed_params = self.enc_wbi( |
61 | | - params=params, |
62 | | - img_key=img_key, |
63 | | - sub_key=sub_key |
64 | | - ) |
| 122 | + signed_params = self.enc_wbi(params=params, img_key=img_key, sub_key=sub_key) |
65 | 123 | return signed_params |
0 commit comments