From ec448cfdfb4bbace72b1d10c733c96781dafed56 Mon Sep 17 00:00:00 2001 From: Cinte Date: Sat, 17 Sep 2022 10:58:58 +0800 Subject: [PATCH 1/3] replace get_user_info with get_user_card --- plugins/bilibili_sub/data_source.py | 6 +++--- plugins/bilibili_sub/utils.py | 12 ++++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/plugins/bilibili_sub/data_source.py b/plugins/bilibili_sub/data_source.py index d3488a69..b7a1e424 100755 --- a/plugins/bilibili_sub/data_source.py +++ b/plugins/bilibili_sub/data_source.py @@ -7,7 +7,7 @@ from asyncio.exceptions import TimeoutError from utils.utils import get_bot from .model import BilibiliSub from bilireq.live import get_room_info_by_id -from .utils import get_meta +from .utils import get_meta, get_user_card from utils.message_builder import image from bilireq.user import get_user_info from bilireq import dynamic @@ -83,7 +83,7 @@ async def add_up_sub(uid: int, sub_user: str) -> str: async with db.transaction(): try: """bilibili_api.user库中User类的get_user_info改为bilireq.user库的get_user_info方法""" - user_info = await get_user_info(uid) + user_info = await get_user_card(uid) except ResponseCodeError: return f"未找到UpId:{uid} 的信息,请检查Id是否正确" uname = user_info["name"] @@ -249,7 +249,7 @@ async def _get_up_status(id_: int) -> Optional[str]: """ _user = await BilibiliSub.get_sub(id_) """bilibili_api.user库中User类的get_user_info改为bilireq.user库的get_user_info方法""" - user_info = await get_user_info(_user.uid) + user_info = await get_user_card(_user.uid) uname = user_info["name"] """bilibili_api.user库中User类的get_videos改为bilireq.user库的get_videos方法""" video_info = await get_videos(_user.uid) diff --git a/plugins/bilibili_sub/utils.py b/plugins/bilibili_sub/utils.py index 76e30fa9..da9bbb41 100755 --- a/plugins/bilibili_sub/utils.py +++ b/plugins/bilibili_sub/utils.py @@ -8,7 +8,7 @@ from io import BytesIO BORDER_PATH = IMAGE_PATH / "border" BORDER_PATH.mkdir(parents=True, exist_ok=True) - +BASE_URL = "https://api.bilibili.com" async def get_pic(url: str) -> bytes: """ @@ -78,7 +78,6 @@ async def get_meta(media_id: int, auth=None, reqtype="both", **kwargs): """ from bilireq.utils import get - BASE_URL = "https://api.bilibili.com" url = f"{BASE_URL}/pgc/review/user" params = {"media_id": media_id} raw_json = await get(url, raw=True, params=params, auth=auth, reqtype=reqtype, **kwargs) @@ -101,7 +100,6 @@ async def get_videos( :param order: 排序方式,可以为 “pubdate(上传日期从新到旧), stow(收藏从多到少), click(播放量从多到少)” """ from bilireq.utils import get - BASE_URL = "https://api.bilibili.com" url = f"{BASE_URL}/x/space/arc/search" params = { "mid": uid, @@ -111,4 +109,10 @@ async def get_videos( "keyword": keyword, "order": order } - return await get(url, params=params, auth=auth, reqtype=reqtype, **kwargs) \ No newline at end of file + return await get(url, params=params, auth=auth, reqtype=reqtype, **kwargs) + +async def get_user_card(mid, photo: bool = False): + from bilireq.utils import get + url = f"{BASE_URL}/x/web-interface/card" + r = await get(url, params={"mid":mid, "photo": photo}) + return r["card"] From 1174b5cc7f8c8d1c67730f5658e0752cdb39895f Mon Sep 17 00:00:00 2001 From: Cinte Date: Sat, 17 Sep 2022 11:23:55 +0800 Subject: [PATCH 2/3] x --- plugins/bilibili_sub/utils.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/plugins/bilibili_sub/utils.py b/plugins/bilibili_sub/utils.py index da9bbb41..26c1166a 100755 --- a/plugins/bilibili_sub/utils.py +++ b/plugins/bilibili_sub/utils.py @@ -111,8 +111,16 @@ async def get_videos( } return await get(url, params=params, auth=auth, reqtype=reqtype, **kwargs) -async def get_user_card(mid, photo: bool = False): +async def get_user_card(mid, photo: bool = False, auth=None, reqtype="both", **kwargs): from bilireq.utils import get + url = f"{BASE_URL}/x/web-interface/card" - r = await get(url, params={"mid":mid, "photo": photo}) - return r["card"] + return ( + await get( + url, + params={"mid": mid, "photo": photo}, + auth=auth, + reqtype=reqtype, + **kwargs, + ) + )["card"] From 32e8136f71ded541b1dbefa8a89d3be9f605519c Mon Sep 17 00:00:00 2001 From: Cinte Date: Sat, 17 Sep 2022 18:26:49 +0800 Subject: [PATCH 3/3] fix get_video() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 目前测试了下,至少-401的情况少了很多 --- plugins/bilibili_sub/utils.py | 43 ++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/plugins/bilibili_sub/utils.py b/plugins/bilibili_sub/utils.py index 26c1166a..861b62ea 100755 --- a/plugins/bilibili_sub/utils.py +++ b/plugins/bilibili_sub/utils.py @@ -1,8 +1,9 @@ from utils.image_utils import BuildImage from configs.path_config import IMAGE_PATH -from utils.http_utils import AsyncHttpx +from utils.http_utils import AsyncHttpx, get_user_agent # from bilibili_api import user from bilireq.user import get_user_info +from httpx import AsyncClient from io import BytesIO @@ -85,8 +86,7 @@ async def get_meta(media_id: int, auth=None, reqtype="both", **kwargs): async def get_videos( - uid: int, tid: int = 0, pn: int = 1, keyword: str = "", order: str = "pubdate", - *, auth=None, reqtype="both", **kwargs + uid: int, tid: int = 0, pn: int = 1, keyword: str = "", order: str = "pubdate" ): """ 获取用户投该视频信息 @@ -99,17 +99,34 @@ async def get_videos( :param keyword: 搜索关键词 :param order: 排序方式,可以为 “pubdate(上传日期从新到旧), stow(收藏从多到少), click(播放量从多到少)” """ - from bilireq.utils import get + from bilireq.utils import ResponseCodeError + url = f"{BASE_URL}/x/space/arc/search" - params = { - "mid": uid, - "ps": 30, - "tid": tid, - "pn": pn, - "keyword": keyword, - "order": order - } - return await get(url, params=params, auth=auth, reqtype=reqtype, **kwargs) + headers = get_user_agent() + headers["Referer"] = f"https://space.bilibili.com/{uid}/video" + async with AsyncClient() as client: + r = await client.head( + "https://space.bilibili.com", + headers=headers, + ) + params = { + "mid": uid, + "ps": 30, + "tid": tid, + "pn": pn, + "keyword": keyword, + "order": order, + } + raw_json = ( + await client.get(url, params=params, headers=headers, cookies=r.cookies) + ).json() + if raw_json["code"] != 0: + raise ResponseCodeError( + code=raw_json["code"], + msg=raw_json["message"], + data=raw_json.get("data", None), + ) + return raw_json["data"] async def get_user_card(mid, photo: bool = False, auth=None, reqtype="both", **kwargs): from bilireq.utils import get