修改bilibili_sub插件在windows平台下报错

改用bilireq库,同时补充部分bilireq暂无的方法如获取番剧、获取用户投稿视频
This commit is contained in:
Number_Sir
2022-05-04 17:02:56 +08:00
parent 1059a0aae0
commit 31cdabc229
2 changed files with 88 additions and 31 deletions
+40 -28
View File
@@ -1,12 +1,18 @@
from bilibili_api.exceptions.ResponseCodeException import ResponseCodeException # from bilibili_api.exceptions.ResponseCodeException import ResponseCodeException
from bilireq.exceptions import ResponseCodeError
from utils.manager import resources_manager from utils.manager import resources_manager
from asyncio.exceptions import TimeoutError from asyncio.exceptions import TimeoutError
from .model import BilibiliSub from .model import BilibiliSub
from bilibili_api.live import LiveRoom # from bilibili_api.live import LiveRoom
from bilibili_api import bangumi from bilireq.live import get_room_info_by_id
# from bilibili_api import bangumi
from .utils import get_meta
from utils.message_builder import image from utils.message_builder import image
from bilibili_api.user import User # from bilibili_api import user
from bilibili_api import user # from bilibili_api.user import User
from bilireq.user import get_user_info
from bilireq import dynamic
from .utils import get_videos
from typing import Optional from typing import Optional
from configs.path_config import IMAGE_PATH from configs.path_config import IMAGE_PATH
from datetime import datetime from datetime import datetime
@@ -36,9 +42,9 @@ async def add_live_sub(live_id: int, sub_user: str) -> str:
try: try:
async with db.transaction(): async with db.transaction():
try: try:
live = LiveRoom(live_id) """bilibili_api.live库的LiveRoom类中get_room_info改为bilireq.live库的get_room_info_by_id方法"""
live_info = (await live.get_room_info())["room_info"] live_info = await get_room_info_by_id(live_id)
except ResponseCodeException: except ResponseCodeError:
return f"未找到房间号Id:{live_id} 的信息,请检查Id是否正确" return f"未找到房间号Id:{live_id} 的信息,请检查Id是否正确"
uid = live_info["uid"] uid = live_info["uid"]
room_id = live_info["room_id"] room_id = live_info["room_id"]
@@ -78,16 +84,18 @@ async def add_up_sub(uid: int, sub_user: str) -> str:
try: try:
async with db.transaction(): async with db.transaction():
try: try:
u = user.User(uid) """bilibili_api.user库中User类的get_user_info改为bilireq.user库的get_user_info方法"""
user_info = await u.get_user_info() user_info = await get_user_info(uid)
except ResponseCodeException: except ResponseCodeError:
return f"未找到UpId:{uid} 的信息,请检查Id是否正确" return f"未找到UpId:{uid} 的信息,请检查Id是否正确"
uname = user_info["name"] uname = user_info["name"]
dynamic_info = await u.get_dynamics(0) """bilibili_api.user库中User类的get_dynamics改为bilireq.dynamic库的get_user_dynamics方法"""
dynamic_info = await dynamic.get_user_dynamics(uid)
dynamic_upload_time = 0 dynamic_upload_time = 0
if dynamic_info.get("cards"): if dynamic_info.get("cards"):
dynamic_upload_time = dynamic_info["cards"][0]["desc"]["timestamp"] dynamic_upload_time = dynamic_info["cards"][0]["desc"]["timestamp"]
video_info = await u.get_videos() """bilibili_api.user库中User类的get_videos改为bilireq.user库的get_videos方法"""
video_info = await get_videos(uid)
latest_video_created = 0 latest_video_created = 0
if video_info["list"].get("vlist"): if video_info["list"].get("vlist"):
latest_video_created = video_info["list"]["vlist"][0]["created"] latest_video_created = video_info["list"]["vlist"][0]["created"]
@@ -117,8 +125,9 @@ async def add_season_sub(media_id: int, sub_user: str) -> str:
try: try:
async with db.transaction(): async with db.transaction():
try: try:
season_info = await bangumi.get_meta(media_id) """bilibili_api.bangumi库中get_meta改为bilireq.bangumi库的get_meta方法"""
except ResponseCodeException: season_info = await get_meta(media_id)
except ResponseCodeError:
return f"未找到media_id:{media_id} 的信息,请检查Id是否正确" return f"未找到media_id:{media_id} 的信息,请检查Id是否正确"
season_id = season_info["media"]["season_id"] season_id = season_info["media"]["season_id"]
season_current_episode = season_info["media"]["new_ep"]["index"] season_current_episode = season_info["media"]["new_ep"]["index"]
@@ -200,7 +209,7 @@ async def get_sub_status(id_: int, sub_type: str) -> Optional[str]:
return await _get_up_status(id_) return await _get_up_status(id_)
elif sub_type == "season": elif sub_type == "season":
return await _get_season_status(id_) return await _get_season_status(id_)
except ResponseCodeException: except ResponseCodeError:
return f"Id:{id_} 获取信息失败...请检查订阅Id是否存在或稍后再试..." return f"Id:{id_} 获取信息失败...请检查订阅Id是否存在或稍后再试..."
# except Exception as e: # except Exception as e:
# logger.error(f"获取订阅状态发生预料之外的错误 id_:{id_} {type(e)}:{e}") # logger.error(f"获取订阅状态发生预料之外的错误 id_:{id_} {type(e)}:{e}")
@@ -212,12 +221,12 @@ async def _get_live_status(id_: int) -> Optional[str]:
获取直播订阅状态 获取直播订阅状态
:param id_: 直播间 id :param id_: 直播间 id
""" """
live = LiveRoom(id_) """bilibili_api.live库的LiveRoom类中get_room_info改为bilireq.live库的get_room_info_by_id方法"""
live_info = (await live.get_room_info())["room_info"] live_info = await get_room_info_by_id(id_)
title = live_info["title"] title = live_info["title"]
room_id = live_info["room_id"] room_id = live_info["room_id"]
live_status = live_info["live_status"] live_status = live_info["live_status"]
cover = live_info["cover"] cover = live_info["user_cover"]
sub = await BilibiliSub.get_sub(id_) sub = await BilibiliSub.get_sub(id_)
if sub.live_status != live_status: if sub.live_status != live_status:
await BilibiliSub.update_sub_info(id_, live_status=live_status) await BilibiliSub.update_sub_info(id_, live_status=live_status)
@@ -238,15 +247,16 @@ async def _get_up_status(id_: int) -> Optional[str]:
:return: :return:
""" """
_user = await BilibiliSub.get_sub(id_) _user = await BilibiliSub.get_sub(id_)
u = user.User(_user.uid) """bilibili_api.user库中User类的get_user_info改为bilireq.user库的get_user_info方法"""
user_info = await u.get_user_info() user_info = await get_user_info(id_)
uname = user_info["name"] uname = user_info["name"]
video_info = await u.get_videos() """bilibili_api.user库中User类的get_videos改为bilireq.user库的get_videos方法"""
video_info = await get_videos(id_)
latest_video_created = 0 latest_video_created = 0
video = None video = None
if _user.uname != uname: if _user.uname != uname:
await BilibiliSub.update_sub_info(id_, uname=uname) await BilibiliSub.update_sub_info(id_, uname=uname)
dynamic_img, dynamic_upload_time = await get_user_dynamic(u, _user) dynamic_img, dynamic_upload_time = await get_user_dynamic(id_, _user)
if video_info["list"].get("vlist"): if video_info["list"].get("vlist"):
video = video_info["list"]["vlist"][0] video = video_info["list"]["vlist"][0]
latest_video_created = video["created"] latest_video_created = video["created"]
@@ -280,7 +290,8 @@ async def _get_season_status(id_) -> Optional[str]:
获取 番剧 更新状态 获取 番剧 更新状态
:param id_: 番剧 id :param id_: 番剧 id
""" """
season_info = await bangumi.get_meta(id_) """bilibili_api.bangumi库中get_meta改为bilireq.bangumi库的get_meta方法"""
season_info = await get_meta(id_)
title = season_info["media"]["title"] title = season_info["media"]["title"]
_idx = (await BilibiliSub.get_sub(id_)).season_current_episode _idx = (await BilibiliSub.get_sub(id_)).season_current_episode
new_ep = season_info["media"]["new_ep"]["index"] new_ep = season_info["media"]["new_ep"]["index"]
@@ -297,15 +308,16 @@ async def _get_season_status(id_) -> Optional[str]:
async def get_user_dynamic( async def get_user_dynamic(
u: User, local_user: BilibiliSub uid: int, local_user: BilibiliSub
) -> "Optional[MessageSegment], int": ) -> "Optional[MessageSegment], int":
""" """
获取用户动态 获取用户动态
:param u: 用户类 :param uid: 用户uid
:param local_user: 数据库存储的用户数据 :param local_user: 数据库存储的用户数据
:return: 最新动态截图与时间 :return: 最新动态截图与时间
""" """
dynamic_info = await u.get_dynamics(0) """bilibili_api.user库中User类的get_dynamics改为bilireq.dynamic库的get_user_dynamics方法"""
dynamic_info = await dynamic.get_user_dynamics(uid)
browser = await get_browser() browser = await get_browser()
if dynamic_info.get("cards") and browser: if dynamic_info.get("cards") and browser:
dynamic_upload_time = dynamic_info["cards"][0]["desc"]["timestamp"] dynamic_upload_time = dynamic_info["cards"][0]["desc"]["timestamp"]
@@ -397,4 +409,4 @@ class SubManager:
if sub: if sub:
return sub return sub
await self.reload_sub_data() await self.reload_sub_data()
return await self.random_sub_data() return await self.random_sub_data()
+48 -3
View File
@@ -1,7 +1,8 @@
from utils.image_utils import BuildImage from utils.image_utils import BuildImage
from configs.path_config import IMAGE_PATH from configs.path_config import IMAGE_PATH
from utils.http_utils import AsyncHttpx from utils.http_utils import AsyncHttpx
from bilibili_api import user # from bilibili_api import user
from bilireq.user import get_user_info
from io import BytesIO from io import BytesIO
@@ -28,8 +29,8 @@ async def create_live_des_image(uid: int, title: str, cover: str, tags: str, des
:param des: 直播简介 :param des: 直播简介
:return: :return:
""" """
u = user.User(uid)
user_info = await u.get_user_info() user_info = await get_user_info(uid)
name = user_info["name"] name = user_info["name"]
sex = user_info["sex"] sex = user_info["sex"]
face = user_info["face"] face = user_info["face"]
@@ -68,3 +69,47 @@ def _create_live_des_image(
border_img = BuildImage(1772, 2657, background=border) border_img = BuildImage(1772, 2657, background=border)
bk = BuildImage(1772, 2657, font_size=30) bk = BuildImage(1772, 2657, font_size=30)
bk.paste(cover, (0, 100), center_type="by_width") bk.paste(cover, (0, 100), center_type="by_width")
async def get_meta(media_id: int, auth=None, reqtype="both", **kwargs):
"""
根据番剧 ID 获取番剧元数据信息,
作为bilibili_api和bilireq的替代品。
如果bilireq.bangumi更新了,可以转为调用bilireq.bangumi的get_meta方法,两者完全一致。
"""
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)
return raw_json['result']
async def get_videos(
uid: int, tid: int = 0, pn: int = 1, keyword: str = "", order: str = "pubdate",
*, auth=None, reqtype="both", **kwargs
):
"""
获取用户投该视频信息
作为bilibili_api和bilireq的替代品。
如果bilireq.user更新了,可以转为调用bilireq.user的get_videos方法,两者完全一致。
:param uid: 用户 UID
:param tid: 分区 ID
:param pn: 页码
:param keyword: 搜索关键词
: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,
"ps": 30,
"tid": tid,
"pn": pn,
"keyword": keyword,
"order": order
}
return await get(url, params=params, auth=auth, reqtype=reqtype, **kwargs)