2023-07-02 06:25:49 +00:00
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
from core.builtins import Bot
|
|
|
|
from core.builtins import Image, Plain, ErrorMessage
|
|
|
|
from core.utils.http import get_url
|
|
|
|
|
|
|
|
|
2023-07-02 06:46:55 +00:00
|
|
|
async def get_info(msg: Bot.MessageSession, url, get_detail=False):
|
2023-07-02 06:25:49 +00:00
|
|
|
try:
|
2023-07-02 06:46:55 +00:00
|
|
|
res = await get_url(url, 200, fmt='json')
|
2023-07-02 06:25:49 +00:00
|
|
|
except ValueError as e:
|
|
|
|
if str(e).startswith('404'):
|
|
|
|
await msg.finish(msg.locale.t("bilibili.message.error"))
|
|
|
|
else:
|
2023-07-02 06:37:49 +00:00
|
|
|
await msg.finish(ErrorMessage(str(e)))
|
2023-07-02 06:25:49 +00:00
|
|
|
|
|
|
|
|
2023-07-02 06:57:49 +00:00
|
|
|
view = res["data"]["View"]
|
|
|
|
stat = view["stat"]
|
2023-07-02 06:25:49 +00:00
|
|
|
|
2023-07-02 06:57:49 +00:00
|
|
|
pic = view["pic"]
|
|
|
|
video_url = f'https://www.bilibili.com/video/{view["bvid"]}'
|
|
|
|
title = view["title"]
|
|
|
|
tname = view["tname"]
|
2023-07-02 06:25:49 +00:00
|
|
|
|
2023-07-02 06:57:49 +00:00
|
|
|
timestamp = view["ctime"]
|
2023-07-02 06:25:49 +00:00
|
|
|
dt_object = datetime.fromtimestamp(timestamp)
|
|
|
|
time = dt_object.strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
|
2023-07-02 06:57:49 +00:00
|
|
|
if len(view["pages"]) > 1:
|
|
|
|
pages = f' ({len(view["pages"])} P)'
|
2023-07-02 06:25:49 +00:00
|
|
|
else:
|
|
|
|
pages = ''
|
|
|
|
|
2023-07-02 06:57:49 +00:00
|
|
|
stat_view = format_num(stat["view"])
|
|
|
|
stat_danmaku = format_num(stat["danmaku"])
|
|
|
|
stat_reply = format_num(stat["reply"])
|
|
|
|
stat_favorite = format_num(stat["favorite"])
|
|
|
|
stat_coin = format_num(stat["coin"])
|
|
|
|
stat_share = format_num(stat["share"])
|
|
|
|
stat_like = format_num(stat["like"])
|
2023-07-02 06:25:49 +00:00
|
|
|
|
2023-07-02 06:57:49 +00:00
|
|
|
owner = view["owner"]["name"]
|
|
|
|
fans = format_num(res["data"]["Card"]["card"]["fans"])
|
2023-07-02 06:25:49 +00:00
|
|
|
|
|
|
|
if get_detail:
|
2023-07-02 06:57:49 +00:00
|
|
|
output = video_url + msg.locale.t("bilibili.message", title=title, tname=tname, owner=owner, time=time)
|
2023-07-02 06:25:49 +00:00
|
|
|
else:
|
2023-07-02 06:57:49 +00:00
|
|
|
output = video_url + msg.locale.t("bilibili.message.detail", title=title, pages=pages, tname=tname,
|
2023-07-02 06:25:49 +00:00
|
|
|
owner=owner, fans=fans, view=stat_view, danmaku=stat_danmaku, reply=stat_reply,
|
|
|
|
like=stat_like, coin=stat_coin, favorite=stat_favorite, share=stat_share)
|
|
|
|
|
2023-07-02 06:46:55 +00:00
|
|
|
await msg.finish([Image(pic), Plain(output)])
|
2023-07-02 06:25:49 +00:00
|
|
|
|
|
|
|
|
2023-07-02 06:37:49 +00:00
|
|
|
def format_num(number):
|
2023-07-02 06:25:49 +00:00
|
|
|
if number >= 1000000000:
|
|
|
|
return f'{number/1000000000:.1f}B'
|
|
|
|
elif number >= 1000000:
|
|
|
|
return f'{number/1000000:.1f}M'
|
|
|
|
elif number >= 1000:
|
|
|
|
return f'{number/1000:.1f}k'
|
|
|
|
else:
|
|
|
|
return str(number)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|