File size: 4,719 Bytes
0aee47a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
"""
bilibili_api.utils.Credential
凭据类,用于各种请求操作的验证。
"""
import uuid
from typing import Union
import urllib.parse
from ..exceptions import (
CredentialNoBuvid3Exception,
CredentialNoBiliJctException,
CredentialNoSessdataException,
CredentialNoDedeUserIDException,
CredentialNoAcTimeValueException,
)
class Credential:
"""
凭据类,用于各种请求操作的验证。
"""
def __init__(
self,
sessdata: Union[str, None] = None,
bili_jct: Union[str, None] = None,
buvid3: Union[str, None] = None,
dedeuserid: Union[str, None] = None,
ac_time_value: Union[str, None] = None,
) -> None:
"""
各字段获取方式查看:https://nemo2011.github.io/bilibili-api/#/get-credential.md
Args:
sessdata (str | None, optional): 浏览器 Cookies 中的 SESSDATA 字段值. Defaults to None.
bili_jct (str | None, optional): 浏览器 Cookies 中的 bili_jct 字段值. Defaults to None.
buvid3 (str | None, optional): 浏览器 Cookies 中的 BUVID3 字段值. Defaults to None.
dedeuserid (str | None, optional): 浏览器 Cookies 中的 DedeUserID 字段值. Defaults to None.
ac_time_value (str | None, optional): 浏览器 Cookies 中的 ac_time_value 字段值. Defaults to None.
"""
self.sessdata = (
None
if sessdata is None
else (
sessdata if sessdata.find("%") != -1 else urllib.parse.quote(sessdata)
)
)
self.bili_jct = bili_jct
self.buvid3 = buvid3
self.dedeuserid = dedeuserid
self.ac_time_value = ac_time_value
def get_cookies(self) -> dict:
"""
获取请求 Cookies 字典
Returns:
dict: 请求 Cookies 字典
"""
cookies = {
"SESSDATA": self.sessdata,
"buvid3": self.buvid3,
"bili_jct": self.bili_jct,
"ac_time_value": self.ac_time_value,
}
if self.dedeuserid:
cookies.update({"DedeUserID": self.dedeuserid})
return cookies
def has_dedeuserid(self) -> bool:
"""
是否提供 dedeuserid。
Returns:
bool。
"""
return self.dedeuserid is not None and self.sessdata != ""
def has_sessdata(self) -> bool:
"""
是否提供 sessdata。
Returns:
bool。
"""
return self.sessdata is not None and self.sessdata != ""
def has_bili_jct(self) -> bool:
"""
是否提供 bili_jct。
Returns:
bool。
"""
return self.bili_jct is not None and self.sessdata != ""
def has_buvid3(self) -> bool:
"""
是否提供 buvid3
Returns:
bool.
"""
return self.buvid3 is not None and self.sessdata != ""
def has_ac_time_value(self) -> bool:
"""
是否提供 ac_time_value
Returns:
bool.
"""
return self.ac_time_value is not None and self.sessdata != ""
def raise_for_no_sessdata(self):
"""
没有提供 sessdata 则抛出异常。
"""
if not self.has_sessdata():
raise CredentialNoSessdataException()
def raise_for_no_bili_jct(self):
"""
没有提供 bili_jct 则抛出异常。
"""
if not self.has_bili_jct():
raise CredentialNoBiliJctException()
def raise_for_no_buvid3(self):
"""
没有提供 buvid3 时抛出异常。
"""
if not self.has_buvid3():
raise CredentialNoBuvid3Exception()
def raise_for_no_dedeuserid(self):
"""
没有提供 DedeUserID 时抛出异常。
"""
if not self.has_dedeuserid():
raise CredentialNoDedeUserIDException()
def raise_for_no_ac_time_value(self):
"""
没有提供 ac_time_value 时抛出异常。
"""
if not self.has_ac_time_value():
raise CredentialNoAcTimeValueException()
async def check_valid(self):
"""
检查 cookies 是否有效
Returns:
bool: cookies 是否有效
"""
# def generate_buvid3(self):
# """
# 生成 buvid3
# """
# self.buvid3 = str(uuid.uuid1()) + "infoc"
# 长度都不同了...用 credential.get_spi_buvid
|