zhenxun_bot/zhenxun/plugins/parse_bilibili/parse_url.py
2024-07-29 23:31:11 +08:00

66 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()