mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
import aiohttp
|
||
from bilireq import live, video
|
||
|
||
from zhenxun.utils.user_agent import get_user_agent
|
||
|
||
from .get_image import get_image
|
||
from .information_container import InformationContainer
|
||
|
||
|
||
async def parse_bili_url(get_url: str, information_container: InformationContainer):
|
||
"""解析Bilibili链接,获取相关信息
|
||
|
||
参数:
|
||
get_url (str): 待解析的Bilibili链接
|
||
information_container (InformationContainer): 信息容器
|
||
|
||
返回:
|
||
dict: 包含解析得到的信息的字典
|
||
"""
|
||
response_url = ""
|
||
|
||
# 去除链接末尾的斜杠
|
||
if get_url[-1] == "/":
|
||
get_url = get_url[:-1]
|
||
|
||
# 发起HTTP请求,获取重定向后的链接
|
||
async with aiohttp.ClientSession(headers=get_user_agent()) as session:
|
||
async with session.get(
|
||
get_url,
|
||
timeout=7,
|
||
) as response:
|
||
response_url = str(response.url).split("?")[0]
|
||
|
||
# 去除重定向后链接末尾的斜杠
|
||
if response_url[-1] == "/":
|
||
response_url = response_url[:-1]
|
||
|
||
# 根据不同类型的链接进行处理
|
||
if response_url.startswith(
|
||
("https://www.bilibili.com/video", "https://m.bilibili.com/video/")
|
||
):
|
||
vd_url = response_url
|
||
vid = vd_url.split("/")[-1]
|
||
vd_info = await video.get_video_base_info(vid)
|
||
information_container.update({"vd_info": vd_info, "vd_url": vd_url})
|
||
|
||
elif response_url.startswith("https://live.bilibili.com"):
|
||
live_url = response_url
|
||
liveid = live_url.split("/")[-1]
|
||
live_info = await live.get_room_info_by_id(liveid)
|
||
information_container.update({"live_info": live_info, "live_url": live_url})
|
||
|
||
elif response_url.startswith("https://www.bilibili.com/read"):
|
||
cv_url = response_url
|
||
image_info = await get_image(cv_url)
|
||
information_container.update({"image_info": image_info, "image_url": cv_url})
|
||
|
||
elif response_url.startswith(
|
||
("https://www.bilibili.com/opus", "https://t.bilibili.com")
|
||
):
|
||
opus_url = response_url
|
||
image_info = await get_image(opus_url)
|
||
information_container.update({"image_info": image_info, "image_url": opus_url})
|
||
|
||
return information_container.get_information()
|